diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index c7eaa907..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint"], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended" - ], - "ignorePatterns": ["node_modules", "test", "dist"], - "rules": { - "@typescript-eslint/explicit-function-return-type": "warn", - "@typescript-eslint/typedef": [ - "error", - { - "arrayDestructuring": true, - "arrowParameter": true, - "memberVariableDeclaration": true, - "parameter": true, - "propertyDeclaration": true, - "objectDestructuring": true, - "variableDeclaration": true, - "variableDeclarationIgnoreFunction": true - } - ], - "@typescript-eslint/no-inferrable-types": 0, - "@typescript-eslint/naming-convention": ["error", { "selector": "variableLike", "format": ["camelCase"] }] - } -} diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 2e2c7b23..00000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -dist/** -diff linguist-generated=true \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 10dce26e..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,26 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: 'npm' # See documentation for possible values - directory: '/' # Location of package manifests - schedule: - interval: 'daily' - # Config to only set patch-labels for dependabot PRs - # OBS - For this to happen it also requires that a skip-release label is added on the repository level - labels: - - 'patch' - - # Maintain dependencies for GitHub Actions - - package-ecosystem: 'github-actions' - # Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.) - directory: '/' - schedule: - interval: 'daily' - # Config to only set patch-labels for dependabot PRs - # OBS - For this to happen it also requires that a skip-release label is added on the repository level - labels: - - 'patch' diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml deleted file mode 100644 index 6890c89c..00000000 --- a/.github/workflows/Release.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: Creating release -run-name: ${{ github.actor }} creating a release -on: - pull_request: - types: [closed] - -jobs: - call-release-workflow: - uses: omegapoint/cydig-reusable-workflows/.github/workflows/release.yml@main diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 8e13fe40..00000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: 'CodeQL' - -on: - push: - branches: ['main'] - pull_request: - branches: ['main'] - schedule: - - cron: '25 21 * * 1' - -jobs: - analyze: - name: Analyze (${{ matrix.language }}) - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} - permissions: - security-events: write - packages: read - actions: read - contents: read - - strategy: - fail-fast: false - matrix: - include: - - language: javascript-typescript - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: '/language:${{matrix.language}}' diff --git a/.github/workflows/compliance-workflow.yml b/.github/workflows/compliance-workflow.yml deleted file mode 100644 index 1f15de1c..00000000 --- a/.github/workflows/compliance-workflow.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Compliance Workflow - -on: - workflow_dispatch: - schedule: - - cron: '0 1 * * 1-5' - -jobs: - CyDig-Compliance-Workflow: - uses: Omegapoint/cydig-reusable-workflows/.github/workflows/compliance-template.yml@main - secrets: inherit diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index b2691f72..00000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: test action -run-name: ${{ github.actor }} is running tests -permissions: - contents: read - pages: read - id-token: write - -on: [pull_request, workflow_dispatch] -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup node - uses: actions/setup-node@v4 - - name: Install dependencies - run: npm ci - - name: Run lint and prettier - run: npm run lint && npm run format:check - - name: Run tests - run: npm run test - - name: Build Action - run: npm run build - - name: 'Az CLI login' - uses: azure/login@v2 - with: - client-id: ${{ secrets.AZURE_CLIENT_ID_DEV }} - tenant-id: ${{ secrets.AZURE_TENANT_ID }} - subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_DEV }} - - name: 'Run Azure Compliance Controls' - uses: ./ - with: - subscription: ${{ secrets.AZURE_SUBSCRIPTION_ID_DEV }} - cydigConfigPath: ${{ github.workspace }}/src/cydigConfig.json diff --git a/.gitignore b/.gitignore deleted file mode 100644 index a5f224a9..00000000 --- a/.gitignore +++ /dev/null @@ -1,107 +0,0 @@ -# Dependency directory -node_modules - -# Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# next.js build output -.next - -# nuxt.js build output -.nuxt - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# OS metadata -.DS_Store -Thumbs.db - -# Ignore built ts files -__tests__/runner/* - -# IDE files -.idea -.vscode -*.code-workspace - -# Others -ResultsFile.xml -dist \ No newline at end of file diff --git a/.husky/husky.sh b/.husky/husky.sh deleted file mode 100755 index cec959a6..00000000 --- a/.husky/husky.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env sh -if [ -z "$husky_skip_init" ]; then - debug () { - if [ "$HUSKY_DEBUG" = "1" ]; then - echo "husky (debug) - $1" - fi - } - - readonly hook_name="$(basename -- "$0")" - debug "starting $hook_name..." - - if [ "$HUSKY" = "0" ]; then - debug "HUSKY env variable is set to 0, skipping hook" - exit 0 - fi - - if [ -f ~/.huskyrc ]; then - debug "sourcing ~/.huskyrc" - . ~/.huskyrc - fi - - readonly husky_skip_init=1 - export husky_skip_init - sh -e "$0" "$@" - exitCode="$?" - - if [ $exitCode != 0 ]; then - echo "husky - $hook_name hook exited with code $exitCode (error)" - fi - - if [ $exitCode = 127 ]; then - echo "husky - command not found in PATH=$PATH" - fi - - exit $exitCode -fi diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 3ec6cc22..00000000 --- a/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -dist/ -node_modules/ -coverage/ -js_out/ -README.md \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 4f0dc510..00000000 --- a/.prettierrc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "printWidth": 120, - "tabWidth": 2, - "useTabs": false, - "semi": true, - "singleQuote": true, - "bracketSpacing": true, - "arrowParens": "always", - "singleAttributePerLine": true -} diff --git a/LinitingAndFormat.md b/LinitingAndFormat.md deleted file mode 100644 index 240e729d..00000000 --- a/LinitingAndFormat.md +++ /dev/null @@ -1,26 +0,0 @@ -# How to install linting and format - -1. Run the following commands (be in the root, if you don't have a package.json there, run npm init first to create one): - -```yaml -npm install eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin husky prettier --save-dev -npm pkg set scripts.prepare="husky install" -npm run prepare -``` - -2. Copy files: .eslintrc.json, .prettierignore, .prettierrc and .husky/pre-commit - -3. Add following to script section in package.json: - -```json -"lint": "eslint . --ext .ts", -"lint:fix": "eslint . --fix --ext .ts", -"format:write": "npx prettier -w .", -"format:check": "npx prettier -c .", -``` - -4. Make a commit. You should see that your files are being checked for rule breaks. If it does not work and you are using a Mac, run following command and try a new commit: - -```yaml -chmod ug+x .husky/* -``` diff --git a/README.md b/README.md deleted file mode 100644 index 9d60884d..00000000 --- a/README.md +++ /dev/null @@ -1,74 +0,0 @@ -[![OP Compliance Dashboard](https://img.shields.io/badge/OP%20Compliance%20Dashboard-click%20here-blue)](https://cydig.omegapoint.cloud/cydig)

-![Timestamp](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2Ftimestamp%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)

-![threatModelingDate](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FthreatModelingDate%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-![numberOfReviewers](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FnumberOfReviewers%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-![scaTool](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FscaTool%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-![sastTool](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FsastTool%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-[![secureScore](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FsecureScore%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)](https://portal.azure.com/#view/Microsoft_Azure_Security/RecommendationsBladeV2/subscriptionIds~/%5B%22***%22%5D/source/SecurityPosture_ViewRecommendation)
-[![allowedLocationPolicy](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FallowedLocationPolicy%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)](https://portal.azure.com/#view/Microsoft_Azure_Policy/PolicyMenuBlade/~/Compliance)
-![pentestDate](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FpentestDate%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-![numberOfDeployedVMs](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FnumberOfDeployedVMs%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-![numberOfExposedSecrets](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FnumberOfExposedSecrets%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-![codeQualityTool](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FcodeQualityTool%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-![usersInProduction](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FusersInProduction%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
-![entitiesInCode](https://img.shields.io/endpoint?url=https%3A%2F%2Ffunc-cydig-badge-service-prod.azurewebsites.net%2Fapi%2Fteams%2FCyDig%2Fsources%2FGitHub%2Fprojects%2Fnot-specified%2Frepositories%2Fcydig-azure-compliance-action%2Fcontrols%2FentitiesInCode%3Fcode%3DxaEvCDsaK01y2Z6SBivwOKndN4o915lpOTt1VkmULgsxgsjkml7u1DOhgULzmAPX)
- - -# CyDig Azure Compliance Action - -This repository contains a action with azure compliance controls. - -## Azure Compliance Controls - -The azure compliance controls that are currently available are listed below. - -* Azure Secure Score -* Number of users in a subscription (production) in Azure -* Number of deployed VMs in Azure -* Azure resources in EU only - -## Development on already existing or new azure control - -1. To start development, create a branch named **feature/your-branch-name**. - -2. Run the command below from the root. - -```bash -npm install -``` - -By first running npm install in the root you get the linting and format dependencies downloaded. To enable so that every time you make a commit, a pre-hook will run to validate the rules read more [here](/LinitingAndFormat.md). To fix format warnings manually run the following command from the **root**: - -```bash -npm run format:write -``` - -3. If you are developing a new control, create a new folder for your control in the ```src``` folder. - -4. Start developing. To compile your code, run the following command:

 - -```bash -npm run build -``` - -5. To run the tests, run the following command: -```bash -npm run test -``` - -To generated test results in a XML-file, run the following command: - -``` bash -npm run testScript -``` - -6. If necessary, add input parameter in ```action.yml```, if it is needed for the control. - -7. When pushing the code the repository the workflow will build and push your code to the repository. - -*For more information about developing in the CyDig project, please go to the [Wiki](https://dev.azure.com/CyDig/CyDig/_wiki/wikis/CyDig.wiki/5/Att-jobba-i-CyDig)* - -## Creating a release for the action -At cydig, we follow [Semantic Versioning](https://semver.org/) for our action releases. Practically, this means that when you're developing and creating a pull request (PR), you can assign one of three labels to the PR: Major, Minor, or Patch. These labels correspond to version numbers in the format vX.Y.Z, where X is the major version, Y is the minor version, and Z is the patch version.For example, if you add the "Patch" label to your PR, and it's approved and merged, a workflow will automatically run to create a release for the action. Here's an illustration of how the version number would change before and after the PR: -* Version before PR: v1.0.1 -* Version after PR: v1.0.2 diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 00000000..57f73483 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,158416 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 4914: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.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__(857)); +const utils_1 = __nccwpck_require__(302); +/** + * 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 (0, utils_1.toCommandValue)(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A'); +} +function escapeProperty(s) { + return (0, 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 + +/***/ }), + +/***/ 7484: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.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.platform = exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = exports.markdownSummary = exports.summary = exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = 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__(4914); +const file_command_1 = __nccwpck_require__(4753); +const utils_1 = __nccwpck_require__(302); +const os = __importStar(__nccwpck_require__(857)); +const path = __importStar(__nccwpck_require__(6928)); +const oidc_utils_1 = __nccwpck_require__(5306); +/** + * 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 = 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 = (0, utils_1.toCommandValue)(val); + process.env[name] = convertedVal; + const filePath = process.env['GITHUB_ENV'] || ''; + if (filePath) { + return (0, file_command_1.issueFileCommand)('ENV', (0, file_command_1.prepareKeyValueMessage)(name, val)); + } + (0, 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) { + (0, 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) { + (0, file_command_1.issueFileCommand)('PATH', inputPath); + } + else { + (0, 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 !== ''); + if (options && options.trimWhitespace === false) { + return inputs; + } + return inputs.map(input => input.trim()); +} +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) { + const filePath = process.env['GITHUB_OUTPUT'] || ''; + if (filePath) { + return (0, file_command_1.issueFileCommand)('OUTPUT', (0, file_command_1.prepareKeyValueMessage)(name, value)); + } + process.stdout.write(os.EOL); + (0, command_1.issueCommand)('set-output', { name }, (0, utils_1.toCommandValue)(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) { + (0, 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) { + (0, 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() + * @param properties optional properties to add to the annotation. + */ +function error(message, properties = {}) { + (0, command_1.issueCommand)('error', (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message); +} +exports.error = error; +/** + * Adds a warning issue + * @param message warning issue message. Errors will be converted to string via toString() + * @param properties optional properties to add to the annotation. + */ +function warning(message, properties = {}) { + (0, command_1.issueCommand)('warning', (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message); +} +exports.warning = warning; +/** + * Adds a notice issue + * @param message notice issue message. Errors will be converted to string via toString() + * @param properties optional properties to add to the annotation. + */ +function notice(message, properties = {}) { + (0, command_1.issueCommand)('notice', (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message); +} +exports.notice = notice; +/** + * 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) { + (0, command_1.issue)('group', name); +} +exports.startGroup = startGroup; +/** + * End an output group. + */ +function endGroup() { + (0, 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) { + const filePath = process.env['GITHUB_STATE'] || ''; + if (filePath) { + return (0, file_command_1.issueFileCommand)('STATE', (0, file_command_1.prepareKeyValueMessage)(name, value)); + } + (0, command_1.issueCommand)('save-state', { name }, (0, utils_1.toCommandValue)(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; +function getIDToken(aud) { + return __awaiter(this, void 0, void 0, function* () { + return yield oidc_utils_1.OidcClient.getIDToken(aud); + }); +} +exports.getIDToken = getIDToken; +/** + * Summary exports + */ +var summary_1 = __nccwpck_require__(1847); +Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); +/** + * @deprecated use core.summary + */ +var summary_2 = __nccwpck_require__(1847); +Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); +/** + * Path exports + */ +var path_utils_1 = __nccwpck_require__(1976); +Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); +Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); +Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); +/** + * Platform utilities exports + */ +exports.platform = __importStar(__nccwpck_require__(8968)); +//# sourceMappingURL=core.js.map + +/***/ }), + +/***/ 4753: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +const crypto = __importStar(__nccwpck_require__(6982)); +const fs = __importStar(__nccwpck_require__(9896)); +const os = __importStar(__nccwpck_require__(857)); +const utils_1 = __nccwpck_require__(302); +function issueFileCommand(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, `${(0, utils_1.toCommandValue)(message)}${os.EOL}`, { + encoding: 'utf8' + }); +} +exports.issueFileCommand = issueFileCommand; +function prepareKeyValueMessage(key, value) { + const delimiter = `ghadelimiter_${crypto.randomUUID()}`; + const convertedValue = (0, utils_1.toCommandValue)(value); + // These should realistically never happen, but just in case someone finds a + // way to exploit uuid generation let's not allow keys or values that contain + // the delimiter. + if (key.includes(delimiter)) { + throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); + } + if (convertedValue.includes(delimiter)) { + throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); + } + return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`; +} +exports.prepareKeyValueMessage = prepareKeyValueMessage; +//# sourceMappingURL=file-command.js.map + +/***/ }), + +/***/ 5306: +/***/ (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.OidcClient = void 0; +const http_client_1 = __nccwpck_require__(4844); +const auth_1 = __nccwpck_require__(4552); +const core_1 = __nccwpck_require__(7484); +class OidcClient { + static createHttpClient(allowRetry = true, maxRetry = 10) { + const requestOptions = { + allowRetries: allowRetry, + maxRetries: maxRetry + }; + return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions); + } + static getRequestToken() { + const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN']; + if (!token) { + throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable'); + } + return token; + } + static getIDTokenUrl() { + const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL']; + if (!runtimeUrl) { + throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable'); + } + return runtimeUrl; + } + static getCall(id_token_url) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const httpclient = OidcClient.createHttpClient(); + const res = yield httpclient + .getJson(id_token_url) + .catch(error => { + throw new Error(`Failed to get ID Token. \n + Error Code : ${error.statusCode}\n + Error Message: ${error.message}`); + }); + const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value; + if (!id_token) { + throw new Error('Response json body do not have ID Token field'); + } + return id_token; + }); + } + static getIDToken(audience) { + return __awaiter(this, void 0, void 0, function* () { + try { + // New ID Token is requested from action service + let id_token_url = OidcClient.getIDTokenUrl(); + if (audience) { + const encodedAudience = encodeURIComponent(audience); + id_token_url = `${id_token_url}&audience=${encodedAudience}`; + } + (0, core_1.debug)(`ID token url is ${id_token_url}`); + const id_token = yield OidcClient.getCall(id_token_url); + (0, core_1.setSecret)(id_token); + return id_token; + } + catch (error) { + throw new Error(`Error message: ${error.message}`); + } + }); + } +} +exports.OidcClient = OidcClient; +//# sourceMappingURL=oidc-utils.js.map + +/***/ }), + +/***/ 1976: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0; +const path = __importStar(__nccwpck_require__(6928)); +/** + * toPosixPath converts the given path to the posix form. On Windows, \\ will be + * replaced with /. + * + * @param pth. Path to transform. + * @return string Posix path. + */ +function toPosixPath(pth) { + return pth.replace(/[\\]/g, '/'); +} +exports.toPosixPath = toPosixPath; +/** + * toWin32Path converts the given path to the win32 form. On Linux, / will be + * replaced with \\. + * + * @param pth. Path to transform. + * @return string Win32 path. + */ +function toWin32Path(pth) { + return pth.replace(/[/]/g, '\\'); +} +exports.toWin32Path = toWin32Path; +/** + * toPlatformPath converts the given path to a platform-specific path. It does + * this by replacing instances of / and \ with the platform-specific path + * separator. + * + * @param pth The path to platformize. + * @return string The platform-specific path. + */ +function toPlatformPath(pth) { + return pth.replace(/[/\\]/g, path.sep); +} +exports.toPlatformPath = toPlatformPath; +//# sourceMappingURL=path-utils.js.map + +/***/ }), + +/***/ 8968: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.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.getDetails = exports.isLinux = exports.isMacOS = exports.isWindows = exports.arch = exports.platform = void 0; +const os_1 = __importDefault(__nccwpck_require__(857)); +const exec = __importStar(__nccwpck_require__(5236)); +const getWindowsInfo = () => __awaiter(void 0, void 0, void 0, function* () { + const { stdout: version } = yield exec.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"', undefined, { + silent: true + }); + const { stdout: name } = yield exec.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', undefined, { + silent: true + }); + return { + name: name.trim(), + version: version.trim() + }; +}); +const getMacOsInfo = () => __awaiter(void 0, void 0, void 0, function* () { + var _a, _b, _c, _d; + const { stdout } = yield exec.getExecOutput('sw_vers', undefined, { + silent: true + }); + const version = (_b = (_a = stdout.match(/ProductVersion:\s*(.+)/)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : ''; + const name = (_d = (_c = stdout.match(/ProductName:\s*(.+)/)) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : ''; + return { + name, + version + }; +}); +const getLinuxInfo = () => __awaiter(void 0, void 0, void 0, function* () { + const { stdout } = yield exec.getExecOutput('lsb_release', ['-i', '-r', '-s'], { + silent: true + }); + const [name, version] = stdout.trim().split('\n'); + return { + name, + version + }; +}); +exports.platform = os_1.default.platform(); +exports.arch = os_1.default.arch(); +exports.isWindows = exports.platform === 'win32'; +exports.isMacOS = exports.platform === 'darwin'; +exports.isLinux = exports.platform === 'linux'; +function getDetails() { + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield (exports.isWindows + ? getWindowsInfo() + : exports.isMacOS + ? getMacOsInfo() + : getLinuxInfo()))), { platform: exports.platform, + arch: exports.arch, + isWindows: exports.isWindows, + isMacOS: exports.isMacOS, + isLinux: exports.isLinux }); + }); +} +exports.getDetails = getDetails; +//# sourceMappingURL=platform.js.map + +/***/ }), + +/***/ 1847: +/***/ (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.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; +const os_1 = __nccwpck_require__(857); +const fs_1 = __nccwpck_require__(9896); +const { access, appendFile, writeFile } = fs_1.promises; +exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; +exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary'; +class Summary { + constructor() { + this._buffer = ''; + } + /** + * Finds the summary file path from the environment, rejects if env var is not found or file does not exist + * Also checks r/w permissions. + * + * @returns step summary file path + */ + filePath() { + return __awaiter(this, void 0, void 0, function* () { + if (this._filePath) { + return this._filePath; + } + const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR]; + if (!pathFromEnv) { + throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); + } + try { + yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK); + } + catch (_a) { + throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); + } + this._filePath = pathFromEnv; + return this._filePath; + }); + } + /** + * Wraps content in an HTML tag, adding any HTML attributes + * + * @param {string} tag HTML tag to wrap + * @param {string | null} content content within the tag + * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add + * + * @returns {string} content wrapped in HTML element + */ + wrap(tag, content, attrs = {}) { + const htmlAttrs = Object.entries(attrs) + .map(([key, value]) => ` ${key}="${value}"`) + .join(''); + if (!content) { + return `<${tag}${htmlAttrs}>`; + } + return `<${tag}${htmlAttrs}>${content}`; + } + /** + * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. + * + * @param {SummaryWriteOptions} [options] (optional) options for write operation + * + * @returns {Promise} summary instance + */ + write(options) { + return __awaiter(this, void 0, void 0, function* () { + const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); + const filePath = yield this.filePath(); + const writeFunc = overwrite ? writeFile : appendFile; + yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }); + return this.emptyBuffer(); + }); + } + /** + * Clears the summary buffer and wipes the summary file + * + * @returns {Summary} summary instance + */ + clear() { + return __awaiter(this, void 0, void 0, function* () { + return this.emptyBuffer().write({ overwrite: true }); + }); + } + /** + * Returns the current summary buffer as a string + * + * @returns {string} string of summary buffer + */ + stringify() { + return this._buffer; + } + /** + * If the summary buffer is empty + * + * @returns {boolen} true if the buffer is empty + */ + isEmptyBuffer() { + return this._buffer.length === 0; + } + /** + * Resets the summary buffer without writing to summary file + * + * @returns {Summary} summary instance + */ + emptyBuffer() { + this._buffer = ''; + return this; + } + /** + * Adds raw text to the summary buffer + * + * @param {string} text content to add + * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) + * + * @returns {Summary} summary instance + */ + addRaw(text, addEOL = false) { + this._buffer += text; + return addEOL ? this.addEOL() : this; + } + /** + * Adds the operating system-specific end-of-line marker to the buffer + * + * @returns {Summary} summary instance + */ + addEOL() { + return this.addRaw(os_1.EOL); + } + /** + * Adds an HTML codeblock to the summary buffer + * + * @param {string} code content to render within fenced code block + * @param {string} lang (optional) language to syntax highlight code + * + * @returns {Summary} summary instance + */ + addCodeBlock(code, lang) { + const attrs = Object.assign({}, (lang && { lang })); + const element = this.wrap('pre', this.wrap('code', code), attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML list to the summary buffer + * + * @param {string[]} items list of items to render + * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) + * + * @returns {Summary} summary instance + */ + addList(items, ordered = false) { + const tag = ordered ? 'ol' : 'ul'; + const listItems = items.map(item => this.wrap('li', item)).join(''); + const element = this.wrap(tag, listItems); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML table to the summary buffer + * + * @param {SummaryTableCell[]} rows table rows + * + * @returns {Summary} summary instance + */ + addTable(rows) { + const tableBody = rows + .map(row => { + const cells = row + .map(cell => { + if (typeof cell === 'string') { + return this.wrap('td', cell); + } + const { header, data, colspan, rowspan } = cell; + const tag = header ? 'th' : 'td'; + const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan })); + return this.wrap(tag, data, attrs); + }) + .join(''); + return this.wrap('tr', cells); + }) + .join(''); + const element = this.wrap('table', tableBody); + return this.addRaw(element).addEOL(); + } + /** + * Adds a collapsable HTML details element to the summary buffer + * + * @param {string} label text for the closed state + * @param {string} content collapsable content + * + * @returns {Summary} summary instance + */ + addDetails(label, content) { + const element = this.wrap('details', this.wrap('summary', label) + content); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML image tag to the summary buffer + * + * @param {string} src path to the image you to embed + * @param {string} alt text description of the image + * @param {SummaryImageOptions} options (optional) addition image attributes + * + * @returns {Summary} summary instance + */ + addImage(src, alt, options) { + const { width, height } = options || {}; + const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height })); + const element = this.wrap('img', null, Object.assign({ src, alt }, attrs)); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML section heading element + * + * @param {string} text heading text + * @param {number | string} [level=1] (optional) the heading level, default: 1 + * + * @returns {Summary} summary instance + */ + addHeading(text, level) { + const tag = `h${level}`; + const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) + ? tag + : 'h1'; + const element = this.wrap(allowedTag, text); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML thematic break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addSeparator() { + const element = this.wrap('hr', null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML line break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addBreak() { + const element = this.wrap('br', null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML blockquote to the summary buffer + * + * @param {string} text quote text + * @param {string} cite (optional) citation url + * + * @returns {Summary} summary instance + */ + addQuote(text, cite) { + const attrs = Object.assign({}, (cite && { cite })); + const element = this.wrap('blockquote', text, attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML anchor tag to the summary buffer + * + * @param {string} text link text/content + * @param {string} href hyperlink + * + * @returns {Summary} summary instance + */ + addLink(text, href) { + const element = this.wrap('a', text, { href }); + return this.addRaw(element).addEOL(); + } +} +const _summary = new Summary(); +/** + * @deprecated use `core.summary` + */ +exports.markdownSummary = _summary; +exports.summary = _summary; +//# sourceMappingURL=summary.js.map + +/***/ }), + +/***/ 302: +/***/ ((__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.toCommandProperties = 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; +/** + * + * @param annotationProperties + * @returns The command properties to send with the actual annotation command + * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 + */ +function toCommandProperties(annotationProperties) { + if (!Object.keys(annotationProperties).length) { + return {}; + } + return { + title: annotationProperties.title, + file: annotationProperties.file, + line: annotationProperties.startLine, + endLine: annotationProperties.endLine, + col: annotationProperties.startColumn, + endColumn: annotationProperties.endColumn + }; +} +exports.toCommandProperties = toCommandProperties; +//# sourceMappingURL=utils.js.map + +/***/ }), + +/***/ 5236: +/***/ (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__(3193); +const tr = __importStar(__nccwpck_require__(6665)); +/** + * 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 + +/***/ }), + +/***/ 6665: +/***/ (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__(857)); +const events = __importStar(__nccwpck_require__(4434)); +const child = __importStar(__nccwpck_require__(5317)); +const path = __importStar(__nccwpck_require__(6928)); +const io = __importStar(__nccwpck_require__(4994)); +const ioUtil = __importStar(__nccwpck_require__(5207)); +const timers_1 = __nccwpck_require__(3557); +/* 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 + +/***/ }), + +/***/ 4552: +/***/ (function(__unused_webpack_module, exports) { + +"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.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; +class BasicCredentialHandler { + constructor(username, password) { + this.username = username; + this.password = password; + } + prepareRequest(options) { + if (!options.headers) { + throw Error('The request has no headers'); + } + options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; + } + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); + } +} +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) { + if (!options.headers) { + throw Error('The request has no headers'); + } + options.headers['Authorization'] = `Bearer ${this.token}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; + } + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); + } +} +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) { + if (!options.headers) { + throw Error('The request has no headers'); + } + options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; + } + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); + } +} +exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; +//# sourceMappingURL=auth.js.map + +/***/ }), + +/***/ 4844: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +/* eslint-disable @typescript-eslint/no-explicit-any */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.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.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; +const http = __importStar(__nccwpck_require__(8611)); +const https = __importStar(__nccwpck_require__(5692)); +const pm = __importStar(__nccwpck_require__(4988)); +const tunnel = __importStar(__nccwpck_require__(770)); +const undici_1 = __nccwpck_require__(6752); +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 = HttpCodes = {})); +var Headers; +(function (Headers) { + Headers["Accept"] = "accept"; + Headers["ContentType"] = "content-type"; +})(Headers || (exports.Headers = Headers = {})); +var MediaTypes; +(function (MediaTypes) { + MediaTypes["ApplicationJson"] = "application/json"; +})(MediaTypes || (exports.MediaTypes = 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) { + const 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 __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + })); + }); + } + readBodyBuffer() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { + const chunks = []; + this.message.on('data', (chunk) => { + chunks.push(chunk); + }); + this.message.on('end', () => { + resolve(Buffer.concat(chunks)); + }); + })); + }); + } +} +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + const 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 __awaiter(this, void 0, void 0, function* () { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); + }); + } + get(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('GET', requestUrl, null, additionalHeaders || {}); + }); + } + del(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); + }); + } + post(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('POST', requestUrl, data, additionalHeaders || {}); + }); + } + patch(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + }); + } + put(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); + }); + } + head(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + }); + } + sendStream(verb, requestUrl, stream, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + 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 + */ + getJson(requestUrl, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + const res = yield this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + postJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const 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); + const res = yield this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + putJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const 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); + const res = yield this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + patchJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const 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); + const res = yield 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 + */ + request(verb, requestUrl, data, headers) { + return __awaiter(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error('Client has already been disposed.'); + } + const parsedUrl = new URL(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + do { + response = yield this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (const handler of this.handlers) { + if (handler.canHandleAuthentication(response)) { + authenticationHandler = handler; + 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 (response.message.statusCode && + HttpRedirectCodes.includes(response.message.statusCode) && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + const 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. + yield response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (const 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 = yield this.requestRaw(info, data); + redirectsRemaining--; + } + if (!response.message.statusCode || + !HttpResponseRetryCodes.includes(response.message.statusCode)) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); + } + } while (numTries < maxTries); + 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 __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + function callbackForResult(err, res) { + if (err) { + reject(err); + } + else if (!res) { + // If `err` is not passed, then `res` must be passed. + reject(new Error('Unknown error')); + } + else { + resolve(res); + } + } + this.requestRawWithCallback(info, data, callbackForResult); + }); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + if (typeof data === 'string') { + if (!info.options.headers) { + info.options.headers = {}; + } + info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + function handleResult(err, res) { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + } + const req = info.httpModule.request(info.options, (msg) => { + const res = new HttpClientResponse(msg); + handleResult(undefined, res); + }); + let socket; + 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}`)); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err); + }); + 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) { + const parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); + } + getAgentDispatcher(serverUrl) { + const parsedUrl = new URL(serverUrl); + const proxyUrl = pm.getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (!useProxy) { + return; + } + return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); + } + _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) { + for (const handler of this.handlers) { + handler.prepareRequest(info.options); + } + } + return info; + } + _mergeHeaders(headers) { + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); + } + return lowercaseKeys(headers || {}); + } + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; + } + return additionalHeaders[header] || clientHeader || _default; + } + _getAgent(parsedUrl) { + let agent; + const proxyUrl = pm.getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (!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; + } + // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis. + if (proxyUrl && proxyUrl.hostname) { + const agentOptions = { + maxSockets, + keepAlive: this._keepAlive, + proxy: Object.assign(Object.assign({}, ((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 tunneling agent isn't assigned create a new agent + if (!agent) { + const options = { keepAlive: this._keepAlive, maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + 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; + } + _getProxyAgentDispatcher(parsedUrl, proxyUrl) { + let proxyAgent; + if (this._keepAlive) { + proxyAgent = this._proxyAgentDispatcher; + } + // if agent is already assigned use that agent. + if (proxyAgent) { + return proxyAgent; + } + const usingSsl = parsedUrl.protocol === 'https:'; + proxyAgent = new undici_1.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, ((proxyUrl.username || proxyUrl.password) && { + token: `${proxyUrl.username}:${proxyUrl.password}` + }))); + this._proxyAgentDispatcher = proxyAgent; + 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 + proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, { + rejectUnauthorized: false + }); + } + return proxyAgent; + } + _performExponentialBackoff(retryNumber) { + return __awaiter(this, void 0, void 0, function* () { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + }); + } + _processResponse(res, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode || 0; + const response = { + statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode === HttpCodes.NotFound) { + resolve(response); + } + // get the result from the body + function dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + const a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + let obj; + let contents; + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, 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})`; + } + const err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } + else { + resolve(response); + } + })); + }); + } +} +exports.HttpClient = HttpClient; +const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 4988: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.checkBypass = exports.getProxyUrl = void 0; +function getProxyUrl(reqUrl) { + const usingSsl = reqUrl.protocol === 'https:'; + if (checkBypass(reqUrl)) { + return undefined; + } + const proxyVar = (() => { + if (usingSsl) { + return process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + return process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + })(); + if (proxyVar) { + try { + return new URL(proxyVar); + } + catch (_a) { + if (!proxyVar.startsWith('http://') && !proxyVar.startsWith('https://')) + return new URL(`http://${proxyVar}`); + } + } + else { + return undefined; + } +} +exports.getProxyUrl = getProxyUrl; +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + const reqHost = reqUrl.hostname; + if (isLoopbackAddress(reqHost)) { + return true; + } + const 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 + const upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === 'number') { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + // Compare request host against noproxy + for (const upperNoProxyItem of noProxy + .split(',') + .map(x => x.trim().toUpperCase()) + .filter(x => x)) { + if (upperNoProxyItem === '*' || + upperReqHosts.some(x => x === upperNoProxyItem || + x.endsWith(`.${upperNoProxyItem}`) || + (upperNoProxyItem.startsWith('.') && + x.endsWith(`${upperNoProxyItem}`)))) { + return true; + } + } + return false; +} +exports.checkBypass = checkBypass; +function isLoopbackAddress(host) { + const hostLower = host.toLowerCase(); + return (hostLower === 'localhost' || + hostLower.startsWith('127.') || + hostLower.startsWith('[::1]') || + hostLower.startsWith('[0:0:0:0:0:0:0:1]')); +} +//# sourceMappingURL=proxy.js.map + +/***/ }), + +/***/ 5207: +/***/ (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.READONLY = exports.UV_FS_O_EXLOCK = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rm = exports.rename = exports.readlink = exports.readdir = exports.open = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0; +const fs = __importStar(__nccwpck_require__(9896)); +const path = __importStar(__nccwpck_require__(6928)); +_a = fs.promises +// export const {open} = 'fs' +, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.open = _a.open, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rm = _a.rm, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink; +// export const {open} = 'fs' +exports.IS_WINDOWS = process.platform === 'win32'; +// See https://github.com/nodejs/node/blob/d0153aee367422d0858105abec186da4dff0a0c5/deps/uv/include/uv/win.h#L691 +exports.UV_FS_O_EXLOCK = 0x10000000; +exports.READONLY = fs.constants.O_RDONLY; +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 + +/***/ }), + +/***/ 4994: +/***/ (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__(2613); +const path = __importStar(__nccwpck_require__(6928)); +const ioUtil = __importStar(__nccwpck_require__(5207)); +/** + * 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) { + // 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 { + // note if path does not exist, error is silent + yield ioUtil.rm(inputPath, { + force: true, + maxRetries: 3, + recursive: true, + retryDelay: 300 + }); + } + catch (err) { + throw new Error(`File was unable to be removed ${err}`); + } + }); +} +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 + +/***/ }), + +/***/ 1043: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var coreClient = __nccwpck_require__(160); +var coreRestPipeline = __nccwpck_require__(778); +var tslib = __nccwpck_require__(1860); + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n["default"] = e; + return Object.freeze(n); +} + +var coreClient__namespace = /*#__PURE__*/_interopNamespace(coreClient); +var coreRestPipeline__namespace = /*#__PURE__*/_interopNamespace(coreRestPipeline); + +/* + * 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. + */ +const pageMap = new WeakMap(); +/** + * Given the last `.value` produced by the `byPage` iterator, + * returns a continuation token that can be used to begin paging from + * that point later. + * @param page An object from accessing `value` on the IteratorResult from a `byPage` iterator. + * @returns The continuation token that can be passed into byPage() during future calls. + */ +function getContinuationToken(page) { + var _a; + if (typeof page !== "object" || page === null) { + return undefined; + } + return (_a = pageMap.get(page)) === null || _a === void 0 ? void 0 : _a.continuationToken; +} +function setContinuationToken(page, continuationToken) { + var _a; + if (typeof page !== "object" || page === null || !continuationToken) { + return; + } + const pageInfo = (_a = pageMap.get(page)) !== null && _a !== void 0 ? _a : {}; + pageInfo.continuationToken = continuationToken; + pageMap.set(page, pageInfo); +} + +/* + * 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. + */ +/** Known values of {@link PrincipalType} that the service accepts. */ +exports.KnownPrincipalType = void 0; +(function (KnownPrincipalType) { + /** User */ + KnownPrincipalType["User"] = "User"; + /** Group */ + KnownPrincipalType["Group"] = "Group"; + /** ServicePrincipal */ + KnownPrincipalType["ServicePrincipal"] = "ServicePrincipal"; + /** ForeignGroup */ + KnownPrincipalType["ForeignGroup"] = "ForeignGroup"; + /** Device */ + KnownPrincipalType["Device"] = "Device"; +})(exports.KnownPrincipalType || (exports.KnownPrincipalType = {})); +/** Known values of {@link AssignmentType} that the service accepts. */ +exports.KnownAssignmentType = void 0; +(function (KnownAssignmentType) { + /** Activated */ + KnownAssignmentType["Activated"] = "Activated"; + /** Assigned */ + KnownAssignmentType["Assigned"] = "Assigned"; +})(exports.KnownAssignmentType || (exports.KnownAssignmentType = {})); +/** Known values of {@link MemberType} that the service accepts. */ +exports.KnownMemberType = void 0; +(function (KnownMemberType) { + /** Inherited */ + KnownMemberType["Inherited"] = "Inherited"; + /** Direct */ + KnownMemberType["Direct"] = "Direct"; + /** Group */ + KnownMemberType["Group"] = "Group"; +})(exports.KnownMemberType || (exports.KnownMemberType = {})); +/** Known values of {@link Status} that the service accepts. */ +exports.KnownStatus = void 0; +(function (KnownStatus) { + /** Accepted */ + KnownStatus["Accepted"] = "Accepted"; + /** PendingEvaluation */ + KnownStatus["PendingEvaluation"] = "PendingEvaluation"; + /** Granted */ + KnownStatus["Granted"] = "Granted"; + /** Denied */ + KnownStatus["Denied"] = "Denied"; + /** PendingProvisioning */ + KnownStatus["PendingProvisioning"] = "PendingProvisioning"; + /** Provisioned */ + KnownStatus["Provisioned"] = "Provisioned"; + /** PendingRevocation */ + KnownStatus["PendingRevocation"] = "PendingRevocation"; + /** Revoked */ + KnownStatus["Revoked"] = "Revoked"; + /** Canceled */ + KnownStatus["Canceled"] = "Canceled"; + /** Failed */ + KnownStatus["Failed"] = "Failed"; + /** PendingApprovalProvisioning */ + KnownStatus["PendingApprovalProvisioning"] = "PendingApprovalProvisioning"; + /** PendingApproval */ + KnownStatus["PendingApproval"] = "PendingApproval"; + /** FailedAsResourceIsLocked */ + KnownStatus["FailedAsResourceIsLocked"] = "FailedAsResourceIsLocked"; + /** PendingAdminDecision */ + KnownStatus["PendingAdminDecision"] = "PendingAdminDecision"; + /** AdminApproved */ + KnownStatus["AdminApproved"] = "AdminApproved"; + /** AdminDenied */ + KnownStatus["AdminDenied"] = "AdminDenied"; + /** TimedOut */ + KnownStatus["TimedOut"] = "TimedOut"; + /** ProvisioningStarted */ + KnownStatus["ProvisioningStarted"] = "ProvisioningStarted"; + /** Invalid */ + KnownStatus["Invalid"] = "Invalid"; + /** PendingScheduleCreation */ + KnownStatus["PendingScheduleCreation"] = "PendingScheduleCreation"; + /** ScheduleCreated */ + KnownStatus["ScheduleCreated"] = "ScheduleCreated"; + /** PendingExternalProvisioning */ + KnownStatus["PendingExternalProvisioning"] = "PendingExternalProvisioning"; +})(exports.KnownStatus || (exports.KnownStatus = {})); +/** Known values of {@link RequestType} that the service accepts. */ +exports.KnownRequestType = void 0; +(function (KnownRequestType) { + /** AdminAssign */ + KnownRequestType["AdminAssign"] = "AdminAssign"; + /** AdminRemove */ + KnownRequestType["AdminRemove"] = "AdminRemove"; + /** AdminUpdate */ + KnownRequestType["AdminUpdate"] = "AdminUpdate"; + /** AdminExtend */ + KnownRequestType["AdminExtend"] = "AdminExtend"; + /** AdminRenew */ + KnownRequestType["AdminRenew"] = "AdminRenew"; + /** SelfActivate */ + KnownRequestType["SelfActivate"] = "SelfActivate"; + /** SelfDeactivate */ + KnownRequestType["SelfDeactivate"] = "SelfDeactivate"; + /** SelfExtend */ + KnownRequestType["SelfExtend"] = "SelfExtend"; + /** SelfRenew */ + KnownRequestType["SelfRenew"] = "SelfRenew"; +})(exports.KnownRequestType || (exports.KnownRequestType = {})); +/** Known values of {@link Type} that the service accepts. */ +exports.KnownType = void 0; +(function (KnownType) { + /** AfterDuration */ + KnownType["AfterDuration"] = "AfterDuration"; + /** AfterDateTime */ + KnownType["AfterDateTime"] = "AfterDateTime"; + /** NoExpiration */ + KnownType["NoExpiration"] = "NoExpiration"; +})(exports.KnownType || (exports.KnownType = {})); +/** Known values of {@link RoleManagementPolicyRuleType} that the service accepts. */ +exports.KnownRoleManagementPolicyRuleType = void 0; +(function (KnownRoleManagementPolicyRuleType) { + /** RoleManagementPolicyApprovalRule */ + KnownRoleManagementPolicyRuleType["RoleManagementPolicyApprovalRule"] = "RoleManagementPolicyApprovalRule"; + /** RoleManagementPolicyAuthenticationContextRule */ + KnownRoleManagementPolicyRuleType["RoleManagementPolicyAuthenticationContextRule"] = "RoleManagementPolicyAuthenticationContextRule"; + /** RoleManagementPolicyEnablementRule */ + KnownRoleManagementPolicyRuleType["RoleManagementPolicyEnablementRule"] = "RoleManagementPolicyEnablementRule"; + /** RoleManagementPolicyExpirationRule */ + KnownRoleManagementPolicyRuleType["RoleManagementPolicyExpirationRule"] = "RoleManagementPolicyExpirationRule"; + /** RoleManagementPolicyNotificationRule */ + KnownRoleManagementPolicyRuleType["RoleManagementPolicyNotificationRule"] = "RoleManagementPolicyNotificationRule"; +})(exports.KnownRoleManagementPolicyRuleType || (exports.KnownRoleManagementPolicyRuleType = {})); +/** Known values of {@link ApprovalMode} that the service accepts. */ +exports.KnownApprovalMode = void 0; +(function (KnownApprovalMode) { + /** SingleStage */ + KnownApprovalMode["SingleStage"] = "SingleStage"; + /** Serial */ + KnownApprovalMode["Serial"] = "Serial"; + /** Parallel */ + KnownApprovalMode["Parallel"] = "Parallel"; + /** NoApproval */ + KnownApprovalMode["NoApproval"] = "NoApproval"; +})(exports.KnownApprovalMode || (exports.KnownApprovalMode = {})); +/** Known values of {@link UserType} that the service accepts. */ +exports.KnownUserType = void 0; +(function (KnownUserType) { + /** User */ + KnownUserType["User"] = "User"; + /** Group */ + KnownUserType["Group"] = "Group"; +})(exports.KnownUserType || (exports.KnownUserType = {})); +/** Known values of {@link EnablementRules} that the service accepts. */ +exports.KnownEnablementRules = void 0; +(function (KnownEnablementRules) { + /** MultiFactorAuthentication */ + KnownEnablementRules["MultiFactorAuthentication"] = "MultiFactorAuthentication"; + /** Justification */ + KnownEnablementRules["Justification"] = "Justification"; + /** Ticketing */ + KnownEnablementRules["Ticketing"] = "Ticketing"; +})(exports.KnownEnablementRules || (exports.KnownEnablementRules = {})); +/** Known values of {@link NotificationDeliveryMechanism} that the service accepts. */ +exports.KnownNotificationDeliveryMechanism = void 0; +(function (KnownNotificationDeliveryMechanism) { + /** Email */ + KnownNotificationDeliveryMechanism["Email"] = "Email"; +})(exports.KnownNotificationDeliveryMechanism || (exports.KnownNotificationDeliveryMechanism = {})); +/** Known values of {@link NotificationLevel} that the service accepts. */ +exports.KnownNotificationLevel = void 0; +(function (KnownNotificationLevel) { + /** None */ + KnownNotificationLevel["None"] = "None"; + /** Critical */ + KnownNotificationLevel["Critical"] = "Critical"; + /** All */ + KnownNotificationLevel["All"] = "All"; +})(exports.KnownNotificationLevel || (exports.KnownNotificationLevel = {})); +/** Known values of {@link RecipientType} that the service accepts. */ +exports.KnownRecipientType = void 0; +(function (KnownRecipientType) { + /** Requestor */ + KnownRecipientType["Requestor"] = "Requestor"; + /** Approver */ + KnownRecipientType["Approver"] = "Approver"; + /** Admin */ + KnownRecipientType["Admin"] = "Admin"; +})(exports.KnownRecipientType || (exports.KnownRecipientType = {})); + +/* + * 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. + */ +const ClassicAdministratorListResult = { + type: { + name: "Composite", + className: "ClassicAdministratorListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ClassicAdministrator" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const ClassicAdministrator = { + type: { + name: "Composite", + className: "ClassicAdministrator", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + name: { + serializedName: "name", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + }, + emailAddress: { + serializedName: "properties.emailAddress", + type: { + name: "String" + } + }, + role: { + serializedName: "properties.role", + type: { + name: "String" + } + } + } + } +}; +const ErrorResponse = { + type: { + name: "Composite", + className: "ErrorResponse", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ErrorDetail" + } + } + } + } +}; +const ErrorDetail = { + type: { + name: "Composite", + className: "ErrorDetail", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String" + } + }, + target: { + serializedName: "target", + readOnly: true, + type: { + name: "String" + } + }, + details: { + serializedName: "details", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorDetail" + } + } + } + }, + additionalInfo: { + serializedName: "additionalInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorAdditionalInfo" + } + } + } + } + } + } +}; +const ErrorAdditionalInfo = { + type: { + name: "Composite", + className: "ErrorAdditionalInfo", + modelProperties: { + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + info: { + serializedName: "info", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + } + } + } +}; +const DenyAssignmentListResult = { + type: { + name: "Composite", + className: "DenyAssignmentListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DenyAssignment" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const DenyAssignment = { + type: { + name: "Composite", + className: "DenyAssignment", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + denyAssignmentName: { + serializedName: "properties.denyAssignmentName", + type: { + name: "String" + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + permissions: { + serializedName: "properties.permissions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DenyAssignmentPermission" + } + } + } + }, + scope: { + serializedName: "properties.scope", + type: { + name: "String" + } + }, + doNotApplyToChildScopes: { + serializedName: "properties.doNotApplyToChildScopes", + type: { + name: "Boolean" + } + }, + principals: { + serializedName: "properties.principals", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Principal" + } + } + } + }, + excludePrincipals: { + serializedName: "properties.excludePrincipals", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Principal" + } + } + } + }, + isSystemProtected: { + serializedName: "properties.isSystemProtected", + type: { + name: "Boolean" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + updatedOn: { + serializedName: "properties.updatedOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + createdBy: { + serializedName: "properties.createdBy", + readOnly: true, + type: { + name: "String" + } + }, + updatedBy: { + serializedName: "properties.updatedBy", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const DenyAssignmentPermission = { + type: { + name: "Composite", + className: "DenyAssignmentPermission", + modelProperties: { + actions: { + serializedName: "actions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + notActions: { + serializedName: "notActions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + dataActions: { + serializedName: "dataActions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + notDataActions: { + serializedName: "notDataActions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + condition: { + serializedName: "condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "conditionVersion", + type: { + name: "String" + } + } + } + } +}; +const Principal = { + type: { + name: "Composite", + className: "Principal", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + }, + email: { + serializedName: "email", + type: { + name: "String" + } + } + } + } +}; +const ProviderOperationsMetadata = { + type: { + name: "Composite", + className: "ProviderOperationsMetadata", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + name: { + serializedName: "name", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + resourceTypes: { + serializedName: "resourceTypes", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceType" + } + } + } + }, + operations: { + serializedName: "operations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ProviderOperation" + } + } + } + } + } + } +}; +const ResourceType = { + type: { + name: "Composite", + className: "ResourceType", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + operations: { + serializedName: "operations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ProviderOperation" + } + } + } + } + } + } +}; +const ProviderOperation = { + type: { + name: "Composite", + className: "ProviderOperation", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + }, + origin: { + serializedName: "origin", + type: { + name: "String" + } + }, + properties: { + serializedName: "properties", + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + }, + isDataAction: { + serializedName: "isDataAction", + type: { + name: "Boolean" + } + } + } + } +}; +const ProviderOperationsMetadataListResult = { + type: { + name: "Composite", + className: "ProviderOperationsMetadataListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ProviderOperationsMetadata" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentListResult = { + type: { + name: "Composite", + className: "RoleAssignmentListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleAssignment" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const RoleAssignment = { + type: { + name: "Composite", + className: "RoleAssignment", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + readOnly: true, + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + type: { + name: "String" + } + }, + principalId: { + serializedName: "properties.principalId", + type: { + name: "String" + } + }, + principalType: { + serializedName: "properties.principalType", + type: { + name: "String" + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + updatedOn: { + serializedName: "properties.updatedOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + createdBy: { + serializedName: "properties.createdBy", + readOnly: true, + type: { + name: "String" + } + }, + updatedBy: { + serializedName: "properties.updatedBy", + readOnly: true, + type: { + name: "String" + } + }, + delegatedManagedIdentityResourceId: { + serializedName: "properties.delegatedManagedIdentityResourceId", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentCreateParameters = { + type: { + name: "Composite", + className: "RoleAssignmentCreateParameters", + modelProperties: { + scope: { + serializedName: "properties.scope", + readOnly: true, + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + required: true, + type: { + name: "String" + } + }, + principalId: { + serializedName: "properties.principalId", + required: true, + type: { + name: "String" + } + }, + principalType: { + serializedName: "properties.principalType", + type: { + name: "String" + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + updatedOn: { + serializedName: "properties.updatedOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + createdBy: { + serializedName: "properties.createdBy", + readOnly: true, + type: { + name: "String" + } + }, + updatedBy: { + serializedName: "properties.updatedBy", + readOnly: true, + type: { + name: "String" + } + }, + delegatedManagedIdentityResourceId: { + serializedName: "properties.delegatedManagedIdentityResourceId", + type: { + name: "String" + } + } + } + } +}; +const PermissionGetResult = { + type: { + name: "Composite", + className: "PermissionGetResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Permission" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const Permission = { + type: { + name: "Composite", + className: "Permission", + modelProperties: { + actions: { + serializedName: "actions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + notActions: { + serializedName: "notActions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + dataActions: { + serializedName: "dataActions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + notDataActions: { + serializedName: "notDataActions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const RoleDefinition = { + type: { + name: "Composite", + className: "RoleDefinition", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + roleName: { + serializedName: "properties.roleName", + type: { + name: "String" + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + roleType: { + serializedName: "properties.type", + type: { + name: "String" + } + }, + permissions: { + serializedName: "properties.permissions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Permission" + } + } + } + }, + assignableScopes: { + serializedName: "properties.assignableScopes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + createdOn: { + serializedName: "properties.createdOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + updatedOn: { + serializedName: "properties.updatedOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + createdBy: { + serializedName: "properties.createdBy", + readOnly: true, + type: { + name: "String" + } + }, + updatedBy: { + serializedName: "properties.updatedBy", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const RoleDefinitionListResult = { + type: { + name: "Composite", + className: "RoleDefinitionListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleDefinition" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const EligibleChildResourcesListResult = { + type: { + name: "Composite", + className: "EligibleChildResourcesListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "EligibleChildResource" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const EligibleChildResource = { + type: { + name: "Composite", + className: "EligibleChildResource", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const CloudError = { + type: { + name: "Composite", + className: "CloudError", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "CloudErrorBody" + } + } + } + } +}; +const CloudErrorBody = { + type: { + name: "Composite", + className: "CloudErrorBody", + modelProperties: { + code: { + serializedName: "code", + type: { + name: "String" + } + }, + message: { + serializedName: "message", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentSchedule = { + type: { + name: "Composite", + className: "RoleAssignmentSchedule", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + type: { + name: "String" + } + }, + principalId: { + serializedName: "properties.principalId", + type: { + name: "String" + } + }, + principalType: { + serializedName: "properties.principalType", + type: { + name: "String" + } + }, + roleAssignmentScheduleRequestId: { + serializedName: "properties.roleAssignmentScheduleRequestId", + type: { + name: "String" + } + }, + linkedRoleEligibilityScheduleId: { + serializedName: "properties.linkedRoleEligibilityScheduleId", + type: { + name: "String" + } + }, + assignmentType: { + serializedName: "properties.assignmentType", + type: { + name: "String" + } + }, + memberType: { + serializedName: "properties.memberType", + type: { + name: "String" + } + }, + status: { + serializedName: "properties.status", + type: { + name: "String" + } + }, + startDateTime: { + serializedName: "properties.startDateTime", + type: { + name: "DateTime" + } + }, + endDateTime: { + serializedName: "properties.endDateTime", + type: { + name: "DateTime" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + type: { + name: "DateTime" + } + }, + updatedOn: { + serializedName: "properties.updatedOn", + type: { + name: "DateTime" + } + }, + expandedProperties: { + serializedName: "properties.expandedProperties", + type: { + name: "Composite", + className: "ExpandedProperties" + } + } + } + } +}; +const ExpandedProperties = { + type: { + name: "Composite", + className: "ExpandedProperties", + modelProperties: { + scope: { + serializedName: "scope", + type: { + name: "Composite", + className: "ExpandedPropertiesScope" + } + }, + roleDefinition: { + serializedName: "roleDefinition", + type: { + name: "Composite", + className: "ExpandedPropertiesRoleDefinition" + } + }, + principal: { + serializedName: "principal", + type: { + name: "Composite", + className: "ExpandedPropertiesPrincipal" + } + } + } + } +}; +const ExpandedPropertiesScope = { + type: { + name: "Composite", + className: "ExpandedPropertiesScope", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + } + } + } +}; +const ExpandedPropertiesRoleDefinition = { + type: { + name: "Composite", + className: "ExpandedPropertiesRoleDefinition", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + } + } + } +}; +const ExpandedPropertiesPrincipal = { + type: { + name: "Composite", + className: "ExpandedPropertiesPrincipal", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + email: { + serializedName: "email", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentScheduleListResult = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleAssignmentSchedule" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentScheduleInstanceListResult = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleInstanceListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleAssignmentScheduleInstance" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentScheduleInstance = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleInstance", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + type: { + name: "String" + } + }, + principalId: { + serializedName: "properties.principalId", + type: { + name: "String" + } + }, + principalType: { + serializedName: "properties.principalType", + type: { + name: "String" + } + }, + roleAssignmentScheduleId: { + serializedName: "properties.roleAssignmentScheduleId", + type: { + name: "String" + } + }, + originRoleAssignmentId: { + serializedName: "properties.originRoleAssignmentId", + type: { + name: "String" + } + }, + status: { + serializedName: "properties.status", + type: { + name: "String" + } + }, + startDateTime: { + serializedName: "properties.startDateTime", + type: { + name: "DateTime" + } + }, + endDateTime: { + serializedName: "properties.endDateTime", + type: { + name: "DateTime" + } + }, + linkedRoleEligibilityScheduleId: { + serializedName: "properties.linkedRoleEligibilityScheduleId", + type: { + name: "String" + } + }, + linkedRoleEligibilityScheduleInstanceId: { + serializedName: "properties.linkedRoleEligibilityScheduleInstanceId", + type: { + name: "String" + } + }, + assignmentType: { + serializedName: "properties.assignmentType", + type: { + name: "String" + } + }, + memberType: { + serializedName: "properties.memberType", + type: { + name: "String" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + type: { + name: "DateTime" + } + }, + expandedProperties: { + serializedName: "properties.expandedProperties", + type: { + name: "Composite", + className: "ExpandedProperties" + } + } + } + } +}; +const RoleAssignmentScheduleRequest = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequest", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + readOnly: true, + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + type: { + name: "String" + } + }, + principalId: { + serializedName: "properties.principalId", + type: { + name: "String" + } + }, + principalType: { + serializedName: "properties.principalType", + readOnly: true, + type: { + name: "String" + } + }, + requestType: { + serializedName: "properties.requestType", + type: { + name: "String" + } + }, + status: { + serializedName: "properties.status", + readOnly: true, + type: { + name: "String" + } + }, + approvalId: { + serializedName: "properties.approvalId", + readOnly: true, + type: { + name: "String" + } + }, + targetRoleAssignmentScheduleId: { + serializedName: "properties.targetRoleAssignmentScheduleId", + type: { + name: "String" + } + }, + targetRoleAssignmentScheduleInstanceId: { + serializedName: "properties.targetRoleAssignmentScheduleInstanceId", + type: { + name: "String" + } + }, + scheduleInfo: { + serializedName: "properties.scheduleInfo", + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequestPropertiesScheduleInfo" + } + }, + linkedRoleEligibilityScheduleId: { + serializedName: "properties.linkedRoleEligibilityScheduleId", + type: { + name: "String" + } + }, + justification: { + serializedName: "properties.justification", + type: { + name: "String" + } + }, + ticketInfo: { + serializedName: "properties.ticketInfo", + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequestPropertiesTicketInfo" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + requestorId: { + serializedName: "properties.requestorId", + readOnly: true, + type: { + name: "String" + } + }, + expandedProperties: { + serializedName: "properties.expandedProperties", + type: { + name: "Composite", + className: "ExpandedProperties" + } + } + } + } +}; +const RoleAssignmentScheduleRequestPropertiesScheduleInfo = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequestPropertiesScheduleInfo", + modelProperties: { + startDateTime: { + serializedName: "startDateTime", + type: { + name: "DateTime" + } + }, + expiration: { + serializedName: "expiration", + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequestPropertiesScheduleInfoExpiration" + } + } + } + } +}; +const RoleAssignmentScheduleRequestPropertiesScheduleInfoExpiration = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequestPropertiesScheduleInfoExpiration", + modelProperties: { + type: { + serializedName: "type", + type: { + name: "String" + } + }, + endDateTime: { + serializedName: "endDateTime", + type: { + name: "DateTime" + } + }, + duration: { + serializedName: "duration", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentScheduleRequestPropertiesTicketInfo = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequestPropertiesTicketInfo", + modelProperties: { + ticketNumber: { + serializedName: "ticketNumber", + type: { + name: "String" + } + }, + ticketSystem: { + serializedName: "ticketSystem", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentScheduleRequestListResult = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequestListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequest" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const RoleEligibilitySchedule = { + type: { + name: "Composite", + className: "RoleEligibilitySchedule", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + type: { + name: "String" + } + }, + principalId: { + serializedName: "properties.principalId", + type: { + name: "String" + } + }, + principalType: { + serializedName: "properties.principalType", + type: { + name: "String" + } + }, + roleEligibilityScheduleRequestId: { + serializedName: "properties.roleEligibilityScheduleRequestId", + type: { + name: "String" + } + }, + memberType: { + serializedName: "properties.memberType", + type: { + name: "String" + } + }, + status: { + serializedName: "properties.status", + type: { + name: "String" + } + }, + startDateTime: { + serializedName: "properties.startDateTime", + type: { + name: "DateTime" + } + }, + endDateTime: { + serializedName: "properties.endDateTime", + type: { + name: "DateTime" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + type: { + name: "DateTime" + } + }, + updatedOn: { + serializedName: "properties.updatedOn", + type: { + name: "DateTime" + } + }, + expandedProperties: { + serializedName: "properties.expandedProperties", + type: { + name: "Composite", + className: "ExpandedProperties" + } + } + } + } +}; +const RoleEligibilityScheduleListResult = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleEligibilitySchedule" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const RoleEligibilityScheduleInstanceListResult = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleInstanceListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleEligibilityScheduleInstance" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const RoleEligibilityScheduleInstance = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleInstance", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + type: { + name: "String" + } + }, + principalId: { + serializedName: "properties.principalId", + type: { + name: "String" + } + }, + principalType: { + serializedName: "properties.principalType", + type: { + name: "String" + } + }, + roleEligibilityScheduleId: { + serializedName: "properties.roleEligibilityScheduleId", + type: { + name: "String" + } + }, + status: { + serializedName: "properties.status", + type: { + name: "String" + } + }, + startDateTime: { + serializedName: "properties.startDateTime", + type: { + name: "DateTime" + } + }, + endDateTime: { + serializedName: "properties.endDateTime", + type: { + name: "DateTime" + } + }, + memberType: { + serializedName: "properties.memberType", + type: { + name: "String" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + type: { + name: "DateTime" + } + }, + expandedProperties: { + serializedName: "properties.expandedProperties", + type: { + name: "Composite", + className: "ExpandedProperties" + } + } + } + } +}; +const RoleEligibilityScheduleRequest = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequest", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + readOnly: true, + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + type: { + name: "String" + } + }, + principalId: { + serializedName: "properties.principalId", + type: { + name: "String" + } + }, + principalType: { + serializedName: "properties.principalType", + readOnly: true, + type: { + name: "String" + } + }, + requestType: { + serializedName: "properties.requestType", + type: { + name: "String" + } + }, + status: { + serializedName: "properties.status", + readOnly: true, + type: { + name: "String" + } + }, + approvalId: { + serializedName: "properties.approvalId", + readOnly: true, + type: { + name: "String" + } + }, + scheduleInfo: { + serializedName: "properties.scheduleInfo", + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequestPropertiesScheduleInfo" + } + }, + targetRoleEligibilityScheduleId: { + serializedName: "properties.targetRoleEligibilityScheduleId", + type: { + name: "String" + } + }, + targetRoleEligibilityScheduleInstanceId: { + serializedName: "properties.targetRoleEligibilityScheduleInstanceId", + type: { + name: "String" + } + }, + justification: { + serializedName: "properties.justification", + type: { + name: "String" + } + }, + ticketInfo: { + serializedName: "properties.ticketInfo", + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequestPropertiesTicketInfo" + } + }, + condition: { + serializedName: "properties.condition", + type: { + name: "String" + } + }, + conditionVersion: { + serializedName: "properties.conditionVersion", + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + requestorId: { + serializedName: "properties.requestorId", + readOnly: true, + type: { + name: "String" + } + }, + expandedProperties: { + serializedName: "properties.expandedProperties", + type: { + name: "Composite", + className: "ExpandedProperties" + } + } + } + } +}; +const RoleEligibilityScheduleRequestPropertiesScheduleInfo = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequestPropertiesScheduleInfo", + modelProperties: { + startDateTime: { + serializedName: "startDateTime", + type: { + name: "DateTime" + } + }, + expiration: { + serializedName: "expiration", + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequestPropertiesScheduleInfoExpiration" + } + } + } + } +}; +const RoleEligibilityScheduleRequestPropertiesScheduleInfoExpiration = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequestPropertiesScheduleInfoExpiration", + modelProperties: { + type: { + serializedName: "type", + type: { + name: "String" + } + }, + endDateTime: { + serializedName: "endDateTime", + type: { + name: "DateTime" + } + }, + duration: { + serializedName: "duration", + type: { + name: "String" + } + } + } + } +}; +const RoleEligibilityScheduleRequestPropertiesTicketInfo = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequestPropertiesTicketInfo", + modelProperties: { + ticketNumber: { + serializedName: "ticketNumber", + type: { + name: "String" + } + }, + ticketSystem: { + serializedName: "ticketSystem", + type: { + name: "String" + } + } + } + } +}; +const RoleEligibilityScheduleRequestListResult = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequestListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequest" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const RoleManagementPolicy = { + type: { + name: "Composite", + className: "RoleManagementPolicy", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + type: { + name: "String" + } + }, + displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + isOrganizationDefault: { + serializedName: "properties.isOrganizationDefault", + type: { + name: "Boolean" + } + }, + lastModifiedBy: { + serializedName: "properties.lastModifiedBy", + type: { + name: "Composite", + className: "Principal" + } + }, + lastModifiedDateTime: { + serializedName: "properties.lastModifiedDateTime", + readOnly: true, + type: { + name: "DateTime" + } + }, + rules: { + serializedName: "properties.rules", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleManagementPolicyRule" + } + } + } + }, + effectiveRules: { + serializedName: "properties.effectiveRules", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleManagementPolicyRule" + } + } + } + }, + policyProperties: { + serializedName: "properties.policyProperties", + type: { + name: "Composite", + className: "PolicyProperties" + } + } + } + } +}; +const RoleManagementPolicyRule = { + type: { + name: "Composite", + className: "RoleManagementPolicyRule", + uberParent: "RoleManagementPolicyRule", + polymorphicDiscriminator: { + serializedName: "ruleType", + clientName: "ruleType" + }, + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + ruleType: { + serializedName: "ruleType", + required: true, + type: { + name: "String" + } + }, + target: { + serializedName: "target", + type: { + name: "Composite", + className: "RoleManagementPolicyRuleTarget" + } + } + } + } +}; +const RoleManagementPolicyRuleTarget = { + type: { + name: "Composite", + className: "RoleManagementPolicyRuleTarget", + modelProperties: { + caller: { + serializedName: "caller", + type: { + name: "String" + } + }, + operations: { + serializedName: "operations", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + level: { + serializedName: "level", + type: { + name: "String" + } + }, + targetObjects: { + serializedName: "targetObjects", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + inheritableSettings: { + serializedName: "inheritableSettings", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + enforcedSettings: { + serializedName: "enforcedSettings", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const PolicyProperties = { + type: { + name: "Composite", + className: "PolicyProperties", + modelProperties: { + scope: { + serializedName: "scope", + type: { + name: "Composite", + className: "PolicyPropertiesScope" + } + } + } + } +}; +const PolicyPropertiesScope = { + type: { + name: "Composite", + className: "PolicyPropertiesScope", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + } + } + } +}; +const RoleManagementPolicyListResult = { + type: { + name: "Composite", + className: "RoleManagementPolicyListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleManagementPolicy" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const RoleManagementPolicyAssignment = { + type: { + name: "Composite", + className: "RoleManagementPolicyAssignment", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "properties.roleDefinitionId", + type: { + name: "String" + } + }, + policyId: { + serializedName: "properties.policyId", + type: { + name: "String" + } + }, + effectiveRules: { + serializedName: "properties.effectiveRules", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleManagementPolicyRule" + } + } + } + }, + policyAssignmentProperties: { + serializedName: "properties.policyAssignmentProperties", + type: { + name: "Composite", + className: "PolicyAssignmentProperties" + } + } + } + } +}; +const PolicyAssignmentProperties = { + type: { + name: "Composite", + className: "PolicyAssignmentProperties", + modelProperties: { + scope: { + serializedName: "scope", + type: { + name: "Composite", + className: "PolicyAssignmentPropertiesScope" + } + }, + roleDefinition: { + serializedName: "roleDefinition", + type: { + name: "Composite", + className: "PolicyAssignmentPropertiesRoleDefinition" + } + }, + policy: { + serializedName: "policy", + type: { + name: "Composite", + className: "PolicyAssignmentPropertiesPolicy" + } + } + } + } +}; +const PolicyAssignmentPropertiesScope = { + type: { + name: "Composite", + className: "PolicyAssignmentPropertiesScope", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + } + } + } +}; +const PolicyAssignmentPropertiesRoleDefinition = { + type: { + name: "Composite", + className: "PolicyAssignmentPropertiesRoleDefinition", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + } + } + } +}; +const PolicyAssignmentPropertiesPolicy = { + type: { + name: "Composite", + className: "PolicyAssignmentPropertiesPolicy", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + lastModifiedBy: { + serializedName: "lastModifiedBy", + type: { + name: "Composite", + className: "Principal" + } + }, + lastModifiedDateTime: { + serializedName: "lastModifiedDateTime", + type: { + name: "DateTime" + } + } + } + } +}; +const RoleManagementPolicyAssignmentListResult = { + type: { + name: "Composite", + className: "RoleManagementPolicyAssignmentListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleManagementPolicyAssignment" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const DenyAssignmentFilter = { + type: { + name: "Composite", + className: "DenyAssignmentFilter", + modelProperties: { + denyAssignmentName: { + serializedName: "denyAssignmentName", + type: { + name: "String" + } + }, + principalId: { + serializedName: "principalId", + type: { + name: "String" + } + }, + gdprExportPrincipalId: { + serializedName: "gdprExportPrincipalId", + type: { + name: "String" + } + } + } + } +}; +const ValidationResponseErrorInfo = { + type: { + name: "Composite", + className: "ValidationResponseErrorInfo", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ValidationResponse = { + type: { + name: "Composite", + className: "ValidationResponse", + modelProperties: { + isValid: { + serializedName: "isValid", + readOnly: true, + type: { + name: "Boolean" + } + }, + errorInfo: { + serializedName: "errorInfo", + type: { + name: "Composite", + className: "ValidationResponseErrorInfo" + } + } + } + } +}; +const RoleAssignmentFilter = { + type: { + name: "Composite", + className: "RoleAssignmentFilter", + modelProperties: { + principalId: { + serializedName: "principalId", + type: { + name: "String" + } + } + } + } +}; +const RoleDefinitionFilter = { + type: { + name: "Composite", + className: "RoleDefinitionFilter", + modelProperties: { + roleName: { + serializedName: "roleName", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + } + } + } +}; +const ApprovalSettings = { + type: { + name: "Composite", + className: "ApprovalSettings", + modelProperties: { + isApprovalRequired: { + serializedName: "isApprovalRequired", + type: { + name: "Boolean" + } + }, + isApprovalRequiredForExtension: { + serializedName: "isApprovalRequiredForExtension", + type: { + name: "Boolean" + } + }, + isRequestorJustificationRequired: { + serializedName: "isRequestorJustificationRequired", + type: { + name: "Boolean" + } + }, + approvalMode: { + serializedName: "approvalMode", + type: { + name: "String" + } + }, + approvalStages: { + serializedName: "approvalStages", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ApprovalStage" + } + } + } + } + } + } +}; +const ApprovalStage = { + type: { + name: "Composite", + className: "ApprovalStage", + modelProperties: { + approvalStageTimeOutInDays: { + serializedName: "approvalStageTimeOutInDays", + type: { + name: "Number" + } + }, + isApproverJustificationRequired: { + serializedName: "isApproverJustificationRequired", + type: { + name: "Boolean" + } + }, + escalationTimeInMinutes: { + serializedName: "escalationTimeInMinutes", + type: { + name: "Number" + } + }, + primaryApprovers: { + serializedName: "primaryApprovers", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "UserSet" + } + } + } + }, + isEscalationEnabled: { + serializedName: "isEscalationEnabled", + type: { + name: "Boolean" + } + }, + escalationApprovers: { + serializedName: "escalationApprovers", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "UserSet" + } + } + } + } + } + } +}; +const UserSet = { + type: { + name: "Composite", + className: "UserSet", + modelProperties: { + userType: { + serializedName: "userType", + type: { + name: "String" + } + }, + isBackup: { + serializedName: "isBackup", + type: { + name: "Boolean" + } + }, + id: { + serializedName: "id", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentScheduleFilter = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleFilter", + modelProperties: { + principalId: { + serializedName: "principalId", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "roleDefinitionId", + type: { + name: "String" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentScheduleInstanceFilter = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleInstanceFilter", + modelProperties: { + principalId: { + serializedName: "principalId", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "roleDefinitionId", + type: { + name: "String" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + }, + roleAssignmentScheduleId: { + serializedName: "roleAssignmentScheduleId", + type: { + name: "String" + } + } + } + } +}; +const RoleAssignmentScheduleRequestFilter = { + type: { + name: "Composite", + className: "RoleAssignmentScheduleRequestFilter", + modelProperties: { + principalId: { + serializedName: "principalId", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "roleDefinitionId", + type: { + name: "String" + } + }, + requestorId: { + serializedName: "requestorId", + type: { + name: "String" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + } + } + } +}; +const RoleEligibilityScheduleFilter = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleFilter", + modelProperties: { + principalId: { + serializedName: "principalId", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "roleDefinitionId", + type: { + name: "String" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + } + } + } +}; +const RoleEligibilityScheduleInstanceFilter = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleInstanceFilter", + modelProperties: { + principalId: { + serializedName: "principalId", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "roleDefinitionId", + type: { + name: "String" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + }, + roleEligibilityScheduleId: { + serializedName: "roleEligibilityScheduleId", + type: { + name: "String" + } + } + } + } +}; +const RoleEligibilityScheduleRequestFilter = { + type: { + name: "Composite", + className: "RoleEligibilityScheduleRequestFilter", + modelProperties: { + principalId: { + serializedName: "principalId", + type: { + name: "String" + } + }, + roleDefinitionId: { + serializedName: "roleDefinitionId", + type: { + name: "String" + } + }, + requestorId: { + serializedName: "requestorId", + type: { + name: "String" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + } + } + } +}; +const RoleManagementPolicyApprovalRule = { + serializedName: "RoleManagementPolicyApprovalRule", + type: { + name: "Composite", + className: "RoleManagementPolicyApprovalRule", + uberParent: "RoleManagementPolicyRule", + polymorphicDiscriminator: RoleManagementPolicyRule.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, RoleManagementPolicyRule.type.modelProperties), { setting: { + serializedName: "setting", + type: { + name: "Composite", + className: "ApprovalSettings" + } + } }) + } +}; +const RoleManagementPolicyAuthenticationContextRule = { + serializedName: "RoleManagementPolicyAuthenticationContextRule", + type: { + name: "Composite", + className: "RoleManagementPolicyAuthenticationContextRule", + uberParent: "RoleManagementPolicyRule", + polymorphicDiscriminator: RoleManagementPolicyRule.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, RoleManagementPolicyRule.type.modelProperties), { isEnabled: { + serializedName: "isEnabled", + type: { + name: "Boolean" + } + }, claimValue: { + serializedName: "claimValue", + type: { + name: "String" + } + } }) + } +}; +const RoleManagementPolicyEnablementRule = { + serializedName: "RoleManagementPolicyEnablementRule", + type: { + name: "Composite", + className: "RoleManagementPolicyEnablementRule", + uberParent: "RoleManagementPolicyRule", + polymorphicDiscriminator: RoleManagementPolicyRule.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, RoleManagementPolicyRule.type.modelProperties), { enabledRules: { + serializedName: "enabledRules", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } }) + } +}; +const RoleManagementPolicyExpirationRule = { + serializedName: "RoleManagementPolicyExpirationRule", + type: { + name: "Composite", + className: "RoleManagementPolicyExpirationRule", + uberParent: "RoleManagementPolicyRule", + polymorphicDiscriminator: RoleManagementPolicyRule.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, RoleManagementPolicyRule.type.modelProperties), { isExpirationRequired: { + serializedName: "isExpirationRequired", + type: { + name: "Boolean" + } + }, maximumDuration: { + serializedName: "maximumDuration", + type: { + name: "String" + } + } }) + } +}; +const RoleManagementPolicyNotificationRule = { + serializedName: "RoleManagementPolicyNotificationRule", + type: { + name: "Composite", + className: "RoleManagementPolicyNotificationRule", + uberParent: "RoleManagementPolicyRule", + polymorphicDiscriminator: RoleManagementPolicyRule.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, RoleManagementPolicyRule.type.modelProperties), { notificationType: { + serializedName: "notificationType", + type: { + name: "String" + } + }, notificationLevel: { + serializedName: "notificationLevel", + type: { + name: "String" + } + }, recipientType: { + serializedName: "recipientType", + type: { + name: "String" + } + }, notificationRecipients: { + serializedName: "notificationRecipients", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, isDefaultRecipientsEnabled: { + serializedName: "isDefaultRecipientsEnabled", + type: { + name: "Boolean" + } + } }) + } +}; +let discriminators = { + RoleManagementPolicyRule: RoleManagementPolicyRule, + "RoleManagementPolicyRule.RoleManagementPolicyApprovalRule": RoleManagementPolicyApprovalRule, + "RoleManagementPolicyRule.RoleManagementPolicyAuthenticationContextRule": RoleManagementPolicyAuthenticationContextRule, + "RoleManagementPolicyRule.RoleManagementPolicyEnablementRule": RoleManagementPolicyEnablementRule, + "RoleManagementPolicyRule.RoleManagementPolicyExpirationRule": RoleManagementPolicyExpirationRule, + "RoleManagementPolicyRule.RoleManagementPolicyNotificationRule": RoleManagementPolicyNotificationRule +}; + +var Mappers = /*#__PURE__*/Object.freeze({ + __proto__: null, + ClassicAdministratorListResult: ClassicAdministratorListResult, + ClassicAdministrator: ClassicAdministrator, + ErrorResponse: ErrorResponse, + ErrorDetail: ErrorDetail, + ErrorAdditionalInfo: ErrorAdditionalInfo, + DenyAssignmentListResult: DenyAssignmentListResult, + DenyAssignment: DenyAssignment, + DenyAssignmentPermission: DenyAssignmentPermission, + Principal: Principal, + ProviderOperationsMetadata: ProviderOperationsMetadata, + ResourceType: ResourceType, + ProviderOperation: ProviderOperation, + ProviderOperationsMetadataListResult: ProviderOperationsMetadataListResult, + RoleAssignmentListResult: RoleAssignmentListResult, + RoleAssignment: RoleAssignment, + RoleAssignmentCreateParameters: RoleAssignmentCreateParameters, + PermissionGetResult: PermissionGetResult, + Permission: Permission, + RoleDefinition: RoleDefinition, + RoleDefinitionListResult: RoleDefinitionListResult, + EligibleChildResourcesListResult: EligibleChildResourcesListResult, + EligibleChildResource: EligibleChildResource, + CloudError: CloudError, + CloudErrorBody: CloudErrorBody, + RoleAssignmentSchedule: RoleAssignmentSchedule, + ExpandedProperties: ExpandedProperties, + ExpandedPropertiesScope: ExpandedPropertiesScope, + ExpandedPropertiesRoleDefinition: ExpandedPropertiesRoleDefinition, + ExpandedPropertiesPrincipal: ExpandedPropertiesPrincipal, + RoleAssignmentScheduleListResult: RoleAssignmentScheduleListResult, + RoleAssignmentScheduleInstanceListResult: RoleAssignmentScheduleInstanceListResult, + RoleAssignmentScheduleInstance: RoleAssignmentScheduleInstance, + RoleAssignmentScheduleRequest: RoleAssignmentScheduleRequest, + RoleAssignmentScheduleRequestPropertiesScheduleInfo: RoleAssignmentScheduleRequestPropertiesScheduleInfo, + RoleAssignmentScheduleRequestPropertiesScheduleInfoExpiration: RoleAssignmentScheduleRequestPropertiesScheduleInfoExpiration, + RoleAssignmentScheduleRequestPropertiesTicketInfo: RoleAssignmentScheduleRequestPropertiesTicketInfo, + RoleAssignmentScheduleRequestListResult: RoleAssignmentScheduleRequestListResult, + RoleEligibilitySchedule: RoleEligibilitySchedule, + RoleEligibilityScheduleListResult: RoleEligibilityScheduleListResult, + RoleEligibilityScheduleInstanceListResult: RoleEligibilityScheduleInstanceListResult, + RoleEligibilityScheduleInstance: RoleEligibilityScheduleInstance, + RoleEligibilityScheduleRequest: RoleEligibilityScheduleRequest, + RoleEligibilityScheduleRequestPropertiesScheduleInfo: RoleEligibilityScheduleRequestPropertiesScheduleInfo, + RoleEligibilityScheduleRequestPropertiesScheduleInfoExpiration: RoleEligibilityScheduleRequestPropertiesScheduleInfoExpiration, + RoleEligibilityScheduleRequestPropertiesTicketInfo: RoleEligibilityScheduleRequestPropertiesTicketInfo, + RoleEligibilityScheduleRequestListResult: RoleEligibilityScheduleRequestListResult, + RoleManagementPolicy: RoleManagementPolicy, + RoleManagementPolicyRule: RoleManagementPolicyRule, + RoleManagementPolicyRuleTarget: RoleManagementPolicyRuleTarget, + PolicyProperties: PolicyProperties, + PolicyPropertiesScope: PolicyPropertiesScope, + RoleManagementPolicyListResult: RoleManagementPolicyListResult, + RoleManagementPolicyAssignment: RoleManagementPolicyAssignment, + PolicyAssignmentProperties: PolicyAssignmentProperties, + PolicyAssignmentPropertiesScope: PolicyAssignmentPropertiesScope, + PolicyAssignmentPropertiesRoleDefinition: PolicyAssignmentPropertiesRoleDefinition, + PolicyAssignmentPropertiesPolicy: PolicyAssignmentPropertiesPolicy, + RoleManagementPolicyAssignmentListResult: RoleManagementPolicyAssignmentListResult, + DenyAssignmentFilter: DenyAssignmentFilter, + ValidationResponseErrorInfo: ValidationResponseErrorInfo, + ValidationResponse: ValidationResponse, + RoleAssignmentFilter: RoleAssignmentFilter, + RoleDefinitionFilter: RoleDefinitionFilter, + ApprovalSettings: ApprovalSettings, + ApprovalStage: ApprovalStage, + UserSet: UserSet, + RoleAssignmentScheduleFilter: RoleAssignmentScheduleFilter, + RoleAssignmentScheduleInstanceFilter: RoleAssignmentScheduleInstanceFilter, + RoleAssignmentScheduleRequestFilter: RoleAssignmentScheduleRequestFilter, + RoleEligibilityScheduleFilter: RoleEligibilityScheduleFilter, + RoleEligibilityScheduleInstanceFilter: RoleEligibilityScheduleInstanceFilter, + RoleEligibilityScheduleRequestFilter: RoleEligibilityScheduleRequestFilter, + RoleManagementPolicyApprovalRule: RoleManagementPolicyApprovalRule, + RoleManagementPolicyAuthenticationContextRule: RoleManagementPolicyAuthenticationContextRule, + RoleManagementPolicyEnablementRule: RoleManagementPolicyEnablementRule, + RoleManagementPolicyExpirationRule: RoleManagementPolicyExpirationRule, + RoleManagementPolicyNotificationRule: RoleManagementPolicyNotificationRule, + discriminators: discriminators +}); + +/* + * 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. + */ +const accept = { + parameterPath: "accept", + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Accept", + type: { + name: "String" + } + } +}; +const $host = { + parameterPath: "$host", + mapper: { + serializedName: "$host", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const apiVersion = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2015-07-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const subscriptionId = { + parameterPath: "subscriptionId", + mapper: { + constraints: { + MinLength: 1 + }, + serializedName: "subscriptionId", + required: true, + type: { + name: "String" + } + } +}; +const nextLink = { + parameterPath: "nextLink", + mapper: { + serializedName: "nextLink", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const resourceGroupName = { + parameterPath: "resourceGroupName", + mapper: { + constraints: { + MaxLength: 90, + MinLength: 1 + }, + serializedName: "resourceGroupName", + required: true, + type: { + name: "String" + } + } +}; +const resourceProviderNamespace = { + parameterPath: "resourceProviderNamespace", + mapper: { + serializedName: "resourceProviderNamespace", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const parentResourcePath = { + parameterPath: "parentResourcePath", + mapper: { + serializedName: "parentResourcePath", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const resourceType = { + parameterPath: "resourceType", + mapper: { + serializedName: "resourceType", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const resourceName = { + parameterPath: "resourceName", + mapper: { + serializedName: "resourceName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion1 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2022-04-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const filter = { + parameterPath: ["options", "filter"], + mapper: { + serializedName: "$filter", + type: { + name: "String" + } + } +}; +const scope = { + parameterPath: "scope", + mapper: { + serializedName: "scope", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const denyAssignmentId = { + parameterPath: "denyAssignmentId", + mapper: { + serializedName: "denyAssignmentId", + required: true, + type: { + name: "String" + } + } +}; +const denyAssignmentId1 = { + parameterPath: "denyAssignmentId", + mapper: { + serializedName: "denyAssignmentId", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const expand = { + parameterPath: ["options", "expand"], + mapper: { + defaultValue: "resourceTypes", + serializedName: "$expand", + type: { + name: "String" + } + } +}; +const filter1 = { + parameterPath: ["options", "filter"], + mapper: { + serializedName: "$filter", + type: { + name: "String" + } + }, + skipEncoding: true +}; +const tenantId = { + parameterPath: ["options", "tenantId"], + mapper: { + serializedName: "tenantId", + type: { + name: "String" + } + } +}; +const resourceName1 = { + parameterPath: "resourceName", + mapper: { + serializedName: "resourceName", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const roleAssignmentName = { + parameterPath: "roleAssignmentName", + mapper: { + serializedName: "roleAssignmentName", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const contentType = { + parameterPath: ["options", "contentType"], + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Content-Type", + type: { + name: "String" + } + } +}; +const parameters = { + parameterPath: "parameters", + mapper: RoleAssignmentCreateParameters +}; +const skipToken = { + parameterPath: ["options", "skipToken"], + mapper: { + serializedName: "$skipToken", + type: { + name: "String" + } + }, + skipEncoding: true +}; +const roleAssignmentId = { + parameterPath: "roleAssignmentId", + mapper: { + serializedName: "roleAssignmentId", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const roleDefinitionId = { + parameterPath: "roleDefinitionId", + mapper: { + serializedName: "roleDefinitionId", + required: true, + type: { + name: "String" + } + } +}; +const roleDefinition = { + parameterPath: "roleDefinition", + mapper: RoleDefinition +}; +const roleId = { + parameterPath: "roleId", + mapper: { + serializedName: "roleId", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const apiVersion2 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2020-10-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const roleAssignmentScheduleName = { + parameterPath: "roleAssignmentScheduleName", + mapper: { + serializedName: "roleAssignmentScheduleName", + required: true, + type: { + name: "String" + } + } +}; +const roleAssignmentScheduleInstanceName = { + parameterPath: "roleAssignmentScheduleInstanceName", + mapper: { + serializedName: "roleAssignmentScheduleInstanceName", + required: true, + type: { + name: "String" + } + } +}; +const parameters1 = { + parameterPath: "parameters", + mapper: RoleAssignmentScheduleRequest +}; +const roleAssignmentScheduleRequestName = { + parameterPath: "roleAssignmentScheduleRequestName", + mapper: { + serializedName: "roleAssignmentScheduleRequestName", + required: true, + type: { + name: "String" + } + } +}; +const roleEligibilityScheduleName = { + parameterPath: "roleEligibilityScheduleName", + mapper: { + serializedName: "roleEligibilityScheduleName", + required: true, + type: { + name: "String" + } + } +}; +const roleEligibilityScheduleInstanceName = { + parameterPath: "roleEligibilityScheduleInstanceName", + mapper: { + serializedName: "roleEligibilityScheduleInstanceName", + required: true, + type: { + name: "String" + } + } +}; +const parameters2 = { + parameterPath: "parameters", + mapper: RoleEligibilityScheduleRequest +}; +const roleEligibilityScheduleRequestName = { + parameterPath: "roleEligibilityScheduleRequestName", + mapper: { + serializedName: "roleEligibilityScheduleRequestName", + required: true, + type: { + name: "String" + } + } +}; +const roleManagementPolicyName = { + parameterPath: "roleManagementPolicyName", + mapper: { + serializedName: "roleManagementPolicyName", + required: true, + type: { + name: "String" + } + } +}; +const parameters3 = { + parameterPath: "parameters", + mapper: RoleManagementPolicy +}; +const roleManagementPolicyAssignmentName = { + parameterPath: "roleManagementPolicyAssignmentName", + mapper: { + serializedName: "roleManagementPolicyAssignmentName", + required: true, + type: { + name: "String" + } + } +}; +const parameters4 = { + parameterPath: "parameters", + mapper: RoleManagementPolicyAssignment +}; + +/* + * 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 containing ClassicAdministrators operations. */ +class ClassicAdministratorsImpl { + /** + * Initialize a new instance of the class ClassicAdministrators class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets service administrator, account administrator, and co-administrators for the subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + } + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets service administrator, account administrator, and co-administrators for the subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$3); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$3); + } +} +// Operation Specifications +const serializer$f = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/classicAdministrators", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ClassicAdministratorListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$f +}; +const listNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ClassicAdministratorListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$f +}; + +/* + * 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 containing GlobalAdministrator operations. */ +class GlobalAdministratorImpl { + /** + * Initialize a new instance of the class GlobalAdministrator class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Elevates access for a Global Administrator. + * @param options The options parameters. + */ + elevateAccess(options) { + return this.client.sendOperationRequest({ options }, elevateAccessOperationSpec); + } +} +// Operation Specifications +const serializer$e = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const elevateAccessOperationSpec = { + path: "/providers/Microsoft.Authorization/elevateAccess", + httpMethod: "POST", + responses: { + 200: {}, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$e +}; + +/* + * 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 containing DenyAssignments operations. */ +class DenyAssignmentsImpl { + /** + * Initialize a new instance of the class DenyAssignments class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets deny assignments for a resource. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param parentResourcePath The parent resource identity. + * @param resourceType The resource type of the resource. + * @param resourceName The name of the resource to get deny assignments for. + * @param options The options parameters. + */ + listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + const iter = this.listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options, settings); + } + }; + } + listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceNext(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets deny assignments for a resource group. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param options The options parameters. + */ + listForResourceGroup(resourceGroupName, options) { + const iter = this.listForResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourceGroupPagingPage(resourceGroupName, options, settings); + } + }; + } + listForResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets all deny assignments for the subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + } + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Gets deny assignments for a scope. + * @param scope The scope of the deny assignments. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_4, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * Gets deny assignments for a resource. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param parentResourcePath The parent resource identity. + * @param resourceType The resource type of the resource. + * @param resourceName The name of the resource to get deny assignments for. + * @param options The options parameters. + */ + _listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + options + }, listForResourceOperationSpec$2); + } + /** + * Gets deny assignments for a resource group. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param options The options parameters. + */ + _listForResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listForResourceGroupOperationSpec$2); + } + /** + * Gets all deny assignments for the subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$2); + } + /** + * Get the specified deny assignment. + * @param scope The scope of the deny assignment. + * @param denyAssignmentId The ID of the deny assignment to get. + * @param options The options parameters. + */ + get(scope, denyAssignmentId, options) { + return this.client.sendOperationRequest({ scope, denyAssignmentId, options }, getOperationSpec$c); + } + /** + * Gets a deny assignment by ID. + * @param denyAssignmentId The fully qualified deny assignment ID. For example, use the format, + * /subscriptions/{guid}/providers/Microsoft.Authorization/denyAssignments/{denyAssignmentId} for + * subscription level deny assignments, or + * /providers/Microsoft.Authorization/denyAssignments/{denyAssignmentId} for tenant level deny + * assignments. + * @param options The options parameters. + */ + getById(denyAssignmentId, options) { + return this.client.sendOperationRequest({ denyAssignmentId, options }, getByIdOperationSpec$2); + } + /** + * Gets deny assignments for a scope. + * @param scope The scope of the deny assignments. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$9); + } + /** + * ListForResourceNext + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param parentResourcePath The parent resource identity. + * @param resourceType The resource type of the resource. + * @param resourceName The name of the resource to get deny assignments for. + * @param nextLink The nextLink from the previous successful call to the ListForResource method. + * @param options The options parameters. + */ + _listForResourceNext(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + nextLink, + options + }, listForResourceNextOperationSpec$2); + } + /** + * ListForResourceGroupNext + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. + * @param options The options parameters. + */ + _listForResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listForResourceGroupNextOperationSpec$2); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$2); + } + /** + * ListForScopeNext + * @param scope The scope of the deny assignments. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$9); + } +} +// Operation Specifications +const serializer$d = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listForResourceOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}/providers/Microsoft.Authorization/denyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, filter], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$d +}; +const listForResourceGroupOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/denyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, filter], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$d +}; +const listOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/denyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, filter], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$d +}; +const getOperationSpec$c = { + path: "/{scope}/providers/Microsoft.Authorization/denyAssignments/{denyAssignmentId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignment + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + denyAssignmentId + ], + headerParameters: [accept], + serializer: serializer$d +}; +const getByIdOperationSpec$2 = { + path: "/{denyAssignmentId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignment + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, denyAssignmentId1], + headerParameters: [accept], + serializer: serializer$d +}; +const listForScopeOperationSpec$9 = { + path: "/{scope}/providers/Microsoft.Authorization/denyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, filter], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$d +}; +const listForResourceNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$d +}; +const listForResourceGroupNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$d +}; +const listNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$d +}; +const listForScopeNextOperationSpec$9 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DenyAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$d +}; + +/* + * 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 containing ProviderOperationsMetadataOperations operations. */ +class ProviderOperationsMetadataOperationsImpl { + /** + * Initialize a new instance of the class ProviderOperationsMetadataOperations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets provider operations metadata for all resource providers. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + } + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets provider operations metadata for the specified resource provider. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param options The options parameters. + */ + get(resourceProviderNamespace, options) { + return this.client.sendOperationRequest({ resourceProviderNamespace, options }, getOperationSpec$b); + } + /** + * Gets provider operations metadata for all resource providers. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$1); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$c = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$b = { + path: "/providers/Microsoft.Authorization/providerOperations/{resourceProviderNamespace}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ProviderOperationsMetadata + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, expand], + urlParameters: [$host, resourceProviderNamespace], + headerParameters: [accept], + serializer: serializer$c +}; +const listOperationSpec$1 = { + path: "/providers/Microsoft.Authorization/providerOperations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ProviderOperationsMetadataListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, expand], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$c +}; +const listNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ProviderOperationsMetadataListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [$host, nextLink], + headerParameters: [accept], + serializer: serializer$c +}; + +/* + * 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 containing RoleAssignments operations. */ +class RoleAssignmentsImpl { + /** + * Initialize a new instance of the class RoleAssignments class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List all role assignments that apply to a subscription. + * @param options The options parameters. + */ + listForSubscription(options) { + const iter = this.listForSubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForSubscriptionPagingPage(options, settings); + } + }; + } + listForSubscriptionPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForSubscriptionPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForSubscription(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForSubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForSubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listForSubscriptionPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForSubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List all role assignments that apply to a resource group. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param options The options parameters. + */ + listForResourceGroup(resourceGroupName, options) { + const iter = this.listForResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourceGroupPagingPage(resourceGroupName, options, settings); + } + }; + } + listForResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * List all role assignments that apply to a resource. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The resource name. + * @param options The options parameters. + */ + listForResource(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, options) { + const iter = this.listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, options, settings); + } + }; + } + listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResource(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceNext(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * List all role assignments that apply to a scope. + * @param scope The scope of the operation or resource. Valid scopes are: subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_4, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * List all role assignments that apply to a subscription. + * @param options The options parameters. + */ + _listForSubscription(options) { + return this.client.sendOperationRequest({ options }, listForSubscriptionOperationSpec); + } + /** + * List all role assignments that apply to a resource group. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param options The options parameters. + */ + _listForResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listForResourceGroupOperationSpec$1); + } + /** + * List all role assignments that apply to a resource. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The resource name. + * @param options The options parameters. + */ + _listForResource(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + resourceType, + resourceName, + options + }, listForResourceOperationSpec$1); + } + /** + * Get a role assignment by scope and name. + * @param scope The scope of the operation or resource. Valid scopes are: subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param roleAssignmentName The name of the role assignment. It can be any valid GUID. + * @param options The options parameters. + */ + get(scope, roleAssignmentName, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentName, options }, getOperationSpec$a); + } + /** + * Create or update a role assignment by scope and name. + * @param scope The scope of the operation or resource. Valid scopes are: subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param roleAssignmentName The name of the role assignment. It can be any valid GUID. + * @param parameters Parameters for the role assignment. + * @param options The options parameters. + */ + create(scope, roleAssignmentName, parameters, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentName, parameters, options }, createOperationSpec$3); + } + /** + * Delete a role assignment by scope and name. + * @param scope The scope of the operation or resource. Valid scopes are: subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param roleAssignmentName The name of the role assignment. It can be any valid GUID. + * @param options The options parameters. + */ + delete(scope, roleAssignmentName, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentName, options }, deleteOperationSpec$3); + } + /** + * List all role assignments that apply to a scope. + * @param scope The scope of the operation or resource. Valid scopes are: subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$8); + } + /** + * Get a role assignment by ID. + * @param roleAssignmentId The fully qualified ID of the role assignment including scope, resource + * name, and resource type. Format: + * /{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentName}. Example: + * /subscriptions//resourcegroups//providers/Microsoft.Authorization/roleAssignments/ + * @param options The options parameters. + */ + getById(roleAssignmentId, options) { + return this.client.sendOperationRequest({ roleAssignmentId, options }, getByIdOperationSpec$1); + } + /** + * Create or update a role assignment by ID. + * @param roleAssignmentId The fully qualified ID of the role assignment including scope, resource + * name, and resource type. Format: + * /{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentName}. Example: + * /subscriptions//resourcegroups//providers/Microsoft.Authorization/roleAssignments/ + * @param parameters Parameters for the role assignment. + * @param options The options parameters. + */ + createById(roleAssignmentId, parameters, options) { + return this.client.sendOperationRequest({ roleAssignmentId, parameters, options }, createByIdOperationSpec); + } + /** + * Delete a role assignment by ID. + * @param roleAssignmentId The fully qualified ID of the role assignment including scope, resource + * name, and resource type. Format: + * /{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentName}. Example: + * /subscriptions//resourcegroups//providers/Microsoft.Authorization/roleAssignments/ + * @param options The options parameters. + */ + deleteById(roleAssignmentId, options) { + return this.client.sendOperationRequest({ roleAssignmentId, options }, deleteByIdOperationSpec); + } + /** + * ListForSubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListForSubscription method. + * @param options The options parameters. + */ + _listForSubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listForSubscriptionNextOperationSpec); + } + /** + * ListForResourceGroupNext + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. + * @param options The options parameters. + */ + _listForResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listForResourceGroupNextOperationSpec$1); + } + /** + * ListForResourceNext + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The resource name. + * @param nextLink The nextLink from the previous successful call to the ListForResource method. + * @param options The options parameters. + */ + _listForResourceNext(resourceGroupName, resourceProviderNamespace, resourceType, resourceName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + resourceType, + resourceName, + nextLink, + options + }, listForResourceNextOperationSpec$1); + } + /** + * ListForScopeNext + * @param scope The scope of the operation or resource. Valid scopes are: subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$8); + } +} +// Operation Specifications +const serializer$b = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listForSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [ + apiVersion1, + filter1, + tenantId + ], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$b +}; +const listForResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [ + apiVersion1, + filter1, + tenantId + ], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$b +}; +const listForResourceOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Authorization/roleAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [ + apiVersion1, + filter1, + tenantId + ], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceProviderNamespace, + resourceType, + resourceName1 + ], + headerParameters: [accept], + serializer: serializer$b +}; +const getOperationSpec$a = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignment + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, tenantId], + urlParameters: [ + $host, + scope, + roleAssignmentName + ], + headerParameters: [accept], + serializer: serializer$b +}; +const createOperationSpec$3 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: RoleAssignment + }, + 201: { + bodyMapper: RoleAssignment + }, + default: { + bodyMapper: ErrorResponse + } + }, + requestBody: parameters, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + roleAssignmentName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$b +}; +const deleteOperationSpec$3 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentName}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: RoleAssignment + }, + 204: {}, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, tenantId], + urlParameters: [ + $host, + scope, + roleAssignmentName + ], + headerParameters: [accept], + serializer: serializer$b +}; +const listForScopeOperationSpec$8 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [ + apiVersion1, + filter1, + tenantId, + skipToken + ], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$b +}; +const getByIdOperationSpec$1 = { + path: "/{roleAssignmentId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignment + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, tenantId], + urlParameters: [$host, roleAssignmentId], + headerParameters: [accept], + serializer: serializer$b +}; +const createByIdOperationSpec = { + path: "/{roleAssignmentId}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: RoleAssignment + }, + 201: { + bodyMapper: RoleAssignment + }, + default: { + bodyMapper: ErrorResponse + } + }, + requestBody: parameters, + queryParameters: [apiVersion1], + urlParameters: [$host, roleAssignmentId], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$b +}; +const deleteByIdOperationSpec = { + path: "/{roleAssignmentId}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: RoleAssignment + }, + 204: {}, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, tenantId], + urlParameters: [$host, roleAssignmentId], + headerParameters: [accept], + serializer: serializer$b +}; +const listForSubscriptionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$b +}; +const listForResourceGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$b +}; +const listForResourceNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + resourceProviderNamespace, + resourceType, + resourceName1 + ], + headerParameters: [accept], + serializer: serializer$b +}; +const listForScopeNextOperationSpec$8 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$b +}; + +/* + * 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 containing Permissions operations. */ +class PermissionsImpl { + /** + * Initialize a new instance of the class Permissions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets all permissions the caller has for a resource group. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param options The options parameters. + */ + listForResourceGroup(resourceGroupName, options) { + const iter = this.listForResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourceGroupPagingPage(resourceGroupName, options, settings); + } + }; + } + listForResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets all permissions the caller has for a resource. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param parentResourcePath The parent resource identity. + * @param resourceType The resource type of the resource. + * @param resourceName The name of the resource to get the permissions for. + * @param options The options parameters. + */ + listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + const iter = this.listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options, settings); + } + }; + } + listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceNext(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets all permissions the caller has for a resource group. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param options The options parameters. + */ + _listForResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listForResourceGroupOperationSpec); + } + /** + * Gets all permissions the caller has for a resource. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param parentResourcePath The parent resource identity. + * @param resourceType The resource type of the resource. + * @param resourceName The name of the resource to get the permissions for. + * @param options The options parameters. + */ + _listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + options + }, listForResourceOperationSpec); + } + /** + * ListForResourceGroupNext + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. + * @param options The options parameters. + */ + _listForResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listForResourceGroupNextOperationSpec); + } + /** + * ListForResourceNext + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param resourceProviderNamespace The namespace of the resource provider. + * @param parentResourcePath The parent resource identity. + * @param resourceType The resource type of the resource. + * @param resourceName The name of the resource to get the permissions for. + * @param nextLink The nextLink from the previous successful call to the ListForResource method. + * @param options The options parameters. + */ + _listForResourceNext(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + nextLink, + options + }, listForResourceNextOperationSpec); + } +} +// Operation Specifications +const serializer$a = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listForResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/permissions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PermissionGetResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$a +}; +const listForResourceOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}/providers/Microsoft.Authorization/permissions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PermissionGetResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$a +}; +const listForResourceGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PermissionGetResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$a +}; +const listForResourceNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PermissionGetResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$a +}; + +/* + * 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 containing RoleDefinitions operations. */ +class RoleDefinitionsImpl { + /** + * Initialize a new instance of the class RoleDefinitions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Get all role definitions that are applicable at scope and above. + * @param scope The scope of the role definition. + * @param options The options parameters. + */ + list(scope, options) { + const iter = this.listPagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(scope, options, settings); + } + }; + } + listPagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Deletes a role definition. + * @param scope The scope of the role definition. + * @param roleDefinitionId The ID of the role definition to delete. + * @param options The options parameters. + */ + delete(scope, roleDefinitionId, options) { + return this.client.sendOperationRequest({ scope, roleDefinitionId, options }, deleteOperationSpec$2); + } + /** + * Get role definition by name (GUID). + * @param scope The scope of the role definition. + * @param roleDefinitionId The ID of the role definition. + * @param options The options parameters. + */ + get(scope, roleDefinitionId, options) { + return this.client.sendOperationRequest({ scope, roleDefinitionId, options }, getOperationSpec$9); + } + /** + * Creates or updates a role definition. + * @param scope The scope of the role definition. + * @param roleDefinitionId The ID of the role definition. + * @param roleDefinition The values for the role definition. + * @param options The options parameters. + */ + createOrUpdate(scope, roleDefinitionId, roleDefinition, options) { + return this.client.sendOperationRequest({ scope, roleDefinitionId, roleDefinition, options }, createOrUpdateOperationSpec); + } + /** + * Get all role definitions that are applicable at scope and above. + * @param scope The scope of the role definition. + * @param options The options parameters. + */ + _list(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listOperationSpec); + } + /** + * Gets a role definition by ID. + * @param roleId The fully qualified role definition ID. Use the format, + * /subscriptions/{guid}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId} for + * subscription level role definitions, or + * /providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId} for tenant level role + * definitions. + * @param options The options parameters. + */ + getById(roleId, options) { + return this.client.sendOperationRequest({ roleId, options }, getByIdOperationSpec); + } + /** + * ListNext + * @param scope The scope of the role definition. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listNextOperationSpec); + } +} +// Operation Specifications +const serializer$9 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const deleteOperationSpec$2 = { + path: "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: RoleDefinition + }, + 204: {}, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + roleDefinitionId + ], + headerParameters: [accept], + serializer: serializer$9 +}; +const getOperationSpec$9 = { + path: "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleDefinition + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + roleDefinitionId + ], + headerParameters: [accept], + serializer: serializer$9 +}; +const createOrUpdateOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}", + httpMethod: "PUT", + responses: { + 201: { + bodyMapper: RoleDefinition + }, + default: { + bodyMapper: ErrorResponse + } + }, + requestBody: roleDefinition, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + roleDefinitionId + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$9 +}; +const listOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleDefinitionListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1, filter], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$9 +}; +const getByIdOperationSpec = { + path: "/{roleId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleDefinition + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, roleId], + headerParameters: [accept], + serializer: serializer$9 +}; +const listNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleDefinitionListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$9 +}; + +/* + * 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 containing EligibleChildResources operations. */ +class EligibleChildResourcesImpl { + /** + * Initialize a new instance of the class EligibleChildResources class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Get the child resources of a resource on which user has eligible access + * @param scope The scope of the role management policy. + * @param options The options parameters. + */ + list(scope, options) { + const iter = this.getPagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.getPagingPage(scope, options, settings); + } + }; + } + getPagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* getPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._get(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._getNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + getPagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* getPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.getPagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get the child resources of a resource on which user has eligible access + * @param scope The scope of the role management policy. + * @param options The options parameters. + */ + _get(scope, options) { + return this.client.sendOperationRequest({ scope, options }, getOperationSpec$8); + } + /** + * GetNext + * @param scope The scope of the role management policy. + * @param nextLink The nextLink from the previous successful call to the Get method. + * @param options The options parameters. + */ + _getNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, getNextOperationSpec); + } +} +// Operation Specifications +const serializer$8 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$8 = { + path: "/{scope}/providers/Microsoft.Authorization/eligibleChildResources", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: EligibleChildResourcesListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$8 +}; +const getNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: EligibleChildResourcesListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$8 +}; + +/* + * 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 containing RoleAssignmentSchedules operations. */ +class RoleAssignmentSchedulesImpl { + /** + * Initialize a new instance of the class RoleAssignmentSchedules class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets role assignment schedules for a resource scope. + * @param scope The scope of the role assignments schedules. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get the specified role assignment schedule for a resource scope + * @param scope The scope of the role assignment schedule. + * @param roleAssignmentScheduleName The name (guid) of the role assignment schedule to get. + * @param options The options parameters. + */ + get(scope, roleAssignmentScheduleName, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentScheduleName, options }, getOperationSpec$7); + } + /** + * Gets role assignment schedules for a resource scope. + * @param scope The scope of the role assignments schedules. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$7); + } + /** + * ListForScopeNext + * @param scope The scope of the role assignments schedules. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$7); + } +} +// Operation Specifications +const serializer$7 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$7 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentSchedules/{roleAssignmentScheduleName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentSchedule + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleAssignmentScheduleName + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const listForScopeOperationSpec$7 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentSchedules", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$7 +}; +const listForScopeNextOperationSpec$7 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$7 +}; + +/* + * 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 containing RoleAssignmentScheduleInstances operations. */ +class RoleAssignmentScheduleInstancesImpl { + /** + * Initialize a new instance of the class RoleAssignmentScheduleInstances class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets role assignment schedule instances of a role assignment schedule. + * @param scope The scope of the role assignment schedule. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets role assignment schedule instances of a role assignment schedule. + * @param scope The scope of the role assignment schedule. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$6); + } + /** + * Gets the specified role assignment schedule instance. + * @param scope The scope of the role assignments schedules. + * @param roleAssignmentScheduleInstanceName The name (hash of schedule name + time) of the role + * assignment schedule to get. + * @param options The options parameters. + */ + get(scope, roleAssignmentScheduleInstanceName, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentScheduleInstanceName, options }, getOperationSpec$6); + } + /** + * ListForScopeNext + * @param scope The scope of the role assignment schedule. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$6); + } +} +// Operation Specifications +const serializer$6 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listForScopeOperationSpec$6 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleInstances", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleInstanceListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$6 +}; +const getOperationSpec$6 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleInstances/{roleAssignmentScheduleInstanceName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleInstance + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleAssignmentScheduleInstanceName + ], + headerParameters: [accept], + serializer: serializer$6 +}; +const listForScopeNextOperationSpec$6 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleInstanceListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$6 +}; + +/* + * 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 containing RoleAssignmentScheduleRequests operations. */ +class RoleAssignmentScheduleRequestsImpl { + /** + * Initialize a new instance of the class RoleAssignmentScheduleRequests class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets role assignment schedule requests for a scope. + * @param scope The scope of the role assignments schedule requests. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Creates a role assignment schedule request. + * @param scope The scope of the role assignment schedule request to create. The scope can be any REST + * resource instance. For example, use '/subscriptions/{subscription-id}/' for a subscription, + * '/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}' for a resource group, and + * '/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{resource-provider}/{resource-type}/{resource-name}' + * for a resource. + * @param roleAssignmentScheduleRequestName A GUID for the role assignment to create. The name must be + * unique and different for each role assignment. + * @param parameters Parameters for the role assignment schedule request. + * @param options The options parameters. + */ + create(scope, roleAssignmentScheduleRequestName, parameters, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentScheduleRequestName, parameters, options }, createOperationSpec$2); + } + /** + * Get the specified role assignment schedule request. + * @param scope The scope of the role assignment schedule request. + * @param roleAssignmentScheduleRequestName The name (guid) of the role assignment schedule request to + * get. + * @param options The options parameters. + */ + get(scope, roleAssignmentScheduleRequestName, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentScheduleRequestName, options }, getOperationSpec$5); + } + /** + * Gets role assignment schedule requests for a scope. + * @param scope The scope of the role assignments schedule requests. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$5); + } + /** + * Cancels a pending role assignment schedule request. + * @param scope The scope of the role assignment request to cancel. + * @param roleAssignmentScheduleRequestName The name of the role assignment request to cancel. + * @param options The options parameters. + */ + cancel(scope, roleAssignmentScheduleRequestName, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentScheduleRequestName, options }, cancelOperationSpec$1); + } + /** + * Validates a new role assignment schedule request. + * @param scope The scope of the role assignment request to validate. + * @param roleAssignmentScheduleRequestName The name of the role assignment request to validate. + * @param parameters Parameters for the role assignment schedule request. + * @param options The options parameters. + */ + validate(scope, roleAssignmentScheduleRequestName, parameters, options) { + return this.client.sendOperationRequest({ scope, roleAssignmentScheduleRequestName, parameters, options }, validateOperationSpec$1); + } + /** + * ListForScopeNext + * @param scope The scope of the role assignments schedule requests. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$5); + } +} +// Operation Specifications +const serializer$5 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOperationSpec$2 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/{roleAssignmentScheduleRequestName}", + httpMethod: "PUT", + responses: { + 201: { + bodyMapper: RoleAssignmentScheduleRequest + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters1, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleAssignmentScheduleRequestName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$5 +}; +const getOperationSpec$5 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/{roleAssignmentScheduleRequestName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleRequest + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleAssignmentScheduleRequestName + ], + headerParameters: [accept], + serializer: serializer$5 +}; +const listForScopeOperationSpec$5 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleRequestListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$5 +}; +const cancelOperationSpec$1 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/{roleAssignmentScheduleRequestName}/cancel", + httpMethod: "POST", + responses: { + 200: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleAssignmentScheduleRequestName + ], + headerParameters: [accept], + serializer: serializer$5 +}; +const validateOperationSpec$1 = { + path: "/{scope}/providers/Microsoft.Authorization/roleAssignmentScheduleRequests/{roleAssignmentScheduleRequestName}/validate", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleRequest + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters1, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleAssignmentScheduleRequestName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$5 +}; +const listForScopeNextOperationSpec$5 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleAssignmentScheduleRequestListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$5 +}; + +/* + * 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 containing RoleEligibilitySchedules operations. */ +class RoleEligibilitySchedulesImpl { + /** + * Initialize a new instance of the class RoleEligibilitySchedules class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets role eligibility schedules for a resource scope. + * @param scope The scope of the role eligibility schedules. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get the specified role eligibility schedule for a resource scope + * @param scope The scope of the role eligibility schedule. + * @param roleEligibilityScheduleName The name (guid) of the role eligibility schedule to get. + * @param options The options parameters. + */ + get(scope, roleEligibilityScheduleName, options) { + return this.client.sendOperationRequest({ scope, roleEligibilityScheduleName, options }, getOperationSpec$4); + } + /** + * Gets role eligibility schedules for a resource scope. + * @param scope The scope of the role eligibility schedules. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$4); + } + /** + * ListForScopeNext + * @param scope The scope of the role eligibility schedules. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$4); + } +} +// Operation Specifications +const serializer$4 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$4 = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilitySchedules/{roleEligibilityScheduleName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilitySchedule + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleEligibilityScheduleName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const listForScopeOperationSpec$4 = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilitySchedules", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$4 +}; +const listForScopeNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$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 containing RoleEligibilityScheduleInstances operations. */ +class RoleEligibilityScheduleInstancesImpl { + /** + * Initialize a new instance of the class RoleEligibilityScheduleInstances class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets role eligibility schedule instances of a role eligibility schedule. + * @param scope The scope of the role eligibility schedule. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets role eligibility schedule instances of a role eligibility schedule. + * @param scope The scope of the role eligibility schedule. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$3); + } + /** + * Gets the specified role eligibility schedule instance. + * @param scope The scope of the role eligibility schedules. + * @param roleEligibilityScheduleInstanceName The name (hash of schedule name + time) of the role + * eligibility schedule to get. + * @param options The options parameters. + */ + get(scope, roleEligibilityScheduleInstanceName, options) { + return this.client.sendOperationRequest({ scope, roleEligibilityScheduleInstanceName, options }, getOperationSpec$3); + } + /** + * ListForScopeNext + * @param scope The scope of the role eligibility schedule. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$3); + } +} +// Operation Specifications +const serializer$3 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listForScopeOperationSpec$3 = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilityScheduleInstances", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleInstanceListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$3 +}; +const getOperationSpec$3 = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilityScheduleInstances/{roleEligibilityScheduleInstanceName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleInstance + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleEligibilityScheduleInstanceName + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listForScopeNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleInstanceListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$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 containing RoleEligibilityScheduleRequests operations. */ +class RoleEligibilityScheduleRequestsImpl { + /** + * Initialize a new instance of the class RoleEligibilityScheduleRequests class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets role eligibility schedule requests for a scope. + * @param scope The scope of the role eligibility schedule requests. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Creates a role eligibility schedule request. + * @param scope The scope of the role eligibility schedule request to create. The scope can be any REST + * resource instance. For example, use '/subscriptions/{subscription-id}/' for a subscription, + * '/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}' for a resource group, and + * '/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{resource-provider}/{resource-type}/{resource-name}' + * for a resource. + * @param roleEligibilityScheduleRequestName The name of the role eligibility to create. It can be any + * valid GUID. + * @param parameters Parameters for the role eligibility schedule request. + * @param options The options parameters. + */ + create(scope, roleEligibilityScheduleRequestName, parameters, options) { + return this.client.sendOperationRequest({ scope, roleEligibilityScheduleRequestName, parameters, options }, createOperationSpec$1); + } + /** + * Get the specified role eligibility schedule request. + * @param scope The scope of the role eligibility schedule request. + * @param roleEligibilityScheduleRequestName The name (guid) of the role eligibility schedule request + * to get. + * @param options The options parameters. + */ + get(scope, roleEligibilityScheduleRequestName, options) { + return this.client.sendOperationRequest({ scope, roleEligibilityScheduleRequestName, options }, getOperationSpec$2); + } + /** + * Gets role eligibility schedule requests for a scope. + * @param scope The scope of the role eligibility schedule requests. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$2); + } + /** + * Cancels a pending role eligibility schedule request. + * @param scope The scope of the role eligibility request to cancel. + * @param roleEligibilityScheduleRequestName The name of the role eligibility request to cancel. + * @param options The options parameters. + */ + cancel(scope, roleEligibilityScheduleRequestName, options) { + return this.client.sendOperationRequest({ scope, roleEligibilityScheduleRequestName, options }, cancelOperationSpec); + } + /** + * Validates a new role eligibility schedule request. + * @param scope The scope of the role eligibility request to validate. + * @param roleEligibilityScheduleRequestName The name of the role eligibility request to validate. + * @param parameters Parameters for the role eligibility schedule request. + * @param options The options parameters. + */ + validate(scope, roleEligibilityScheduleRequestName, parameters, options) { + return this.client.sendOperationRequest({ scope, roleEligibilityScheduleRequestName, parameters, options }, validateOperationSpec); + } + /** + * ListForScopeNext + * @param scope The scope of the role eligibility schedule requests. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$2); + } +} +// Operation Specifications +const serializer$2 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOperationSpec$1 = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilityScheduleRequests/{roleEligibilityScheduleRequestName}", + httpMethod: "PUT", + responses: { + 201: { + bodyMapper: RoleEligibilityScheduleRequest + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters2, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleEligibilityScheduleRequestName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2 +}; +const getOperationSpec$2 = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilityScheduleRequests/{roleEligibilityScheduleRequestName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleRequest + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleEligibilityScheduleRequestName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listForScopeOperationSpec$2 = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilityScheduleRequests", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleRequestListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$2 +}; +const cancelOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilityScheduleRequests/{roleEligibilityScheduleRequestName}/cancel", + httpMethod: "POST", + responses: { + 200: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleEligibilityScheduleRequestName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const validateOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleEligibilityScheduleRequests/{roleEligibilityScheduleRequestName}/validate", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleRequest + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters2, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleEligibilityScheduleRequestName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2 +}; +const listForScopeNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleEligibilityScheduleRequestListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$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 containing RoleManagementPolicies operations. */ +class RoleManagementPoliciesImpl { + /** + * Initialize a new instance of the class RoleManagementPolicies class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets role management policies for a resource scope. + * @param scope The scope of the role management policy. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get the specified role management policy for a resource scope + * @param scope The scope of the role management policy. + * @param roleManagementPolicyName The name (guid) of the role management policy to get. + * @param options The options parameters. + */ + get(scope, roleManagementPolicyName, options) { + return this.client.sendOperationRequest({ scope, roleManagementPolicyName, options }, getOperationSpec$1); + } + /** + * Update a role management policy + * @param scope The scope of the role management policy to upsert. + * @param roleManagementPolicyName The name (guid) of the role management policy to upsert. + * @param parameters Parameters for the role management policy. + * @param options The options parameters. + */ + update(scope, roleManagementPolicyName, parameters, options) { + return this.client.sendOperationRequest({ scope, roleManagementPolicyName, parameters, options }, updateOperationSpec); + } + /** + * Delete a role management policy + * @param scope The scope of the role management policy to upsert. + * @param roleManagementPolicyName The name (guid) of the role management policy to upsert. + * @param options The options parameters. + */ + delete(scope, roleManagementPolicyName, options) { + return this.client.sendOperationRequest({ scope, roleManagementPolicyName, options }, deleteOperationSpec$1); + } + /** + * Gets role management policies for a resource scope. + * @param scope The scope of the role management policy. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec$1); + } + /** + * ListForScopeNext + * @param scope The scope of the role management policy. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$1 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$1 = { + path: "/{scope}/providers/Microsoft.Authorization/roleManagementPolicies/{roleManagementPolicyName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleManagementPolicy + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleManagementPolicyName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const updateOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleManagementPolicies/{roleManagementPolicyName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: RoleManagementPolicy + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters3, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleManagementPolicyName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$1 +}; +const deleteOperationSpec$1 = { + path: "/{scope}/providers/Microsoft.Authorization/roleManagementPolicies/{roleManagementPolicyName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleManagementPolicyName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForScopeOperationSpec$1 = { + path: "/{scope}/providers/Microsoft.Authorization/roleManagementPolicies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleManagementPolicyListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForScopeNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleManagementPolicyListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$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 containing RoleManagementPolicyAssignments operations. */ +class RoleManagementPolicyAssignmentsImpl { + /** + * Initialize a new instance of the class RoleManagementPolicyAssignments class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets role management assignment policies for a resource scope. + * @param scope The scope of the role management policy. + * @param options The options parameters. + */ + listForScope(scope, options) { + const iter = this.listForScopePagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForScopePagingPage(scope, options, settings); + } + }; + } + listForScopePagingPage(scope, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForScope(scope, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForScopeNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForScopePagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listForScopePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForScopePagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get the specified role management policy assignment for a resource scope + * @param scope The scope of the role management policy. + * @param roleManagementPolicyAssignmentName The name of format {guid_guid} the role management policy + * assignment to get. + * @param options The options parameters. + */ + get(scope, roleManagementPolicyAssignmentName, options) { + return this.client.sendOperationRequest({ scope, roleManagementPolicyAssignmentName, options }, getOperationSpec); + } + /** + * Create a role management policy assignment + * @param scope The scope of the role management policy assignment to upsert. + * @param roleManagementPolicyAssignmentName The name of format {guid_guid} the role management policy + * assignment to upsert. + * @param parameters Parameters for the role management policy assignment. + * @param options The options parameters. + */ + create(scope, roleManagementPolicyAssignmentName, parameters, options) { + return this.client.sendOperationRequest({ scope, roleManagementPolicyAssignmentName, parameters, options }, createOperationSpec); + } + /** + * Delete a role management policy assignment + * @param scope The scope of the role management policy assignment to delete. + * @param roleManagementPolicyAssignmentName The name of format {guid_guid} the role management policy + * assignment to delete. + * @param options The options parameters. + */ + delete(scope, roleManagementPolicyAssignmentName, options) { + return this.client.sendOperationRequest({ scope, roleManagementPolicyAssignmentName, options }, deleteOperationSpec); + } + /** + * Gets role management assignment policies for a resource scope. + * @param scope The scope of the role management policy. + * @param options The options parameters. + */ + _listForScope(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listForScopeOperationSpec); + } + /** + * ListForScopeNext + * @param scope The scope of the role management policy. + * @param nextLink The nextLink from the previous successful call to the ListForScope method. + * @param options The options parameters. + */ + _listForScopeNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listForScopeNextOperationSpec); + } +} +// Operation Specifications +const serializer = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleManagementPolicyAssignments/{roleManagementPolicyAssignmentName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleManagementPolicyAssignment + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleManagementPolicyAssignmentName + ], + headerParameters: [accept], + serializer +}; +const createOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleManagementPolicyAssignments/{roleManagementPolicyAssignmentName}", + httpMethod: "PUT", + responses: { + 201: { + bodyMapper: RoleManagementPolicyAssignment + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters4, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleManagementPolicyAssignmentName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer +}; +const deleteOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleManagementPolicyAssignments/{roleManagementPolicyAssignmentName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + roleManagementPolicyAssignmentName + ], + headerParameters: [accept], + serializer +}; +const listForScopeOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/roleManagementPolicyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleManagementPolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer +}; +const listForScopeNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleManagementPolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer +}; + +/* + * 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 AuthorizationManagementClient extends coreClient__namespace.ServiceClient { + /** + * Initializes a new instance of the AuthorizationManagementClient class. + * @param credentials Subscription credentials which uniquely identify client subscription. + * @param subscriptionId The ID of the target subscription. + * @param options The parameter options + */ + constructor(credentials, subscriptionId, options) { + var _a, _b, _c; + if (credentials === undefined) { + throw new Error("'credentials' cannot be null"); + } + if (subscriptionId === undefined) { + throw new Error("'subscriptionId' cannot be null"); + } + // Initializing default values for options + if (!options) { + options = {}; + } + const defaults = { + requestContentType: "application/json; charset=utf-8", + credential: credentials + }; + const packageDetails = `azsdk-js-arm-authorization/9.0.0`; + const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix + ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` + : `${packageDetails}`; + const optionsWithDefaults = Object.assign(Object.assign(Object.assign({}, defaults), options), { userAgentOptions: { + userAgentPrefix + }, endpoint: (_b = (_a = options.endpoint) !== null && _a !== void 0 ? _a : options.baseUri) !== null && _b !== void 0 ? _b : "https://management.azure.com" }); + super(optionsWithDefaults); + let bearerTokenAuthenticationPolicyFound = false; + if ((options === null || options === void 0 ? void 0 : options.pipeline) && options.pipeline.getOrderedPolicies().length > 0) { + const pipelinePolicies = options.pipeline.getOrderedPolicies(); + bearerTokenAuthenticationPolicyFound = pipelinePolicies.some((pipelinePolicy) => pipelinePolicy.name === + coreRestPipeline__namespace.bearerTokenAuthenticationPolicyName); + } + if (!options || + !options.pipeline || + options.pipeline.getOrderedPolicies().length == 0 || + !bearerTokenAuthenticationPolicyFound) { + this.pipeline.removePolicy({ + name: coreRestPipeline__namespace.bearerTokenAuthenticationPolicyName + }); + this.pipeline.addPolicy(coreRestPipeline__namespace.bearerTokenAuthenticationPolicy({ + credential: credentials, + scopes: (_c = optionsWithDefaults.credentialScopes) !== null && _c !== void 0 ? _c : `${optionsWithDefaults.endpoint}/.default`, + challengeCallbacks: { + authorizeRequestOnChallenge: coreClient__namespace.authorizeRequestOnClaimChallenge + } + })); + } + // Parameter assignments + this.subscriptionId = subscriptionId; + // Assigning values to Constant parameters + this.$host = options.$host || "https://management.azure.com"; + this.classicAdministrators = new ClassicAdministratorsImpl(this); + this.globalAdministrator = new GlobalAdministratorImpl(this); + this.denyAssignments = new DenyAssignmentsImpl(this); + this.providerOperationsMetadataOperations = new ProviderOperationsMetadataOperationsImpl(this); + this.roleAssignments = new RoleAssignmentsImpl(this); + this.permissions = new PermissionsImpl(this); + this.roleDefinitions = new RoleDefinitionsImpl(this); + this.eligibleChildResources = new EligibleChildResourcesImpl(this); + this.roleAssignmentSchedules = new RoleAssignmentSchedulesImpl(this); + this.roleAssignmentScheduleInstances = new RoleAssignmentScheduleInstancesImpl(this); + this.roleAssignmentScheduleRequests = new RoleAssignmentScheduleRequestsImpl(this); + this.roleEligibilitySchedules = new RoleEligibilitySchedulesImpl(this); + this.roleEligibilityScheduleInstances = new RoleEligibilityScheduleInstancesImpl(this); + this.roleEligibilityScheduleRequests = new RoleEligibilityScheduleRequestsImpl(this); + this.roleManagementPolicies = new RoleManagementPoliciesImpl(this); + this.roleManagementPolicyAssignments = new RoleManagementPolicyAssignmentsImpl(this); + } +} + +exports.AuthorizationManagementClient = AuthorizationManagementClient; +exports.getContinuationToken = getContinuationToken; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 7255: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var coreClient = __nccwpck_require__(160); +var coreRestPipeline = __nccwpck_require__(778); +var tslib = __nccwpck_require__(1860); +var coreLro = __nccwpck_require__(1754); + +function _interopNamespaceDefault(e) { + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n.default = e; + return Object.freeze(n); +} + +var coreClient__namespace = /*#__PURE__*/_interopNamespaceDefault(coreClient); +var coreRestPipeline__namespace = /*#__PURE__*/_interopNamespaceDefault(coreRestPipeline); + +/* + * 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. + */ +const pageMap = new WeakMap(); +/** + * Given the last `.value` produced by the `byPage` iterator, + * returns a continuation token that can be used to begin paging from + * that point later. + * @param page An object from accessing `value` on the IteratorResult from a `byPage` iterator. + * @returns The continuation token that can be passed into byPage() during future calls. + */ +function getContinuationToken(page) { + var _a; + if (typeof page !== "object" || page === null) { + return undefined; + } + return (_a = pageMap.get(page)) === null || _a === void 0 ? void 0 : _a.continuationToken; +} +function setContinuationToken(page, continuationToken) { + var _a; + if (typeof page !== "object" || page === null || !continuationToken) { + return; + } + const pageInfo = (_a = pageMap.get(page)) !== null && _a !== void 0 ? _a : {}; + pageInfo.continuationToken = continuationToken; + pageMap.set(page, pageInfo); +} + +/* + * 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. + */ +/** Known values of {@link RepairAction} that the service accepts. */ +exports.KnownRepairAction = void 0; +(function (KnownRepairAction) { + /** Replace */ + KnownRepairAction["Replace"] = "Replace"; + /** Restart */ + KnownRepairAction["Restart"] = "Restart"; + /** Reimage */ + KnownRepairAction["Reimage"] = "Reimage"; +})(exports.KnownRepairAction || (exports.KnownRepairAction = {})); +/** Known values of {@link WindowsVMGuestPatchMode} that the service accepts. */ +exports.KnownWindowsVMGuestPatchMode = void 0; +(function (KnownWindowsVMGuestPatchMode) { + /** Manual */ + KnownWindowsVMGuestPatchMode["Manual"] = "Manual"; + /** AutomaticByOS */ + KnownWindowsVMGuestPatchMode["AutomaticByOS"] = "AutomaticByOS"; + /** AutomaticByPlatform */ + KnownWindowsVMGuestPatchMode["AutomaticByPlatform"] = "AutomaticByPlatform"; +})(exports.KnownWindowsVMGuestPatchMode || (exports.KnownWindowsVMGuestPatchMode = {})); +/** Known values of {@link WindowsPatchAssessmentMode} that the service accepts. */ +exports.KnownWindowsPatchAssessmentMode = void 0; +(function (KnownWindowsPatchAssessmentMode) { + /** ImageDefault */ + KnownWindowsPatchAssessmentMode["ImageDefault"] = "ImageDefault"; + /** AutomaticByPlatform */ + KnownWindowsPatchAssessmentMode["AutomaticByPlatform"] = "AutomaticByPlatform"; +})(exports.KnownWindowsPatchAssessmentMode || (exports.KnownWindowsPatchAssessmentMode = {})); +/** Known values of {@link WindowsVMGuestPatchAutomaticByPlatformRebootSetting} that the service accepts. */ +exports.KnownWindowsVMGuestPatchAutomaticByPlatformRebootSetting = void 0; +(function (KnownWindowsVMGuestPatchAutomaticByPlatformRebootSetting) { + /** Unknown */ + KnownWindowsVMGuestPatchAutomaticByPlatformRebootSetting["Unknown"] = "Unknown"; + /** IfRequired */ + KnownWindowsVMGuestPatchAutomaticByPlatformRebootSetting["IfRequired"] = "IfRequired"; + /** Never */ + KnownWindowsVMGuestPatchAutomaticByPlatformRebootSetting["Never"] = "Never"; + /** Always */ + KnownWindowsVMGuestPatchAutomaticByPlatformRebootSetting["Always"] = "Always"; +})(exports.KnownWindowsVMGuestPatchAutomaticByPlatformRebootSetting || (exports.KnownWindowsVMGuestPatchAutomaticByPlatformRebootSetting = {})); +/** Known values of {@link LinuxVMGuestPatchMode} that the service accepts. */ +exports.KnownLinuxVMGuestPatchMode = void 0; +(function (KnownLinuxVMGuestPatchMode) { + /** ImageDefault */ + KnownLinuxVMGuestPatchMode["ImageDefault"] = "ImageDefault"; + /** AutomaticByPlatform */ + KnownLinuxVMGuestPatchMode["AutomaticByPlatform"] = "AutomaticByPlatform"; +})(exports.KnownLinuxVMGuestPatchMode || (exports.KnownLinuxVMGuestPatchMode = {})); +/** Known values of {@link LinuxPatchAssessmentMode} that the service accepts. */ +exports.KnownLinuxPatchAssessmentMode = void 0; +(function (KnownLinuxPatchAssessmentMode) { + /** ImageDefault */ + KnownLinuxPatchAssessmentMode["ImageDefault"] = "ImageDefault"; + /** AutomaticByPlatform */ + KnownLinuxPatchAssessmentMode["AutomaticByPlatform"] = "AutomaticByPlatform"; +})(exports.KnownLinuxPatchAssessmentMode || (exports.KnownLinuxPatchAssessmentMode = {})); +/** Known values of {@link LinuxVMGuestPatchAutomaticByPlatformRebootSetting} that the service accepts. */ +exports.KnownLinuxVMGuestPatchAutomaticByPlatformRebootSetting = void 0; +(function (KnownLinuxVMGuestPatchAutomaticByPlatformRebootSetting) { + /** Unknown */ + KnownLinuxVMGuestPatchAutomaticByPlatformRebootSetting["Unknown"] = "Unknown"; + /** IfRequired */ + KnownLinuxVMGuestPatchAutomaticByPlatformRebootSetting["IfRequired"] = "IfRequired"; + /** Never */ + KnownLinuxVMGuestPatchAutomaticByPlatformRebootSetting["Never"] = "Never"; + /** Always */ + KnownLinuxVMGuestPatchAutomaticByPlatformRebootSetting["Always"] = "Always"; +})(exports.KnownLinuxVMGuestPatchAutomaticByPlatformRebootSetting || (exports.KnownLinuxVMGuestPatchAutomaticByPlatformRebootSetting = {})); +/** Known values of {@link DiskCreateOptionTypes} that the service accepts. */ +exports.KnownDiskCreateOptionTypes = void 0; +(function (KnownDiskCreateOptionTypes) { + /** FromImage */ + KnownDiskCreateOptionTypes["FromImage"] = "FromImage"; + /** Empty */ + KnownDiskCreateOptionTypes["Empty"] = "Empty"; + /** Attach */ + KnownDiskCreateOptionTypes["Attach"] = "Attach"; + /** Copy */ + KnownDiskCreateOptionTypes["Copy"] = "Copy"; + /** Restore */ + KnownDiskCreateOptionTypes["Restore"] = "Restore"; +})(exports.KnownDiskCreateOptionTypes || (exports.KnownDiskCreateOptionTypes = {})); +/** Known values of {@link DiffDiskOptions} that the service accepts. */ +exports.KnownDiffDiskOptions = void 0; +(function (KnownDiffDiskOptions) { + /** Local */ + KnownDiffDiskOptions["Local"] = "Local"; +})(exports.KnownDiffDiskOptions || (exports.KnownDiffDiskOptions = {})); +/** Known values of {@link DiffDiskPlacement} that the service accepts. */ +exports.KnownDiffDiskPlacement = void 0; +(function (KnownDiffDiskPlacement) { + /** CacheDisk */ + KnownDiffDiskPlacement["CacheDisk"] = "CacheDisk"; + /** ResourceDisk */ + KnownDiffDiskPlacement["ResourceDisk"] = "ResourceDisk"; + /** NvmeDisk */ + KnownDiffDiskPlacement["NvmeDisk"] = "NvmeDisk"; +})(exports.KnownDiffDiskPlacement || (exports.KnownDiffDiskPlacement = {})); +/** Known values of {@link StorageAccountTypes} that the service accepts. */ +exports.KnownStorageAccountTypes = void 0; +(function (KnownStorageAccountTypes) { + /** StandardLRS */ + KnownStorageAccountTypes["StandardLRS"] = "Standard_LRS"; + /** PremiumLRS */ + KnownStorageAccountTypes["PremiumLRS"] = "Premium_LRS"; + /** StandardSSDLRS */ + KnownStorageAccountTypes["StandardSSDLRS"] = "StandardSSD_LRS"; + /** UltraSSDLRS */ + KnownStorageAccountTypes["UltraSSDLRS"] = "UltraSSD_LRS"; + /** PremiumZRS */ + KnownStorageAccountTypes["PremiumZRS"] = "Premium_ZRS"; + /** StandardSSDZRS */ + KnownStorageAccountTypes["StandardSSDZRS"] = "StandardSSD_ZRS"; + /** PremiumV2LRS */ + KnownStorageAccountTypes["PremiumV2LRS"] = "PremiumV2_LRS"; +})(exports.KnownStorageAccountTypes || (exports.KnownStorageAccountTypes = {})); +/** Known values of {@link SecurityEncryptionTypes} that the service accepts. */ +exports.KnownSecurityEncryptionTypes = void 0; +(function (KnownSecurityEncryptionTypes) { + /** VMGuestStateOnly */ + KnownSecurityEncryptionTypes["VMGuestStateOnly"] = "VMGuestStateOnly"; + /** DiskWithVMGuestState */ + KnownSecurityEncryptionTypes["DiskWithVMGuestState"] = "DiskWithVMGuestState"; + /** NonPersistedTPM */ + KnownSecurityEncryptionTypes["NonPersistedTPM"] = "NonPersistedTPM"; +})(exports.KnownSecurityEncryptionTypes || (exports.KnownSecurityEncryptionTypes = {})); +/** Known values of {@link DiskDeleteOptionTypes} that the service accepts. */ +exports.KnownDiskDeleteOptionTypes = void 0; +(function (KnownDiskDeleteOptionTypes) { + /** Delete */ + KnownDiskDeleteOptionTypes["Delete"] = "Delete"; + /** Detach */ + KnownDiskDeleteOptionTypes["Detach"] = "Detach"; +})(exports.KnownDiskDeleteOptionTypes || (exports.KnownDiskDeleteOptionTypes = {})); +/** Known values of {@link DomainNameLabelScopeTypes} that the service accepts. */ +exports.KnownDomainNameLabelScopeTypes = void 0; +(function (KnownDomainNameLabelScopeTypes) { + /** TenantReuse */ + KnownDomainNameLabelScopeTypes["TenantReuse"] = "TenantReuse"; + /** SubscriptionReuse */ + KnownDomainNameLabelScopeTypes["SubscriptionReuse"] = "SubscriptionReuse"; + /** ResourceGroupReuse */ + KnownDomainNameLabelScopeTypes["ResourceGroupReuse"] = "ResourceGroupReuse"; + /** NoReuse */ + KnownDomainNameLabelScopeTypes["NoReuse"] = "NoReuse"; +})(exports.KnownDomainNameLabelScopeTypes || (exports.KnownDomainNameLabelScopeTypes = {})); +/** Known values of {@link IPVersion} that the service accepts. */ +exports.KnownIPVersion = void 0; +(function (KnownIPVersion) { + /** IPv4 */ + KnownIPVersion["IPv4"] = "IPv4"; + /** IPv6 */ + KnownIPVersion["IPv6"] = "IPv6"; +})(exports.KnownIPVersion || (exports.KnownIPVersion = {})); +/** Known values of {@link DeleteOptions} that the service accepts. */ +exports.KnownDeleteOptions = void 0; +(function (KnownDeleteOptions) { + /** Delete */ + KnownDeleteOptions["Delete"] = "Delete"; + /** Detach */ + KnownDeleteOptions["Detach"] = "Detach"; +})(exports.KnownDeleteOptions || (exports.KnownDeleteOptions = {})); +/** Known values of {@link PublicIPAddressSkuName} that the service accepts. */ +exports.KnownPublicIPAddressSkuName = void 0; +(function (KnownPublicIPAddressSkuName) { + /** Basic */ + KnownPublicIPAddressSkuName["Basic"] = "Basic"; + /** Standard */ + KnownPublicIPAddressSkuName["Standard"] = "Standard"; +})(exports.KnownPublicIPAddressSkuName || (exports.KnownPublicIPAddressSkuName = {})); +/** Known values of {@link PublicIPAddressSkuTier} that the service accepts. */ +exports.KnownPublicIPAddressSkuTier = void 0; +(function (KnownPublicIPAddressSkuTier) { + /** Regional */ + KnownPublicIPAddressSkuTier["Regional"] = "Regional"; + /** Global */ + KnownPublicIPAddressSkuTier["Global"] = "Global"; +})(exports.KnownPublicIPAddressSkuTier || (exports.KnownPublicIPAddressSkuTier = {})); +/** Known values of {@link NetworkInterfaceAuxiliaryMode} that the service accepts. */ +exports.KnownNetworkInterfaceAuxiliaryMode = void 0; +(function (KnownNetworkInterfaceAuxiliaryMode) { + /** None */ + KnownNetworkInterfaceAuxiliaryMode["None"] = "None"; + /** AcceleratedConnections */ + KnownNetworkInterfaceAuxiliaryMode["AcceleratedConnections"] = "AcceleratedConnections"; + /** Floating */ + KnownNetworkInterfaceAuxiliaryMode["Floating"] = "Floating"; +})(exports.KnownNetworkInterfaceAuxiliaryMode || (exports.KnownNetworkInterfaceAuxiliaryMode = {})); +/** Known values of {@link NetworkInterfaceAuxiliarySku} that the service accepts. */ +exports.KnownNetworkInterfaceAuxiliarySku = void 0; +(function (KnownNetworkInterfaceAuxiliarySku) { + /** None */ + KnownNetworkInterfaceAuxiliarySku["None"] = "None"; + /** A1 */ + KnownNetworkInterfaceAuxiliarySku["A1"] = "A1"; + /** A2 */ + KnownNetworkInterfaceAuxiliarySku["A2"] = "A2"; + /** A4 */ + KnownNetworkInterfaceAuxiliarySku["A4"] = "A4"; + /** A8 */ + KnownNetworkInterfaceAuxiliarySku["A8"] = "A8"; +})(exports.KnownNetworkInterfaceAuxiliarySku || (exports.KnownNetworkInterfaceAuxiliarySku = {})); +/** Known values of {@link NetworkApiVersion} that the service accepts. */ +exports.KnownNetworkApiVersion = void 0; +(function (KnownNetworkApiVersion) { + /** TwoThousandTwenty1101 */ + KnownNetworkApiVersion["TwoThousandTwenty1101"] = "2020-11-01"; +})(exports.KnownNetworkApiVersion || (exports.KnownNetworkApiVersion = {})); +/** Known values of {@link SecurityTypes} that the service accepts. */ +exports.KnownSecurityTypes = void 0; +(function (KnownSecurityTypes) { + /** TrustedLaunch */ + KnownSecurityTypes["TrustedLaunch"] = "TrustedLaunch"; + /** ConfidentialVM */ + KnownSecurityTypes["ConfidentialVM"] = "ConfidentialVM"; +})(exports.KnownSecurityTypes || (exports.KnownSecurityTypes = {})); +/** Known values of {@link Mode} that the service accepts. */ +exports.KnownMode = void 0; +(function (KnownMode) { + /** Audit */ + KnownMode["Audit"] = "Audit"; + /** Enforce */ + KnownMode["Enforce"] = "Enforce"; +})(exports.KnownMode || (exports.KnownMode = {})); +/** Known values of {@link VirtualMachinePriorityTypes} that the service accepts. */ +exports.KnownVirtualMachinePriorityTypes = void 0; +(function (KnownVirtualMachinePriorityTypes) { + /** Regular */ + KnownVirtualMachinePriorityTypes["Regular"] = "Regular"; + /** Low */ + KnownVirtualMachinePriorityTypes["Low"] = "Low"; + /** Spot */ + KnownVirtualMachinePriorityTypes["Spot"] = "Spot"; +})(exports.KnownVirtualMachinePriorityTypes || (exports.KnownVirtualMachinePriorityTypes = {})); +/** Known values of {@link VirtualMachineEvictionPolicyTypes} that the service accepts. */ +exports.KnownVirtualMachineEvictionPolicyTypes = void 0; +(function (KnownVirtualMachineEvictionPolicyTypes) { + /** Deallocate */ + KnownVirtualMachineEvictionPolicyTypes["Deallocate"] = "Deallocate"; + /** Delete */ + KnownVirtualMachineEvictionPolicyTypes["Delete"] = "Delete"; +})(exports.KnownVirtualMachineEvictionPolicyTypes || (exports.KnownVirtualMachineEvictionPolicyTypes = {})); +/** Known values of {@link VirtualMachineScaleSetScaleInRules} that the service accepts. */ +exports.KnownVirtualMachineScaleSetScaleInRules = void 0; +(function (KnownVirtualMachineScaleSetScaleInRules) { + /** Default */ + KnownVirtualMachineScaleSetScaleInRules["Default"] = "Default"; + /** OldestVM */ + KnownVirtualMachineScaleSetScaleInRules["OldestVM"] = "OldestVM"; + /** NewestVM */ + KnownVirtualMachineScaleSetScaleInRules["NewestVM"] = "NewestVM"; +})(exports.KnownVirtualMachineScaleSetScaleInRules || (exports.KnownVirtualMachineScaleSetScaleInRules = {})); +/** Known values of {@link OrchestrationMode} that the service accepts. */ +exports.KnownOrchestrationMode = void 0; +(function (KnownOrchestrationMode) { + /** Uniform */ + KnownOrchestrationMode["Uniform"] = "Uniform"; + /** Flexible */ + KnownOrchestrationMode["Flexible"] = "Flexible"; +})(exports.KnownOrchestrationMode || (exports.KnownOrchestrationMode = {})); +/** Known values of {@link ZonalPlatformFaultDomainAlignMode} that the service accepts. */ +exports.KnownZonalPlatformFaultDomainAlignMode = void 0; +(function (KnownZonalPlatformFaultDomainAlignMode) { + /** Aligned */ + KnownZonalPlatformFaultDomainAlignMode["Aligned"] = "Aligned"; + /** Unaligned */ + KnownZonalPlatformFaultDomainAlignMode["Unaligned"] = "Unaligned"; +})(exports.KnownZonalPlatformFaultDomainAlignMode || (exports.KnownZonalPlatformFaultDomainAlignMode = {})); +/** Known values of {@link AllocationStrategy} that the service accepts. */ +exports.KnownAllocationStrategy = void 0; +(function (KnownAllocationStrategy) { + /** LowestPrice */ + KnownAllocationStrategy["LowestPrice"] = "LowestPrice"; + /** CapacityOptimized */ + KnownAllocationStrategy["CapacityOptimized"] = "CapacityOptimized"; +})(exports.KnownAllocationStrategy || (exports.KnownAllocationStrategy = {})); +/** Known values of {@link ExtendedLocationTypes} that the service accepts. */ +exports.KnownExtendedLocationTypes = void 0; +(function (KnownExtendedLocationTypes) { + /** EdgeZone */ + KnownExtendedLocationTypes["EdgeZone"] = "EdgeZone"; +})(exports.KnownExtendedLocationTypes || (exports.KnownExtendedLocationTypes = {})); +/** Known values of {@link ExpandTypesForGetVMScaleSets} that the service accepts. */ +exports.KnownExpandTypesForGetVMScaleSets = void 0; +(function (KnownExpandTypesForGetVMScaleSets) { + /** UserData */ + KnownExpandTypesForGetVMScaleSets["UserData"] = "userData"; +})(exports.KnownExpandTypesForGetVMScaleSets || (exports.KnownExpandTypesForGetVMScaleSets = {})); +/** Known values of {@link OrchestrationServiceNames} that the service accepts. */ +exports.KnownOrchestrationServiceNames = void 0; +(function (KnownOrchestrationServiceNames) { + /** AutomaticRepairs */ + KnownOrchestrationServiceNames["AutomaticRepairs"] = "AutomaticRepairs"; + /** DummyOrchestrationServiceName */ + KnownOrchestrationServiceNames["DummyOrchestrationServiceName"] = "DummyOrchestrationServiceName"; +})(exports.KnownOrchestrationServiceNames || (exports.KnownOrchestrationServiceNames = {})); +/** Known values of {@link OrchestrationServiceState} that the service accepts. */ +exports.KnownOrchestrationServiceState = void 0; +(function (KnownOrchestrationServiceState) { + /** NotRunning */ + KnownOrchestrationServiceState["NotRunning"] = "NotRunning"; + /** Running */ + KnownOrchestrationServiceState["Running"] = "Running"; + /** Suspended */ + KnownOrchestrationServiceState["Suspended"] = "Suspended"; +})(exports.KnownOrchestrationServiceState || (exports.KnownOrchestrationServiceState = {})); +/** Known values of {@link OrchestrationServiceStateAction} that the service accepts. */ +exports.KnownOrchestrationServiceStateAction = void 0; +(function (KnownOrchestrationServiceStateAction) { + /** Resume */ + KnownOrchestrationServiceStateAction["Resume"] = "Resume"; + /** Suspend */ + KnownOrchestrationServiceStateAction["Suspend"] = "Suspend"; +})(exports.KnownOrchestrationServiceStateAction || (exports.KnownOrchestrationServiceStateAction = {})); +/** Known values of {@link HyperVGeneration} that the service accepts. */ +exports.KnownHyperVGeneration = void 0; +(function (KnownHyperVGeneration) { + /** V1 */ + KnownHyperVGeneration["V1"] = "V1"; + /** V2 */ + KnownHyperVGeneration["V2"] = "V2"; +})(exports.KnownHyperVGeneration || (exports.KnownHyperVGeneration = {})); +/** Known values of {@link VirtualMachineSizeTypes} that the service accepts. */ +exports.KnownVirtualMachineSizeTypes = void 0; +(function (KnownVirtualMachineSizeTypes) { + /** BasicA0 */ + KnownVirtualMachineSizeTypes["BasicA0"] = "Basic_A0"; + /** BasicA1 */ + KnownVirtualMachineSizeTypes["BasicA1"] = "Basic_A1"; + /** BasicA2 */ + KnownVirtualMachineSizeTypes["BasicA2"] = "Basic_A2"; + /** BasicA3 */ + KnownVirtualMachineSizeTypes["BasicA3"] = "Basic_A3"; + /** BasicA4 */ + KnownVirtualMachineSizeTypes["BasicA4"] = "Basic_A4"; + /** StandardA0 */ + KnownVirtualMachineSizeTypes["StandardA0"] = "Standard_A0"; + /** StandardA1 */ + KnownVirtualMachineSizeTypes["StandardA1"] = "Standard_A1"; + /** StandardA2 */ + KnownVirtualMachineSizeTypes["StandardA2"] = "Standard_A2"; + /** StandardA3 */ + KnownVirtualMachineSizeTypes["StandardA3"] = "Standard_A3"; + /** StandardA4 */ + KnownVirtualMachineSizeTypes["StandardA4"] = "Standard_A4"; + /** StandardA5 */ + KnownVirtualMachineSizeTypes["StandardA5"] = "Standard_A5"; + /** StandardA6 */ + KnownVirtualMachineSizeTypes["StandardA6"] = "Standard_A6"; + /** StandardA7 */ + KnownVirtualMachineSizeTypes["StandardA7"] = "Standard_A7"; + /** StandardA8 */ + KnownVirtualMachineSizeTypes["StandardA8"] = "Standard_A8"; + /** StandardA9 */ + KnownVirtualMachineSizeTypes["StandardA9"] = "Standard_A9"; + /** StandardA10 */ + KnownVirtualMachineSizeTypes["StandardA10"] = "Standard_A10"; + /** StandardA11 */ + KnownVirtualMachineSizeTypes["StandardA11"] = "Standard_A11"; + /** StandardA1V2 */ + KnownVirtualMachineSizeTypes["StandardA1V2"] = "Standard_A1_v2"; + /** StandardA2V2 */ + KnownVirtualMachineSizeTypes["StandardA2V2"] = "Standard_A2_v2"; + /** StandardA4V2 */ + KnownVirtualMachineSizeTypes["StandardA4V2"] = "Standard_A4_v2"; + /** StandardA8V2 */ + KnownVirtualMachineSizeTypes["StandardA8V2"] = "Standard_A8_v2"; + /** StandardA2MV2 */ + KnownVirtualMachineSizeTypes["StandardA2MV2"] = "Standard_A2m_v2"; + /** StandardA4MV2 */ + KnownVirtualMachineSizeTypes["StandardA4MV2"] = "Standard_A4m_v2"; + /** StandardA8MV2 */ + KnownVirtualMachineSizeTypes["StandardA8MV2"] = "Standard_A8m_v2"; + /** StandardB1S */ + KnownVirtualMachineSizeTypes["StandardB1S"] = "Standard_B1s"; + /** StandardB1Ms */ + KnownVirtualMachineSizeTypes["StandardB1Ms"] = "Standard_B1ms"; + /** StandardB2S */ + KnownVirtualMachineSizeTypes["StandardB2S"] = "Standard_B2s"; + /** StandardB2Ms */ + KnownVirtualMachineSizeTypes["StandardB2Ms"] = "Standard_B2ms"; + /** StandardB4Ms */ + KnownVirtualMachineSizeTypes["StandardB4Ms"] = "Standard_B4ms"; + /** StandardB8Ms */ + KnownVirtualMachineSizeTypes["StandardB8Ms"] = "Standard_B8ms"; + /** StandardD1 */ + KnownVirtualMachineSizeTypes["StandardD1"] = "Standard_D1"; + /** StandardD2 */ + KnownVirtualMachineSizeTypes["StandardD2"] = "Standard_D2"; + /** StandardD3 */ + KnownVirtualMachineSizeTypes["StandardD3"] = "Standard_D3"; + /** StandardD4 */ + KnownVirtualMachineSizeTypes["StandardD4"] = "Standard_D4"; + /** StandardD11 */ + KnownVirtualMachineSizeTypes["StandardD11"] = "Standard_D11"; + /** StandardD12 */ + KnownVirtualMachineSizeTypes["StandardD12"] = "Standard_D12"; + /** StandardD13 */ + KnownVirtualMachineSizeTypes["StandardD13"] = "Standard_D13"; + /** StandardD14 */ + KnownVirtualMachineSizeTypes["StandardD14"] = "Standard_D14"; + /** StandardD1V2 */ + KnownVirtualMachineSizeTypes["StandardD1V2"] = "Standard_D1_v2"; + /** StandardD2V2 */ + KnownVirtualMachineSizeTypes["StandardD2V2"] = "Standard_D2_v2"; + /** StandardD3V2 */ + KnownVirtualMachineSizeTypes["StandardD3V2"] = "Standard_D3_v2"; + /** StandardD4V2 */ + KnownVirtualMachineSizeTypes["StandardD4V2"] = "Standard_D4_v2"; + /** StandardD5V2 */ + KnownVirtualMachineSizeTypes["StandardD5V2"] = "Standard_D5_v2"; + /** StandardD2V3 */ + KnownVirtualMachineSizeTypes["StandardD2V3"] = "Standard_D2_v3"; + /** StandardD4V3 */ + KnownVirtualMachineSizeTypes["StandardD4V3"] = "Standard_D4_v3"; + /** StandardD8V3 */ + KnownVirtualMachineSizeTypes["StandardD8V3"] = "Standard_D8_v3"; + /** StandardD16V3 */ + KnownVirtualMachineSizeTypes["StandardD16V3"] = "Standard_D16_v3"; + /** StandardD32V3 */ + KnownVirtualMachineSizeTypes["StandardD32V3"] = "Standard_D32_v3"; + /** StandardD64V3 */ + KnownVirtualMachineSizeTypes["StandardD64V3"] = "Standard_D64_v3"; + /** StandardD2SV3 */ + KnownVirtualMachineSizeTypes["StandardD2SV3"] = "Standard_D2s_v3"; + /** StandardD4SV3 */ + KnownVirtualMachineSizeTypes["StandardD4SV3"] = "Standard_D4s_v3"; + /** StandardD8SV3 */ + KnownVirtualMachineSizeTypes["StandardD8SV3"] = "Standard_D8s_v3"; + /** StandardD16SV3 */ + KnownVirtualMachineSizeTypes["StandardD16SV3"] = "Standard_D16s_v3"; + /** StandardD32SV3 */ + KnownVirtualMachineSizeTypes["StandardD32SV3"] = "Standard_D32s_v3"; + /** StandardD64SV3 */ + KnownVirtualMachineSizeTypes["StandardD64SV3"] = "Standard_D64s_v3"; + /** StandardD11V2 */ + KnownVirtualMachineSizeTypes["StandardD11V2"] = "Standard_D11_v2"; + /** StandardD12V2 */ + KnownVirtualMachineSizeTypes["StandardD12V2"] = "Standard_D12_v2"; + /** StandardD13V2 */ + KnownVirtualMachineSizeTypes["StandardD13V2"] = "Standard_D13_v2"; + /** StandardD14V2 */ + KnownVirtualMachineSizeTypes["StandardD14V2"] = "Standard_D14_v2"; + /** StandardD15V2 */ + KnownVirtualMachineSizeTypes["StandardD15V2"] = "Standard_D15_v2"; + /** StandardDS1 */ + KnownVirtualMachineSizeTypes["StandardDS1"] = "Standard_DS1"; + /** StandardDS2 */ + KnownVirtualMachineSizeTypes["StandardDS2"] = "Standard_DS2"; + /** StandardDS3 */ + KnownVirtualMachineSizeTypes["StandardDS3"] = "Standard_DS3"; + /** StandardDS4 */ + KnownVirtualMachineSizeTypes["StandardDS4"] = "Standard_DS4"; + /** StandardDS11 */ + KnownVirtualMachineSizeTypes["StandardDS11"] = "Standard_DS11"; + /** StandardDS12 */ + KnownVirtualMachineSizeTypes["StandardDS12"] = "Standard_DS12"; + /** StandardDS13 */ + KnownVirtualMachineSizeTypes["StandardDS13"] = "Standard_DS13"; + /** StandardDS14 */ + KnownVirtualMachineSizeTypes["StandardDS14"] = "Standard_DS14"; + /** StandardDS1V2 */ + KnownVirtualMachineSizeTypes["StandardDS1V2"] = "Standard_DS1_v2"; + /** StandardDS2V2 */ + KnownVirtualMachineSizeTypes["StandardDS2V2"] = "Standard_DS2_v2"; + /** StandardDS3V2 */ + KnownVirtualMachineSizeTypes["StandardDS3V2"] = "Standard_DS3_v2"; + /** StandardDS4V2 */ + KnownVirtualMachineSizeTypes["StandardDS4V2"] = "Standard_DS4_v2"; + /** StandardDS5V2 */ + KnownVirtualMachineSizeTypes["StandardDS5V2"] = "Standard_DS5_v2"; + /** StandardDS11V2 */ + KnownVirtualMachineSizeTypes["StandardDS11V2"] = "Standard_DS11_v2"; + /** StandardDS12V2 */ + KnownVirtualMachineSizeTypes["StandardDS12V2"] = "Standard_DS12_v2"; + /** StandardDS13V2 */ + KnownVirtualMachineSizeTypes["StandardDS13V2"] = "Standard_DS13_v2"; + /** StandardDS14V2 */ + KnownVirtualMachineSizeTypes["StandardDS14V2"] = "Standard_DS14_v2"; + /** StandardDS15V2 */ + KnownVirtualMachineSizeTypes["StandardDS15V2"] = "Standard_DS15_v2"; + /** StandardDS134V2 */ + KnownVirtualMachineSizeTypes["StandardDS134V2"] = "Standard_DS13-4_v2"; + /** StandardDS132V2 */ + KnownVirtualMachineSizeTypes["StandardDS132V2"] = "Standard_DS13-2_v2"; + /** StandardDS148V2 */ + KnownVirtualMachineSizeTypes["StandardDS148V2"] = "Standard_DS14-8_v2"; + /** StandardDS144V2 */ + KnownVirtualMachineSizeTypes["StandardDS144V2"] = "Standard_DS14-4_v2"; + /** StandardE2V3 */ + KnownVirtualMachineSizeTypes["StandardE2V3"] = "Standard_E2_v3"; + /** StandardE4V3 */ + KnownVirtualMachineSizeTypes["StandardE4V3"] = "Standard_E4_v3"; + /** StandardE8V3 */ + KnownVirtualMachineSizeTypes["StandardE8V3"] = "Standard_E8_v3"; + /** StandardE16V3 */ + KnownVirtualMachineSizeTypes["StandardE16V3"] = "Standard_E16_v3"; + /** StandardE32V3 */ + KnownVirtualMachineSizeTypes["StandardE32V3"] = "Standard_E32_v3"; + /** StandardE64V3 */ + KnownVirtualMachineSizeTypes["StandardE64V3"] = "Standard_E64_v3"; + /** StandardE2SV3 */ + KnownVirtualMachineSizeTypes["StandardE2SV3"] = "Standard_E2s_v3"; + /** StandardE4SV3 */ + KnownVirtualMachineSizeTypes["StandardE4SV3"] = "Standard_E4s_v3"; + /** StandardE8SV3 */ + KnownVirtualMachineSizeTypes["StandardE8SV3"] = "Standard_E8s_v3"; + /** StandardE16SV3 */ + KnownVirtualMachineSizeTypes["StandardE16SV3"] = "Standard_E16s_v3"; + /** StandardE32SV3 */ + KnownVirtualMachineSizeTypes["StandardE32SV3"] = "Standard_E32s_v3"; + /** StandardE64SV3 */ + KnownVirtualMachineSizeTypes["StandardE64SV3"] = "Standard_E64s_v3"; + /** StandardE3216V3 */ + KnownVirtualMachineSizeTypes["StandardE3216V3"] = "Standard_E32-16_v3"; + /** StandardE328SV3 */ + KnownVirtualMachineSizeTypes["StandardE328SV3"] = "Standard_E32-8s_v3"; + /** StandardE6432SV3 */ + KnownVirtualMachineSizeTypes["StandardE6432SV3"] = "Standard_E64-32s_v3"; + /** StandardE6416SV3 */ + KnownVirtualMachineSizeTypes["StandardE6416SV3"] = "Standard_E64-16s_v3"; + /** StandardF1 */ + KnownVirtualMachineSizeTypes["StandardF1"] = "Standard_F1"; + /** StandardF2 */ + KnownVirtualMachineSizeTypes["StandardF2"] = "Standard_F2"; + /** StandardF4 */ + KnownVirtualMachineSizeTypes["StandardF4"] = "Standard_F4"; + /** StandardF8 */ + KnownVirtualMachineSizeTypes["StandardF8"] = "Standard_F8"; + /** StandardF16 */ + KnownVirtualMachineSizeTypes["StandardF16"] = "Standard_F16"; + /** StandardF1S */ + KnownVirtualMachineSizeTypes["StandardF1S"] = "Standard_F1s"; + /** StandardF2S */ + KnownVirtualMachineSizeTypes["StandardF2S"] = "Standard_F2s"; + /** StandardF4S */ + KnownVirtualMachineSizeTypes["StandardF4S"] = "Standard_F4s"; + /** StandardF8S */ + KnownVirtualMachineSizeTypes["StandardF8S"] = "Standard_F8s"; + /** StandardF16S */ + KnownVirtualMachineSizeTypes["StandardF16S"] = "Standard_F16s"; + /** StandardF2SV2 */ + KnownVirtualMachineSizeTypes["StandardF2SV2"] = "Standard_F2s_v2"; + /** StandardF4SV2 */ + KnownVirtualMachineSizeTypes["StandardF4SV2"] = "Standard_F4s_v2"; + /** StandardF8SV2 */ + KnownVirtualMachineSizeTypes["StandardF8SV2"] = "Standard_F8s_v2"; + /** StandardF16SV2 */ + KnownVirtualMachineSizeTypes["StandardF16SV2"] = "Standard_F16s_v2"; + /** StandardF32SV2 */ + KnownVirtualMachineSizeTypes["StandardF32SV2"] = "Standard_F32s_v2"; + /** StandardF64SV2 */ + KnownVirtualMachineSizeTypes["StandardF64SV2"] = "Standard_F64s_v2"; + /** StandardF72SV2 */ + KnownVirtualMachineSizeTypes["StandardF72SV2"] = "Standard_F72s_v2"; + /** StandardG1 */ + KnownVirtualMachineSizeTypes["StandardG1"] = "Standard_G1"; + /** StandardG2 */ + KnownVirtualMachineSizeTypes["StandardG2"] = "Standard_G2"; + /** StandardG3 */ + KnownVirtualMachineSizeTypes["StandardG3"] = "Standard_G3"; + /** StandardG4 */ + KnownVirtualMachineSizeTypes["StandardG4"] = "Standard_G4"; + /** StandardG5 */ + KnownVirtualMachineSizeTypes["StandardG5"] = "Standard_G5"; + /** StandardGS1 */ + KnownVirtualMachineSizeTypes["StandardGS1"] = "Standard_GS1"; + /** StandardGS2 */ + KnownVirtualMachineSizeTypes["StandardGS2"] = "Standard_GS2"; + /** StandardGS3 */ + KnownVirtualMachineSizeTypes["StandardGS3"] = "Standard_GS3"; + /** StandardGS4 */ + KnownVirtualMachineSizeTypes["StandardGS4"] = "Standard_GS4"; + /** StandardGS5 */ + KnownVirtualMachineSizeTypes["StandardGS5"] = "Standard_GS5"; + /** StandardGS48 */ + KnownVirtualMachineSizeTypes["StandardGS48"] = "Standard_GS4-8"; + /** StandardGS44 */ + KnownVirtualMachineSizeTypes["StandardGS44"] = "Standard_GS4-4"; + /** StandardGS516 */ + KnownVirtualMachineSizeTypes["StandardGS516"] = "Standard_GS5-16"; + /** StandardGS58 */ + KnownVirtualMachineSizeTypes["StandardGS58"] = "Standard_GS5-8"; + /** StandardH8 */ + KnownVirtualMachineSizeTypes["StandardH8"] = "Standard_H8"; + /** StandardH16 */ + KnownVirtualMachineSizeTypes["StandardH16"] = "Standard_H16"; + /** StandardH8M */ + KnownVirtualMachineSizeTypes["StandardH8M"] = "Standard_H8m"; + /** StandardH16M */ + KnownVirtualMachineSizeTypes["StandardH16M"] = "Standard_H16m"; + /** StandardH16R */ + KnownVirtualMachineSizeTypes["StandardH16R"] = "Standard_H16r"; + /** StandardH16Mr */ + KnownVirtualMachineSizeTypes["StandardH16Mr"] = "Standard_H16mr"; + /** StandardL4S */ + KnownVirtualMachineSizeTypes["StandardL4S"] = "Standard_L4s"; + /** StandardL8S */ + KnownVirtualMachineSizeTypes["StandardL8S"] = "Standard_L8s"; + /** StandardL16S */ + KnownVirtualMachineSizeTypes["StandardL16S"] = "Standard_L16s"; + /** StandardL32S */ + KnownVirtualMachineSizeTypes["StandardL32S"] = "Standard_L32s"; + /** StandardM64S */ + KnownVirtualMachineSizeTypes["StandardM64S"] = "Standard_M64s"; + /** StandardM64Ms */ + KnownVirtualMachineSizeTypes["StandardM64Ms"] = "Standard_M64ms"; + /** StandardM128S */ + KnownVirtualMachineSizeTypes["StandardM128S"] = "Standard_M128s"; + /** StandardM128Ms */ + KnownVirtualMachineSizeTypes["StandardM128Ms"] = "Standard_M128ms"; + /** StandardM6432Ms */ + KnownVirtualMachineSizeTypes["StandardM6432Ms"] = "Standard_M64-32ms"; + /** StandardM6416Ms */ + KnownVirtualMachineSizeTypes["StandardM6416Ms"] = "Standard_M64-16ms"; + /** StandardM12864Ms */ + KnownVirtualMachineSizeTypes["StandardM12864Ms"] = "Standard_M128-64ms"; + /** StandardM12832Ms */ + KnownVirtualMachineSizeTypes["StandardM12832Ms"] = "Standard_M128-32ms"; + /** StandardNC6 */ + KnownVirtualMachineSizeTypes["StandardNC6"] = "Standard_NC6"; + /** StandardNC12 */ + KnownVirtualMachineSizeTypes["StandardNC12"] = "Standard_NC12"; + /** StandardNC24 */ + KnownVirtualMachineSizeTypes["StandardNC24"] = "Standard_NC24"; + /** StandardNC24R */ + KnownVirtualMachineSizeTypes["StandardNC24R"] = "Standard_NC24r"; + /** StandardNC6SV2 */ + KnownVirtualMachineSizeTypes["StandardNC6SV2"] = "Standard_NC6s_v2"; + /** StandardNC12SV2 */ + KnownVirtualMachineSizeTypes["StandardNC12SV2"] = "Standard_NC12s_v2"; + /** StandardNC24SV2 */ + KnownVirtualMachineSizeTypes["StandardNC24SV2"] = "Standard_NC24s_v2"; + /** StandardNC24RsV2 */ + KnownVirtualMachineSizeTypes["StandardNC24RsV2"] = "Standard_NC24rs_v2"; + /** StandardNC6SV3 */ + KnownVirtualMachineSizeTypes["StandardNC6SV3"] = "Standard_NC6s_v3"; + /** StandardNC12SV3 */ + KnownVirtualMachineSizeTypes["StandardNC12SV3"] = "Standard_NC12s_v3"; + /** StandardNC24SV3 */ + KnownVirtualMachineSizeTypes["StandardNC24SV3"] = "Standard_NC24s_v3"; + /** StandardNC24RsV3 */ + KnownVirtualMachineSizeTypes["StandardNC24RsV3"] = "Standard_NC24rs_v3"; + /** StandardND6S */ + KnownVirtualMachineSizeTypes["StandardND6S"] = "Standard_ND6s"; + /** StandardND12S */ + KnownVirtualMachineSizeTypes["StandardND12S"] = "Standard_ND12s"; + /** StandardND24S */ + KnownVirtualMachineSizeTypes["StandardND24S"] = "Standard_ND24s"; + /** StandardND24Rs */ + KnownVirtualMachineSizeTypes["StandardND24Rs"] = "Standard_ND24rs"; + /** StandardNV6 */ + KnownVirtualMachineSizeTypes["StandardNV6"] = "Standard_NV6"; + /** StandardNV12 */ + KnownVirtualMachineSizeTypes["StandardNV12"] = "Standard_NV12"; + /** StandardNV24 */ + KnownVirtualMachineSizeTypes["StandardNV24"] = "Standard_NV24"; +})(exports.KnownVirtualMachineSizeTypes || (exports.KnownVirtualMachineSizeTypes = {})); +/** Known values of {@link DiskDetachOptionTypes} that the service accepts. */ +exports.KnownDiskDetachOptionTypes = void 0; +(function (KnownDiskDetachOptionTypes) { + /** ForceDetach */ + KnownDiskDetachOptionTypes["ForceDetach"] = "ForceDetach"; +})(exports.KnownDiskDetachOptionTypes || (exports.KnownDiskDetachOptionTypes = {})); +/** Known values of {@link DiskControllerTypes} that the service accepts. */ +exports.KnownDiskControllerTypes = void 0; +(function (KnownDiskControllerTypes) { + /** Scsi */ + KnownDiskControllerTypes["Scsi"] = "SCSI"; + /** NVMe */ + KnownDiskControllerTypes["NVMe"] = "NVMe"; +})(exports.KnownDiskControllerTypes || (exports.KnownDiskControllerTypes = {})); +/** Known values of {@link IPVersions} that the service accepts. */ +exports.KnownIPVersions = void 0; +(function (KnownIPVersions) { + /** IPv4 */ + KnownIPVersions["IPv4"] = "IPv4"; + /** IPv6 */ + KnownIPVersions["IPv6"] = "IPv6"; +})(exports.KnownIPVersions || (exports.KnownIPVersions = {})); +/** Known values of {@link PublicIPAllocationMethod} that the service accepts. */ +exports.KnownPublicIPAllocationMethod = void 0; +(function (KnownPublicIPAllocationMethod) { + /** Dynamic */ + KnownPublicIPAllocationMethod["Dynamic"] = "Dynamic"; + /** Static */ + KnownPublicIPAllocationMethod["Static"] = "Static"; +})(exports.KnownPublicIPAllocationMethod || (exports.KnownPublicIPAllocationMethod = {})); +/** Known values of {@link HyperVGenerationType} that the service accepts. */ +exports.KnownHyperVGenerationType = void 0; +(function (KnownHyperVGenerationType) { + /** V1 */ + KnownHyperVGenerationType["V1"] = "V1"; + /** V2 */ + KnownHyperVGenerationType["V2"] = "V2"; +})(exports.KnownHyperVGenerationType || (exports.KnownHyperVGenerationType = {})); +/** Known values of {@link PatchOperationStatus} that the service accepts. */ +exports.KnownPatchOperationStatus = void 0; +(function (KnownPatchOperationStatus) { + /** Unknown */ + KnownPatchOperationStatus["Unknown"] = "Unknown"; + /** InProgress */ + KnownPatchOperationStatus["InProgress"] = "InProgress"; + /** Failed */ + KnownPatchOperationStatus["Failed"] = "Failed"; + /** Succeeded */ + KnownPatchOperationStatus["Succeeded"] = "Succeeded"; + /** CompletedWithWarnings */ + KnownPatchOperationStatus["CompletedWithWarnings"] = "CompletedWithWarnings"; +})(exports.KnownPatchOperationStatus || (exports.KnownPatchOperationStatus = {})); +/** Known values of {@link ExpandTypeForListVMs} that the service accepts. */ +exports.KnownExpandTypeForListVMs = void 0; +(function (KnownExpandTypeForListVMs) { + /** InstanceView */ + KnownExpandTypeForListVMs["InstanceView"] = "instanceView"; +})(exports.KnownExpandTypeForListVMs || (exports.KnownExpandTypeForListVMs = {})); +/** Known values of {@link ExpandTypesForListVMs} that the service accepts. */ +exports.KnownExpandTypesForListVMs = void 0; +(function (KnownExpandTypesForListVMs) { + /** InstanceView */ + KnownExpandTypesForListVMs["InstanceView"] = "instanceView"; +})(exports.KnownExpandTypesForListVMs || (exports.KnownExpandTypesForListVMs = {})); +/** Known values of {@link VMGuestPatchRebootBehavior} that the service accepts. */ +exports.KnownVMGuestPatchRebootBehavior = void 0; +(function (KnownVMGuestPatchRebootBehavior) { + /** Unknown */ + KnownVMGuestPatchRebootBehavior["Unknown"] = "Unknown"; + /** NeverReboots */ + KnownVMGuestPatchRebootBehavior["NeverReboots"] = "NeverReboots"; + /** AlwaysRequiresReboot */ + KnownVMGuestPatchRebootBehavior["AlwaysRequiresReboot"] = "AlwaysRequiresReboot"; + /** CanRequestReboot */ + KnownVMGuestPatchRebootBehavior["CanRequestReboot"] = "CanRequestReboot"; +})(exports.KnownVMGuestPatchRebootBehavior || (exports.KnownVMGuestPatchRebootBehavior = {})); +/** Known values of {@link PatchAssessmentState} that the service accepts. */ +exports.KnownPatchAssessmentState = void 0; +(function (KnownPatchAssessmentState) { + /** Unknown */ + KnownPatchAssessmentState["Unknown"] = "Unknown"; + /** Available */ + KnownPatchAssessmentState["Available"] = "Available"; +})(exports.KnownPatchAssessmentState || (exports.KnownPatchAssessmentState = {})); +/** Known values of {@link VMGuestPatchRebootSetting} that the service accepts. */ +exports.KnownVMGuestPatchRebootSetting = void 0; +(function (KnownVMGuestPatchRebootSetting) { + /** IfRequired */ + KnownVMGuestPatchRebootSetting["IfRequired"] = "IfRequired"; + /** Never */ + KnownVMGuestPatchRebootSetting["Never"] = "Never"; + /** Always */ + KnownVMGuestPatchRebootSetting["Always"] = "Always"; +})(exports.KnownVMGuestPatchRebootSetting || (exports.KnownVMGuestPatchRebootSetting = {})); +/** Known values of {@link VMGuestPatchClassificationWindows} that the service accepts. */ +exports.KnownVMGuestPatchClassificationWindows = void 0; +(function (KnownVMGuestPatchClassificationWindows) { + /** Critical */ + KnownVMGuestPatchClassificationWindows["Critical"] = "Critical"; + /** Security */ + KnownVMGuestPatchClassificationWindows["Security"] = "Security"; + /** UpdateRollUp */ + KnownVMGuestPatchClassificationWindows["UpdateRollUp"] = "UpdateRollUp"; + /** FeaturePack */ + KnownVMGuestPatchClassificationWindows["FeaturePack"] = "FeaturePack"; + /** ServicePack */ + KnownVMGuestPatchClassificationWindows["ServicePack"] = "ServicePack"; + /** Definition */ + KnownVMGuestPatchClassificationWindows["Definition"] = "Definition"; + /** Tools */ + KnownVMGuestPatchClassificationWindows["Tools"] = "Tools"; + /** Updates */ + KnownVMGuestPatchClassificationWindows["Updates"] = "Updates"; +})(exports.KnownVMGuestPatchClassificationWindows || (exports.KnownVMGuestPatchClassificationWindows = {})); +/** Known values of {@link VMGuestPatchClassificationLinux} that the service accepts. */ +exports.KnownVMGuestPatchClassificationLinux = void 0; +(function (KnownVMGuestPatchClassificationLinux) { + /** Critical */ + KnownVMGuestPatchClassificationLinux["Critical"] = "Critical"; + /** Security */ + KnownVMGuestPatchClassificationLinux["Security"] = "Security"; + /** Other */ + KnownVMGuestPatchClassificationLinux["Other"] = "Other"; +})(exports.KnownVMGuestPatchClassificationLinux || (exports.KnownVMGuestPatchClassificationLinux = {})); +/** Known values of {@link VMGuestPatchRebootStatus} that the service accepts. */ +exports.KnownVMGuestPatchRebootStatus = void 0; +(function (KnownVMGuestPatchRebootStatus) { + /** Unknown */ + KnownVMGuestPatchRebootStatus["Unknown"] = "Unknown"; + /** NotNeeded */ + KnownVMGuestPatchRebootStatus["NotNeeded"] = "NotNeeded"; + /** Required */ + KnownVMGuestPatchRebootStatus["Required"] = "Required"; + /** Started */ + KnownVMGuestPatchRebootStatus["Started"] = "Started"; + /** Failed */ + KnownVMGuestPatchRebootStatus["Failed"] = "Failed"; + /** Completed */ + KnownVMGuestPatchRebootStatus["Completed"] = "Completed"; +})(exports.KnownVMGuestPatchRebootStatus || (exports.KnownVMGuestPatchRebootStatus = {})); +/** Known values of {@link PatchInstallationState} that the service accepts. */ +exports.KnownPatchInstallationState = void 0; +(function (KnownPatchInstallationState) { + /** Unknown */ + KnownPatchInstallationState["Unknown"] = "Unknown"; + /** Installed */ + KnownPatchInstallationState["Installed"] = "Installed"; + /** Failed */ + KnownPatchInstallationState["Failed"] = "Failed"; + /** Excluded */ + KnownPatchInstallationState["Excluded"] = "Excluded"; + /** NotSelected */ + KnownPatchInstallationState["NotSelected"] = "NotSelected"; + /** Pending */ + KnownPatchInstallationState["Pending"] = "Pending"; +})(exports.KnownPatchInstallationState || (exports.KnownPatchInstallationState = {})); +/** Known values of {@link HyperVGenerationTypes} that the service accepts. */ +exports.KnownHyperVGenerationTypes = void 0; +(function (KnownHyperVGenerationTypes) { + /** V1 */ + KnownHyperVGenerationTypes["V1"] = "V1"; + /** V2 */ + KnownHyperVGenerationTypes["V2"] = "V2"; +})(exports.KnownHyperVGenerationTypes || (exports.KnownHyperVGenerationTypes = {})); +/** Known values of {@link VmDiskTypes} that the service accepts. */ +exports.KnownVmDiskTypes = void 0; +(function (KnownVmDiskTypes) { + /** None */ + KnownVmDiskTypes["None"] = "None"; + /** Unmanaged */ + KnownVmDiskTypes["Unmanaged"] = "Unmanaged"; +})(exports.KnownVmDiskTypes || (exports.KnownVmDiskTypes = {})); +/** Known values of {@link ArchitectureTypes} that the service accepts. */ +exports.KnownArchitectureTypes = void 0; +(function (KnownArchitectureTypes) { + /** X64 */ + KnownArchitectureTypes["X64"] = "x64"; + /** Arm64 */ + KnownArchitectureTypes["Arm64"] = "Arm64"; +})(exports.KnownArchitectureTypes || (exports.KnownArchitectureTypes = {})); +/** Known values of {@link ImageState} that the service accepts. */ +exports.KnownImageState = void 0; +(function (KnownImageState) { + /** Active */ + KnownImageState["Active"] = "Active"; + /** ScheduledForDeprecation */ + KnownImageState["ScheduledForDeprecation"] = "ScheduledForDeprecation"; + /** Deprecated */ + KnownImageState["Deprecated"] = "Deprecated"; +})(exports.KnownImageState || (exports.KnownImageState = {})); +/** Known values of {@link AlternativeType} that the service accepts. */ +exports.KnownAlternativeType = void 0; +(function (KnownAlternativeType) { + /** None */ + KnownAlternativeType["None"] = "None"; + /** Offer */ + KnownAlternativeType["Offer"] = "Offer"; + /** Plan */ + KnownAlternativeType["Plan"] = "Plan"; +})(exports.KnownAlternativeType || (exports.KnownAlternativeType = {})); +/** Known values of {@link ProximityPlacementGroupType} that the service accepts. */ +exports.KnownProximityPlacementGroupType = void 0; +(function (KnownProximityPlacementGroupType) { + /** Standard */ + KnownProximityPlacementGroupType["Standard"] = "Standard"; + /** Ultra */ + KnownProximityPlacementGroupType["Ultra"] = "Ultra"; +})(exports.KnownProximityPlacementGroupType || (exports.KnownProximityPlacementGroupType = {})); +/** Known values of {@link SshEncryptionTypes} that the service accepts. */ +exports.KnownSshEncryptionTypes = void 0; +(function (KnownSshEncryptionTypes) { + /** RSA */ + KnownSshEncryptionTypes["RSA"] = "RSA"; + /** Ed25519 */ + KnownSshEncryptionTypes["Ed25519"] = "Ed25519"; +})(exports.KnownSshEncryptionTypes || (exports.KnownSshEncryptionTypes = {})); +/** Known values of {@link OperatingSystemType} that the service accepts. */ +exports.KnownOperatingSystemType = void 0; +(function (KnownOperatingSystemType) { + /** Windows */ + KnownOperatingSystemType["Windows"] = "Windows"; + /** Linux */ + KnownOperatingSystemType["Linux"] = "Linux"; +})(exports.KnownOperatingSystemType || (exports.KnownOperatingSystemType = {})); +/** Known values of {@link RestorePointEncryptionType} that the service accepts. */ +exports.KnownRestorePointEncryptionType = void 0; +(function (KnownRestorePointEncryptionType) { + /** Disk Restore Point is encrypted at rest with Platform managed key. */ + KnownRestorePointEncryptionType["EncryptionAtRestWithPlatformKey"] = "EncryptionAtRestWithPlatformKey"; + /** Disk Restore Point is encrypted at rest with Customer managed key that can be changed and revoked by a customer. */ + KnownRestorePointEncryptionType["EncryptionAtRestWithCustomerKey"] = "EncryptionAtRestWithCustomerKey"; + /** Disk Restore Point is encrypted at rest with 2 layers of encryption. One of the keys is Customer managed and the other key is Platform managed. */ + KnownRestorePointEncryptionType["EncryptionAtRestWithPlatformAndCustomerKeys"] = "EncryptionAtRestWithPlatformAndCustomerKeys"; +})(exports.KnownRestorePointEncryptionType || (exports.KnownRestorePointEncryptionType = {})); +/** Known values of {@link ConsistencyModeTypes} that the service accepts. */ +exports.KnownConsistencyModeTypes = void 0; +(function (KnownConsistencyModeTypes) { + /** CrashConsistent */ + KnownConsistencyModeTypes["CrashConsistent"] = "CrashConsistent"; + /** FileSystemConsistent */ + KnownConsistencyModeTypes["FileSystemConsistent"] = "FileSystemConsistent"; + /** ApplicationConsistent */ + KnownConsistencyModeTypes["ApplicationConsistent"] = "ApplicationConsistent"; +})(exports.KnownConsistencyModeTypes || (exports.KnownConsistencyModeTypes = {})); +/** Known values of {@link RestorePointCollectionExpandOptions} that the service accepts. */ +exports.KnownRestorePointCollectionExpandOptions = void 0; +(function (KnownRestorePointCollectionExpandOptions) { + /** RestorePoints */ + KnownRestorePointCollectionExpandOptions["RestorePoints"] = "restorePoints"; +})(exports.KnownRestorePointCollectionExpandOptions || (exports.KnownRestorePointCollectionExpandOptions = {})); +/** Known values of {@link RestorePointExpandOptions} that the service accepts. */ +exports.KnownRestorePointExpandOptions = void 0; +(function (KnownRestorePointExpandOptions) { + /** InstanceView */ + KnownRestorePointExpandOptions["InstanceView"] = "instanceView"; +})(exports.KnownRestorePointExpandOptions || (exports.KnownRestorePointExpandOptions = {})); +/** Known values of {@link CapacityReservationGroupInstanceViewTypes} that the service accepts. */ +exports.KnownCapacityReservationGroupInstanceViewTypes = void 0; +(function (KnownCapacityReservationGroupInstanceViewTypes) { + /** InstanceView */ + KnownCapacityReservationGroupInstanceViewTypes["InstanceView"] = "instanceView"; +})(exports.KnownCapacityReservationGroupInstanceViewTypes || (exports.KnownCapacityReservationGroupInstanceViewTypes = {})); +/** Known values of {@link ExpandTypesForGetCapacityReservationGroups} that the service accepts. */ +exports.KnownExpandTypesForGetCapacityReservationGroups = void 0; +(function (KnownExpandTypesForGetCapacityReservationGroups) { + /** VirtualMachineScaleSetVMsRef */ + KnownExpandTypesForGetCapacityReservationGroups["VirtualMachineScaleSetVMsRef"] = "virtualMachineScaleSetVMs/$ref"; + /** VirtualMachinesRef */ + KnownExpandTypesForGetCapacityReservationGroups["VirtualMachinesRef"] = "virtualMachines/$ref"; +})(exports.KnownExpandTypesForGetCapacityReservationGroups || (exports.KnownExpandTypesForGetCapacityReservationGroups = {})); +/** Known values of {@link ResourceIdOptionsForGetCapacityReservationGroups} that the service accepts. */ +exports.KnownResourceIdOptionsForGetCapacityReservationGroups = void 0; +(function (KnownResourceIdOptionsForGetCapacityReservationGroups) { + /** CreatedInSubscription */ + KnownResourceIdOptionsForGetCapacityReservationGroups["CreatedInSubscription"] = "CreatedInSubscription"; + /** SharedWithSubscription */ + KnownResourceIdOptionsForGetCapacityReservationGroups["SharedWithSubscription"] = "SharedWithSubscription"; + /** All */ + KnownResourceIdOptionsForGetCapacityReservationGroups["All"] = "All"; +})(exports.KnownResourceIdOptionsForGetCapacityReservationGroups || (exports.KnownResourceIdOptionsForGetCapacityReservationGroups = {})); +/** Known values of {@link CapacityReservationInstanceViewTypes} that the service accepts. */ +exports.KnownCapacityReservationInstanceViewTypes = void 0; +(function (KnownCapacityReservationInstanceViewTypes) { + /** InstanceView */ + KnownCapacityReservationInstanceViewTypes["InstanceView"] = "instanceView"; +})(exports.KnownCapacityReservationInstanceViewTypes || (exports.KnownCapacityReservationInstanceViewTypes = {})); +/** Known values of {@link ExecutionState} that the service accepts. */ +exports.KnownExecutionState = void 0; +(function (KnownExecutionState) { + /** Unknown */ + KnownExecutionState["Unknown"] = "Unknown"; + /** Pending */ + KnownExecutionState["Pending"] = "Pending"; + /** Running */ + KnownExecutionState["Running"] = "Running"; + /** Failed */ + KnownExecutionState["Failed"] = "Failed"; + /** Succeeded */ + KnownExecutionState["Succeeded"] = "Succeeded"; + /** TimedOut */ + KnownExecutionState["TimedOut"] = "TimedOut"; + /** Canceled */ + KnownExecutionState["Canceled"] = "Canceled"; +})(exports.KnownExecutionState || (exports.KnownExecutionState = {})); +/** Known values of {@link DiskStorageAccountTypes} that the service accepts. */ +exports.KnownDiskStorageAccountTypes = void 0; +(function (KnownDiskStorageAccountTypes) { + /** Standard HDD locally redundant storage. Best for backup, non-critical, and infrequent access. */ + KnownDiskStorageAccountTypes["StandardLRS"] = "Standard_LRS"; + /** Premium SSD locally redundant storage. Best for production and performance sensitive workloads. */ + KnownDiskStorageAccountTypes["PremiumLRS"] = "Premium_LRS"; + /** Standard SSD locally redundant storage. Best for web servers, lightly used enterprise applications and dev\/test. */ + KnownDiskStorageAccountTypes["StandardSSDLRS"] = "StandardSSD_LRS"; + /** Ultra SSD locally redundant storage. Best for IO-intensive workloads such as SAP HANA, top tier databases (for example, SQL, Oracle), and other transaction-heavy workloads. */ + KnownDiskStorageAccountTypes["UltraSSDLRS"] = "UltraSSD_LRS"; + /** Premium SSD zone redundant storage. Best for the production workloads that need storage resiliency against zone failures. */ + KnownDiskStorageAccountTypes["PremiumZRS"] = "Premium_ZRS"; + /** Standard SSD zone redundant storage. Best for web servers, lightly used enterprise applications and dev\/test that need storage resiliency against zone failures. */ + KnownDiskStorageAccountTypes["StandardSSDZRS"] = "StandardSSD_ZRS"; + /** Premium SSD v2 locally redundant storage. Best for production and performance-sensitive workloads that consistently require low latency and high IOPS and throughput. */ + KnownDiskStorageAccountTypes["PremiumV2LRS"] = "PremiumV2_LRS"; +})(exports.KnownDiskStorageAccountTypes || (exports.KnownDiskStorageAccountTypes = {})); +/** Known values of {@link Architecture} that the service accepts. */ +exports.KnownArchitecture = void 0; +(function (KnownArchitecture) { + /** X64 */ + KnownArchitecture["X64"] = "x64"; + /** Arm64 */ + KnownArchitecture["Arm64"] = "Arm64"; +})(exports.KnownArchitecture || (exports.KnownArchitecture = {})); +/** Known values of {@link DiskCreateOption} that the service accepts. */ +exports.KnownDiskCreateOption = void 0; +(function (KnownDiskCreateOption) { + /** Create an empty data disk of a size given by diskSizeGB. */ + KnownDiskCreateOption["Empty"] = "Empty"; + /** Disk will be attached to a VM. */ + KnownDiskCreateOption["Attach"] = "Attach"; + /** Create a new disk from a platform image specified by the given imageReference or galleryImageReference. */ + KnownDiskCreateOption["FromImage"] = "FromImage"; + /** Create a disk by importing from a blob specified by a sourceUri in a storage account specified by storageAccountId. */ + KnownDiskCreateOption["Import"] = "Import"; + /** Create a new disk or snapshot by copying from a disk or snapshot specified by the given sourceResourceId. */ + KnownDiskCreateOption["Copy"] = "Copy"; + /** Create a new disk by copying from a backup recovery point. */ + KnownDiskCreateOption["Restore"] = "Restore"; + /** Create a new disk by obtaining a write token and using it to directly upload the contents of the disk. */ + KnownDiskCreateOption["Upload"] = "Upload"; + /** Create a new disk by using a deep copy process, where the resource creation is considered complete only after all data has been copied from the source. */ + KnownDiskCreateOption["CopyStart"] = "CopyStart"; + /** Similar to Import create option. Create a new Trusted Launch VM or Confidential VM supported disk by importing additional blob for VM guest state specified by securityDataUri in storage account specified by storageAccountId */ + KnownDiskCreateOption["ImportSecure"] = "ImportSecure"; + /** Similar to Upload create option. Create a new Trusted Launch VM or Confidential VM supported disk and upload using write token in both disk and VM guest state */ + KnownDiskCreateOption["UploadPreparedSecure"] = "UploadPreparedSecure"; + /** Create a new disk by exporting from elastic san volume snapshot */ + KnownDiskCreateOption["CopyFromSanSnapshot"] = "CopyFromSanSnapshot"; +})(exports.KnownDiskCreateOption || (exports.KnownDiskCreateOption = {})); +/** Known values of {@link ProvisionedBandwidthCopyOption} that the service accepts. */ +exports.KnownProvisionedBandwidthCopyOption = void 0; +(function (KnownProvisionedBandwidthCopyOption) { + /** None */ + KnownProvisionedBandwidthCopyOption["None"] = "None"; + /** Enhanced */ + KnownProvisionedBandwidthCopyOption["Enhanced"] = "Enhanced"; +})(exports.KnownProvisionedBandwidthCopyOption || (exports.KnownProvisionedBandwidthCopyOption = {})); +/** Known values of {@link DiskState} that the service accepts. */ +exports.KnownDiskState = void 0; +(function (KnownDiskState) { + /** The disk is not being used and can be attached to a VM. */ + KnownDiskState["Unattached"] = "Unattached"; + /** The disk is currently attached to a running VM. */ + KnownDiskState["Attached"] = "Attached"; + /** The disk is attached to a stopped-deallocated VM. */ + KnownDiskState["Reserved"] = "Reserved"; + /** The disk is attached to a VM which is in hibernated state. */ + KnownDiskState["Frozen"] = "Frozen"; + /** The disk currently has an Active SAS Uri associated with it. */ + KnownDiskState["ActiveSAS"] = "ActiveSAS"; + /** The disk is attached to a VM in hibernated state and has an active SAS URI associated with it. */ + KnownDiskState["ActiveSASFrozen"] = "ActiveSASFrozen"; + /** A disk is ready to be created by upload by requesting a write token. */ + KnownDiskState["ReadyToUpload"] = "ReadyToUpload"; + /** A disk is created for upload and a write token has been issued for uploading to it. */ + KnownDiskState["ActiveUpload"] = "ActiveUpload"; +})(exports.KnownDiskState || (exports.KnownDiskState = {})); +/** Known values of {@link EncryptionType} that the service accepts. */ +exports.KnownEncryptionType = void 0; +(function (KnownEncryptionType) { + /** Disk is encrypted at rest with Platform managed key. It is the default encryption type. This is not a valid encryption type for disk encryption sets. */ + KnownEncryptionType["EncryptionAtRestWithPlatformKey"] = "EncryptionAtRestWithPlatformKey"; + /** Disk is encrypted at rest with Customer managed key that can be changed and revoked by a customer. */ + KnownEncryptionType["EncryptionAtRestWithCustomerKey"] = "EncryptionAtRestWithCustomerKey"; + /** Disk is encrypted at rest with 2 layers of encryption. One of the keys is Customer managed and the other key is Platform managed. */ + KnownEncryptionType["EncryptionAtRestWithPlatformAndCustomerKeys"] = "EncryptionAtRestWithPlatformAndCustomerKeys"; +})(exports.KnownEncryptionType || (exports.KnownEncryptionType = {})); +/** Known values of {@link NetworkAccessPolicy} that the service accepts. */ +exports.KnownNetworkAccessPolicy = void 0; +(function (KnownNetworkAccessPolicy) { + /** The disk can be exported or uploaded to from any network. */ + KnownNetworkAccessPolicy["AllowAll"] = "AllowAll"; + /** The disk can be exported or uploaded to using a DiskAccess resource's private endpoints. */ + KnownNetworkAccessPolicy["AllowPrivate"] = "AllowPrivate"; + /** The disk cannot be exported. */ + KnownNetworkAccessPolicy["DenyAll"] = "DenyAll"; +})(exports.KnownNetworkAccessPolicy || (exports.KnownNetworkAccessPolicy = {})); +/** Known values of {@link DiskSecurityTypes} that the service accepts. */ +exports.KnownDiskSecurityTypes = void 0; +(function (KnownDiskSecurityTypes) { + /** Trusted Launch provides security features such as secure boot and virtual Trusted Platform Module (vTPM) */ + KnownDiskSecurityTypes["TrustedLaunch"] = "TrustedLaunch"; + /** Indicates Confidential VM disk with only VM guest state encrypted */ + KnownDiskSecurityTypes["ConfidentialVMVmguestStateOnlyEncryptedWithPlatformKey"] = "ConfidentialVM_VMGuestStateOnlyEncryptedWithPlatformKey"; + /** Indicates Confidential VM disk with both OS disk and VM guest state encrypted with a platform managed key */ + KnownDiskSecurityTypes["ConfidentialVMDiskEncryptedWithPlatformKey"] = "ConfidentialVM_DiskEncryptedWithPlatformKey"; + /** Indicates Confidential VM disk with both OS disk and VM guest state encrypted with a customer managed key */ + KnownDiskSecurityTypes["ConfidentialVMDiskEncryptedWithCustomerKey"] = "ConfidentialVM_DiskEncryptedWithCustomerKey"; + /** Indicates Confidential VM disk with a ephemeral vTPM. vTPM state is not persisted across VM reboots. */ + KnownDiskSecurityTypes["ConfidentialVMNonPersistedTPM"] = "ConfidentialVM_NonPersistedTPM"; +})(exports.KnownDiskSecurityTypes || (exports.KnownDiskSecurityTypes = {})); +/** Known values of {@link PublicNetworkAccess} that the service accepts. */ +exports.KnownPublicNetworkAccess = void 0; +(function (KnownPublicNetworkAccess) { + /** You can generate a SAS URI to access the underlying data of the disk publicly on the internet when NetworkAccessPolicy is set to AllowAll. You can access the data via the SAS URI only from your trusted Azure VNET when NetworkAccessPolicy is set to AllowPrivate. */ + KnownPublicNetworkAccess["Enabled"] = "Enabled"; + /** You cannot access the underlying data of the disk publicly on the internet even when NetworkAccessPolicy is set to AllowAll. You can access the data via the SAS URI only from your trusted Azure VNET when NetworkAccessPolicy is set to AllowPrivate. */ + KnownPublicNetworkAccess["Disabled"] = "Disabled"; +})(exports.KnownPublicNetworkAccess || (exports.KnownPublicNetworkAccess = {})); +/** Known values of {@link DataAccessAuthMode} that the service accepts. */ +exports.KnownDataAccessAuthMode = void 0; +(function (KnownDataAccessAuthMode) { + /** When export\/upload URL is used, the system checks if the user has an identity in Azure Active Directory and has necessary permissions to export\/upload the data. Please refer to aka.ms\/DisksAzureADAuth. */ + KnownDataAccessAuthMode["AzureActiveDirectory"] = "AzureActiveDirectory"; + /** No additional authentication would be performed when accessing export\/upload URL. */ + KnownDataAccessAuthMode["None"] = "None"; +})(exports.KnownDataAccessAuthMode || (exports.KnownDataAccessAuthMode = {})); +/** Known values of {@link AccessLevel} that the service accepts. */ +exports.KnownAccessLevel = void 0; +(function (KnownAccessLevel) { + /** None */ + KnownAccessLevel["None"] = "None"; + /** Read */ + KnownAccessLevel["Read"] = "Read"; + /** Write */ + KnownAccessLevel["Write"] = "Write"; +})(exports.KnownAccessLevel || (exports.KnownAccessLevel = {})); +/** Known values of {@link FileFormat} that the service accepts. */ +exports.KnownFileFormat = void 0; +(function (KnownFileFormat) { + /** A VHD file is a disk image file in the Virtual Hard Disk file format. */ + KnownFileFormat["VHD"] = "VHD"; + /** A VHDX file is a disk image file in the Virtual Hard Disk v2 file format. */ + KnownFileFormat["Vhdx"] = "VHDX"; +})(exports.KnownFileFormat || (exports.KnownFileFormat = {})); +/** Known values of {@link PrivateEndpointServiceConnectionStatus} that the service accepts. */ +exports.KnownPrivateEndpointServiceConnectionStatus = void 0; +(function (KnownPrivateEndpointServiceConnectionStatus) { + /** Pending */ + KnownPrivateEndpointServiceConnectionStatus["Pending"] = "Pending"; + /** Approved */ + KnownPrivateEndpointServiceConnectionStatus["Approved"] = "Approved"; + /** Rejected */ + KnownPrivateEndpointServiceConnectionStatus["Rejected"] = "Rejected"; +})(exports.KnownPrivateEndpointServiceConnectionStatus || (exports.KnownPrivateEndpointServiceConnectionStatus = {})); +/** Known values of {@link PrivateEndpointConnectionProvisioningState} that the service accepts. */ +exports.KnownPrivateEndpointConnectionProvisioningState = void 0; +(function (KnownPrivateEndpointConnectionProvisioningState) { + /** Succeeded */ + KnownPrivateEndpointConnectionProvisioningState["Succeeded"] = "Succeeded"; + /** Creating */ + KnownPrivateEndpointConnectionProvisioningState["Creating"] = "Creating"; + /** Deleting */ + KnownPrivateEndpointConnectionProvisioningState["Deleting"] = "Deleting"; + /** Failed */ + KnownPrivateEndpointConnectionProvisioningState["Failed"] = "Failed"; +})(exports.KnownPrivateEndpointConnectionProvisioningState || (exports.KnownPrivateEndpointConnectionProvisioningState = {})); +/** Known values of {@link DiskEncryptionSetIdentityType} that the service accepts. */ +exports.KnownDiskEncryptionSetIdentityType = void 0; +(function (KnownDiskEncryptionSetIdentityType) { + /** SystemAssigned */ + KnownDiskEncryptionSetIdentityType["SystemAssigned"] = "SystemAssigned"; + /** UserAssigned */ + KnownDiskEncryptionSetIdentityType["UserAssigned"] = "UserAssigned"; + /** SystemAssignedUserAssigned */ + KnownDiskEncryptionSetIdentityType["SystemAssignedUserAssigned"] = "SystemAssigned, UserAssigned"; + /** None */ + KnownDiskEncryptionSetIdentityType["None"] = "None"; +})(exports.KnownDiskEncryptionSetIdentityType || (exports.KnownDiskEncryptionSetIdentityType = {})); +/** Known values of {@link DiskEncryptionSetType} that the service accepts. */ +exports.KnownDiskEncryptionSetType = void 0; +(function (KnownDiskEncryptionSetType) { + /** Resource using diskEncryptionSet would be encrypted at rest with Customer managed key that can be changed and revoked by a customer. */ + KnownDiskEncryptionSetType["EncryptionAtRestWithCustomerKey"] = "EncryptionAtRestWithCustomerKey"; + /** Resource using diskEncryptionSet would be encrypted at rest with two layers of encryption. One of the keys is Customer managed and the other key is Platform managed. */ + KnownDiskEncryptionSetType["EncryptionAtRestWithPlatformAndCustomerKeys"] = "EncryptionAtRestWithPlatformAndCustomerKeys"; + /** Confidential VM supported disk and VM guest state would be encrypted with customer managed key. */ + KnownDiskEncryptionSetType["ConfidentialVmEncryptedWithCustomerKey"] = "ConfidentialVmEncryptedWithCustomerKey"; +})(exports.KnownDiskEncryptionSetType || (exports.KnownDiskEncryptionSetType = {})); +/** Known values of {@link SnapshotStorageAccountTypes} that the service accepts. */ +exports.KnownSnapshotStorageAccountTypes = void 0; +(function (KnownSnapshotStorageAccountTypes) { + /** Standard HDD locally redundant storage */ + KnownSnapshotStorageAccountTypes["StandardLRS"] = "Standard_LRS"; + /** Premium SSD locally redundant storage */ + KnownSnapshotStorageAccountTypes["PremiumLRS"] = "Premium_LRS"; + /** Standard zone redundant storage */ + KnownSnapshotStorageAccountTypes["StandardZRS"] = "Standard_ZRS"; +})(exports.KnownSnapshotStorageAccountTypes || (exports.KnownSnapshotStorageAccountTypes = {})); +/** Known values of {@link CopyCompletionErrorReason} that the service accepts. */ +exports.KnownCopyCompletionErrorReason = void 0; +(function (KnownCopyCompletionErrorReason) { + /** Indicates that the source snapshot was deleted while the background copy of the resource created via CopyStart operation was in progress. */ + KnownCopyCompletionErrorReason["CopySourceNotFound"] = "CopySourceNotFound"; +})(exports.KnownCopyCompletionErrorReason || (exports.KnownCopyCompletionErrorReason = {})); +/** Known values of {@link ExtendedLocationType} that the service accepts. */ +exports.KnownExtendedLocationType = void 0; +(function (KnownExtendedLocationType) { + /** EdgeZone */ + KnownExtendedLocationType["EdgeZone"] = "EdgeZone"; +})(exports.KnownExtendedLocationType || (exports.KnownExtendedLocationType = {})); +/** Known values of {@link GalleryProvisioningState} that the service accepts. */ +exports.KnownGalleryProvisioningState = void 0; +(function (KnownGalleryProvisioningState) { + /** Creating */ + KnownGalleryProvisioningState["Creating"] = "Creating"; + /** Updating */ + KnownGalleryProvisioningState["Updating"] = "Updating"; + /** Failed */ + KnownGalleryProvisioningState["Failed"] = "Failed"; + /** Succeeded */ + KnownGalleryProvisioningState["Succeeded"] = "Succeeded"; + /** Deleting */ + KnownGalleryProvisioningState["Deleting"] = "Deleting"; + /** Migrating */ + KnownGalleryProvisioningState["Migrating"] = "Migrating"; +})(exports.KnownGalleryProvisioningState || (exports.KnownGalleryProvisioningState = {})); +/** Known values of {@link GallerySharingPermissionTypes} that the service accepts. */ +exports.KnownGallerySharingPermissionTypes = void 0; +(function (KnownGallerySharingPermissionTypes) { + /** Private */ + KnownGallerySharingPermissionTypes["Private"] = "Private"; + /** Groups */ + KnownGallerySharingPermissionTypes["Groups"] = "Groups"; + /** Community */ + KnownGallerySharingPermissionTypes["Community"] = "Community"; +})(exports.KnownGallerySharingPermissionTypes || (exports.KnownGallerySharingPermissionTypes = {})); +/** Known values of {@link SharingProfileGroupTypes} that the service accepts. */ +exports.KnownSharingProfileGroupTypes = void 0; +(function (KnownSharingProfileGroupTypes) { + /** Subscriptions */ + KnownSharingProfileGroupTypes["Subscriptions"] = "Subscriptions"; + /** AADTenants */ + KnownSharingProfileGroupTypes["AADTenants"] = "AADTenants"; +})(exports.KnownSharingProfileGroupTypes || (exports.KnownSharingProfileGroupTypes = {})); +/** Known values of {@link SharingState} that the service accepts. */ +exports.KnownSharingState = void 0; +(function (KnownSharingState) { + /** Succeeded */ + KnownSharingState["Succeeded"] = "Succeeded"; + /** InProgress */ + KnownSharingState["InProgress"] = "InProgress"; + /** Failed */ + KnownSharingState["Failed"] = "Failed"; + /** Unknown */ + KnownSharingState["Unknown"] = "Unknown"; +})(exports.KnownSharingState || (exports.KnownSharingState = {})); +/** Known values of {@link SelectPermissions} that the service accepts. */ +exports.KnownSelectPermissions = void 0; +(function (KnownSelectPermissions) { + /** Permissions */ + KnownSelectPermissions["Permissions"] = "Permissions"; +})(exports.KnownSelectPermissions || (exports.KnownSelectPermissions = {})); +/** Known values of {@link GalleryExpandParams} that the service accepts. */ +exports.KnownGalleryExpandParams = void 0; +(function (KnownGalleryExpandParams) { + /** SharingProfileGroups */ + KnownGalleryExpandParams["SharingProfileGroups"] = "SharingProfile/Groups"; +})(exports.KnownGalleryExpandParams || (exports.KnownGalleryExpandParams = {})); +/** Known values of {@link StorageAccountType} that the service accepts. */ +exports.KnownStorageAccountType = void 0; +(function (KnownStorageAccountType) { + /** StandardLRS */ + KnownStorageAccountType["StandardLRS"] = "Standard_LRS"; + /** StandardZRS */ + KnownStorageAccountType["StandardZRS"] = "Standard_ZRS"; + /** PremiumLRS */ + KnownStorageAccountType["PremiumLRS"] = "Premium_LRS"; +})(exports.KnownStorageAccountType || (exports.KnownStorageAccountType = {})); +/** Known values of {@link ConfidentialVMEncryptionType} that the service accepts. */ +exports.KnownConfidentialVMEncryptionType = void 0; +(function (KnownConfidentialVMEncryptionType) { + /** EncryptedVMGuestStateOnlyWithPmk */ + KnownConfidentialVMEncryptionType["EncryptedVMGuestStateOnlyWithPmk"] = "EncryptedVMGuestStateOnlyWithPmk"; + /** EncryptedWithPmk */ + KnownConfidentialVMEncryptionType["EncryptedWithPmk"] = "EncryptedWithPmk"; + /** EncryptedWithCmk */ + KnownConfidentialVMEncryptionType["EncryptedWithCmk"] = "EncryptedWithCmk"; + /** NonPersistedTPM */ + KnownConfidentialVMEncryptionType["NonPersistedTPM"] = "NonPersistedTPM"; +})(exports.KnownConfidentialVMEncryptionType || (exports.KnownConfidentialVMEncryptionType = {})); +/** Known values of {@link ReplicationMode} that the service accepts. */ +exports.KnownReplicationMode = void 0; +(function (KnownReplicationMode) { + /** Full */ + KnownReplicationMode["Full"] = "Full"; + /** Shallow */ + KnownReplicationMode["Shallow"] = "Shallow"; +})(exports.KnownReplicationMode || (exports.KnownReplicationMode = {})); +/** Known values of {@link GalleryExtendedLocationType} that the service accepts. */ +exports.KnownGalleryExtendedLocationType = void 0; +(function (KnownGalleryExtendedLocationType) { + /** EdgeZone */ + KnownGalleryExtendedLocationType["EdgeZone"] = "EdgeZone"; + /** Unknown */ + KnownGalleryExtendedLocationType["Unknown"] = "Unknown"; +})(exports.KnownGalleryExtendedLocationType || (exports.KnownGalleryExtendedLocationType = {})); +/** Known values of {@link EdgeZoneStorageAccountType} that the service accepts. */ +exports.KnownEdgeZoneStorageAccountType = void 0; +(function (KnownEdgeZoneStorageAccountType) { + /** StandardLRS */ + KnownEdgeZoneStorageAccountType["StandardLRS"] = "Standard_LRS"; + /** StandardZRS */ + KnownEdgeZoneStorageAccountType["StandardZRS"] = "Standard_ZRS"; + /** StandardSSDLRS */ + KnownEdgeZoneStorageAccountType["StandardSSDLRS"] = "StandardSSD_LRS"; + /** PremiumLRS */ + KnownEdgeZoneStorageAccountType["PremiumLRS"] = "Premium_LRS"; +})(exports.KnownEdgeZoneStorageAccountType || (exports.KnownEdgeZoneStorageAccountType = {})); +/** Known values of {@link PolicyViolationCategory} that the service accepts. */ +exports.KnownPolicyViolationCategory = void 0; +(function (KnownPolicyViolationCategory) { + /** Other */ + KnownPolicyViolationCategory["Other"] = "Other"; + /** ImageFlaggedUnsafe */ + KnownPolicyViolationCategory["ImageFlaggedUnsafe"] = "ImageFlaggedUnsafe"; + /** CopyrightValidation */ + KnownPolicyViolationCategory["CopyrightValidation"] = "CopyrightValidation"; + /** IpTheft */ + KnownPolicyViolationCategory["IpTheft"] = "IpTheft"; +})(exports.KnownPolicyViolationCategory || (exports.KnownPolicyViolationCategory = {})); +/** Known values of {@link AggregatedReplicationState} that the service accepts. */ +exports.KnownAggregatedReplicationState = void 0; +(function (KnownAggregatedReplicationState) { + /** Unknown */ + KnownAggregatedReplicationState["Unknown"] = "Unknown"; + /** InProgress */ + KnownAggregatedReplicationState["InProgress"] = "InProgress"; + /** Completed */ + KnownAggregatedReplicationState["Completed"] = "Completed"; + /** Failed */ + KnownAggregatedReplicationState["Failed"] = "Failed"; +})(exports.KnownAggregatedReplicationState || (exports.KnownAggregatedReplicationState = {})); +/** Known values of {@link ReplicationState} that the service accepts. */ +exports.KnownReplicationState = void 0; +(function (KnownReplicationState) { + /** Unknown */ + KnownReplicationState["Unknown"] = "Unknown"; + /** Replicating */ + KnownReplicationState["Replicating"] = "Replicating"; + /** Completed */ + KnownReplicationState["Completed"] = "Completed"; + /** Failed */ + KnownReplicationState["Failed"] = "Failed"; +})(exports.KnownReplicationState || (exports.KnownReplicationState = {})); +/** Known values of {@link UefiSignatureTemplateName} that the service accepts. */ +exports.KnownUefiSignatureTemplateName = void 0; +(function (KnownUefiSignatureTemplateName) { + /** NoSignatureTemplate */ + KnownUefiSignatureTemplateName["NoSignatureTemplate"] = "NoSignatureTemplate"; + /** MicrosoftUefiCertificateAuthorityTemplate */ + KnownUefiSignatureTemplateName["MicrosoftUefiCertificateAuthorityTemplate"] = "MicrosoftUefiCertificateAuthorityTemplate"; + /** MicrosoftWindowsTemplate */ + KnownUefiSignatureTemplateName["MicrosoftWindowsTemplate"] = "MicrosoftWindowsTemplate"; +})(exports.KnownUefiSignatureTemplateName || (exports.KnownUefiSignatureTemplateName = {})); +/** Known values of {@link UefiKeyType} that the service accepts. */ +exports.KnownUefiKeyType = void 0; +(function (KnownUefiKeyType) { + /** Sha256 */ + KnownUefiKeyType["Sha256"] = "sha256"; + /** X509 */ + KnownUefiKeyType["X509"] = "x509"; +})(exports.KnownUefiKeyType || (exports.KnownUefiKeyType = {})); +/** Known values of {@link ReplicationStatusTypes} that the service accepts. */ +exports.KnownReplicationStatusTypes = void 0; +(function (KnownReplicationStatusTypes) { + /** ReplicationStatus */ + KnownReplicationStatusTypes["ReplicationStatus"] = "ReplicationStatus"; + /** UefiSettings */ + KnownReplicationStatusTypes["UefiSettings"] = "UefiSettings"; +})(exports.KnownReplicationStatusTypes || (exports.KnownReplicationStatusTypes = {})); +/** Known values of {@link SharingUpdateOperationTypes} that the service accepts. */ +exports.KnownSharingUpdateOperationTypes = void 0; +(function (KnownSharingUpdateOperationTypes) { + /** Add */ + KnownSharingUpdateOperationTypes["Add"] = "Add"; + /** Remove */ + KnownSharingUpdateOperationTypes["Remove"] = "Remove"; + /** Reset */ + KnownSharingUpdateOperationTypes["Reset"] = "Reset"; + /** EnableCommunity */ + KnownSharingUpdateOperationTypes["EnableCommunity"] = "EnableCommunity"; +})(exports.KnownSharingUpdateOperationTypes || (exports.KnownSharingUpdateOperationTypes = {})); +/** Known values of {@link SharedToValues} that the service accepts. */ +exports.KnownSharedToValues = void 0; +(function (KnownSharedToValues) { + /** Tenant */ + KnownSharedToValues["Tenant"] = "tenant"; +})(exports.KnownSharedToValues || (exports.KnownSharedToValues = {})); +/** Known values of {@link SharedGalleryHostCaching} that the service accepts. */ +exports.KnownSharedGalleryHostCaching = void 0; +(function (KnownSharedGalleryHostCaching) { + /** None */ + KnownSharedGalleryHostCaching["None"] = "None"; + /** ReadOnly */ + KnownSharedGalleryHostCaching["ReadOnly"] = "ReadOnly"; + /** ReadWrite */ + KnownSharedGalleryHostCaching["ReadWrite"] = "ReadWrite"; +})(exports.KnownSharedGalleryHostCaching || (exports.KnownSharedGalleryHostCaching = {})); +/** Known values of {@link CloudServiceUpgradeMode} that the service accepts. */ +exports.KnownCloudServiceUpgradeMode = void 0; +(function (KnownCloudServiceUpgradeMode) { + /** Auto */ + KnownCloudServiceUpgradeMode["Auto"] = "Auto"; + /** Manual */ + KnownCloudServiceUpgradeMode["Manual"] = "Manual"; + /** Simultaneous */ + KnownCloudServiceUpgradeMode["Simultaneous"] = "Simultaneous"; +})(exports.KnownCloudServiceUpgradeMode || (exports.KnownCloudServiceUpgradeMode = {})); +/** Known values of {@link CloudServiceSlotType} that the service accepts. */ +exports.KnownCloudServiceSlotType = void 0; +(function (KnownCloudServiceSlotType) { + /** Production */ + KnownCloudServiceSlotType["Production"] = "Production"; + /** Staging */ + KnownCloudServiceSlotType["Staging"] = "Staging"; +})(exports.KnownCloudServiceSlotType || (exports.KnownCloudServiceSlotType = {})); +/** Known values of {@link AvailabilitySetSkuTypes} that the service accepts. */ +exports.KnownAvailabilitySetSkuTypes = void 0; +(function (KnownAvailabilitySetSkuTypes) { + /** Classic */ + KnownAvailabilitySetSkuTypes["Classic"] = "Classic"; + /** Aligned */ + KnownAvailabilitySetSkuTypes["Aligned"] = "Aligned"; +})(exports.KnownAvailabilitySetSkuTypes || (exports.KnownAvailabilitySetSkuTypes = {})); + +/* + * 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. + */ +const ComputeOperationListResult = { + type: { + name: "Composite", + className: "ComputeOperationListResult", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ComputeOperationValue", + }, + }, + }, + }, + }, + }, +}; +const ComputeOperationValue = { + type: { + name: "Composite", + className: "ComputeOperationValue", + modelProperties: { + origin: { + serializedName: "origin", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + operation: { + serializedName: "display.operation", + readOnly: true, + type: { + name: "String", + }, + }, + resource: { + serializedName: "display.resource", + readOnly: true, + type: { + name: "String", + }, + }, + description: { + serializedName: "display.description", + readOnly: true, + type: { + name: "String", + }, + }, + provider: { + serializedName: "display.provider", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const CloudError = { + type: { + name: "Composite", + className: "CloudError", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ApiError", + }, + }, + }, + }, +}; +const ApiError = { + type: { + name: "Composite", + className: "ApiError", + modelProperties: { + details: { + serializedName: "details", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ApiErrorBase", + }, + }, + }, + }, + innererror: { + serializedName: "innererror", + type: { + name: "Composite", + className: "InnerError", + }, + }, + code: { + serializedName: "code", + type: { + name: "String", + }, + }, + target: { + serializedName: "target", + type: { + name: "String", + }, + }, + message: { + serializedName: "message", + type: { + name: "String", + }, + }, + }, + }, +}; +const ApiErrorBase = { + type: { + name: "Composite", + className: "ApiErrorBase", + modelProperties: { + code: { + serializedName: "code", + type: { + name: "String", + }, + }, + target: { + serializedName: "target", + type: { + name: "String", + }, + }, + message: { + serializedName: "message", + type: { + name: "String", + }, + }, + }, + }, +}; +const InnerError = { + type: { + name: "Composite", + className: "InnerError", + modelProperties: { + exceptiontype: { + serializedName: "exceptiontype", + type: { + name: "String", + }, + }, + errordetail: { + serializedName: "errordetail", + type: { + name: "String", + }, + }, + }, + }, +}; +const ListUsagesResult = { + type: { + name: "Composite", + className: "ListUsagesResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Usage", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const Usage = { + type: { + name: "Composite", + className: "Usage", + modelProperties: { + unit: { + defaultValue: "Count", + isConstant: true, + serializedName: "unit", + type: { + name: "String", + }, + }, + currentValue: { + serializedName: "currentValue", + required: true, + type: { + name: "Number", + }, + }, + limit: { + serializedName: "limit", + required: true, + type: { + name: "Number", + }, + }, + name: { + serializedName: "name", + type: { + name: "Composite", + className: "UsageName", + }, + }, + }, + }, +}; +const UsageName = { + type: { + name: "Composite", + className: "UsageName", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "String", + }, + }, + localizedValue: { + serializedName: "localizedValue", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineSizeListResult = { + type: { + name: "Composite", + className: "VirtualMachineSizeListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineSize", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineSize = { + type: { + name: "Composite", + className: "VirtualMachineSize", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + numberOfCores: { + serializedName: "numberOfCores", + type: { + name: "Number", + }, + }, + osDiskSizeInMB: { + serializedName: "osDiskSizeInMB", + type: { + name: "Number", + }, + }, + resourceDiskSizeInMB: { + serializedName: "resourceDiskSizeInMB", + type: { + name: "Number", + }, + }, + memoryInMB: { + serializedName: "memoryInMB", + type: { + name: "Number", + }, + }, + maxDataDiskCount: { + serializedName: "maxDataDiskCount", + type: { + name: "Number", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetListResult = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSet", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const Sku = { + type: { + name: "Composite", + className: "Sku", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + tier: { + serializedName: "tier", + type: { + name: "String", + }, + }, + capacity: { + serializedName: "capacity", + type: { + name: "Number", + }, + }, + }, + }, +}; +const Plan = { + type: { + name: "Composite", + className: "Plan", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + publisher: { + serializedName: "publisher", + type: { + name: "String", + }, + }, + product: { + serializedName: "product", + type: { + name: "String", + }, + }, + promotionCode: { + serializedName: "promotionCode", + type: { + name: "String", + }, + }, + }, + }, +}; +const UpgradePolicy = { + type: { + name: "Composite", + className: "UpgradePolicy", + modelProperties: { + mode: { + serializedName: "mode", + type: { + name: "Enum", + allowedValues: ["Automatic", "Manual", "Rolling"], + }, + }, + rollingUpgradePolicy: { + serializedName: "rollingUpgradePolicy", + type: { + name: "Composite", + className: "RollingUpgradePolicy", + }, + }, + automaticOSUpgradePolicy: { + serializedName: "automaticOSUpgradePolicy", + type: { + name: "Composite", + className: "AutomaticOSUpgradePolicy", + }, + }, + }, + }, +}; +const RollingUpgradePolicy = { + type: { + name: "Composite", + className: "RollingUpgradePolicy", + modelProperties: { + maxBatchInstancePercent: { + constraints: { + InclusiveMaximum: 100, + InclusiveMinimum: 5, + }, + serializedName: "maxBatchInstancePercent", + type: { + name: "Number", + }, + }, + maxUnhealthyInstancePercent: { + constraints: { + InclusiveMaximum: 100, + InclusiveMinimum: 5, + }, + serializedName: "maxUnhealthyInstancePercent", + type: { + name: "Number", + }, + }, + maxUnhealthyUpgradedInstancePercent: { + constraints: { + InclusiveMaximum: 100, + InclusiveMinimum: 0, + }, + serializedName: "maxUnhealthyUpgradedInstancePercent", + type: { + name: "Number", + }, + }, + pauseTimeBetweenBatches: { + serializedName: "pauseTimeBetweenBatches", + type: { + name: "String", + }, + }, + enableCrossZoneUpgrade: { + serializedName: "enableCrossZoneUpgrade", + type: { + name: "Boolean", + }, + }, + prioritizeUnhealthyInstances: { + serializedName: "prioritizeUnhealthyInstances", + type: { + name: "Boolean", + }, + }, + rollbackFailedInstancesOnPolicyBreach: { + serializedName: "rollbackFailedInstancesOnPolicyBreach", + type: { + name: "Boolean", + }, + }, + maxSurge: { + serializedName: "maxSurge", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const AutomaticOSUpgradePolicy = { + type: { + name: "Composite", + className: "AutomaticOSUpgradePolicy", + modelProperties: { + enableAutomaticOSUpgrade: { + serializedName: "enableAutomaticOSUpgrade", + type: { + name: "Boolean", + }, + }, + disableAutomaticRollback: { + serializedName: "disableAutomaticRollback", + type: { + name: "Boolean", + }, + }, + useRollingUpgradePolicy: { + serializedName: "useRollingUpgradePolicy", + type: { + name: "Boolean", + }, + }, + osRollingUpgradeDeferral: { + serializedName: "osRollingUpgradeDeferral", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const ScheduledEventsPolicy = { + type: { + name: "Composite", + className: "ScheduledEventsPolicy", + modelProperties: { + userInitiatedRedeploy: { + serializedName: "userInitiatedRedeploy", + type: { + name: "Composite", + className: "UserInitiatedRedeploy", + }, + }, + userInitiatedReboot: { + serializedName: "userInitiatedReboot", + type: { + name: "Composite", + className: "UserInitiatedReboot", + }, + }, + scheduledEventsAdditionalPublishingTargets: { + serializedName: "scheduledEventsAdditionalPublishingTargets", + type: { + name: "Composite", + className: "ScheduledEventsAdditionalPublishingTargets", + }, + }, + }, + }, +}; +const UserInitiatedRedeploy = { + type: { + name: "Composite", + className: "UserInitiatedRedeploy", + modelProperties: { + automaticallyApprove: { + serializedName: "automaticallyApprove", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const UserInitiatedReboot = { + type: { + name: "Composite", + className: "UserInitiatedReboot", + modelProperties: { + automaticallyApprove: { + serializedName: "automaticallyApprove", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const ScheduledEventsAdditionalPublishingTargets = { + type: { + name: "Composite", + className: "ScheduledEventsAdditionalPublishingTargets", + modelProperties: { + eventGridAndResourceGraph: { + serializedName: "eventGridAndResourceGraph", + type: { + name: "Composite", + className: "EventGridAndResourceGraph", + }, + }, + }, + }, +}; +const EventGridAndResourceGraph = { + type: { + name: "Composite", + className: "EventGridAndResourceGraph", + modelProperties: { + enable: { + serializedName: "enable", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const AutomaticRepairsPolicy = { + type: { + name: "Composite", + className: "AutomaticRepairsPolicy", + modelProperties: { + enabled: { + serializedName: "enabled", + type: { + name: "Boolean", + }, + }, + gracePeriod: { + serializedName: "gracePeriod", + type: { + name: "String", + }, + }, + repairAction: { + serializedName: "repairAction", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMProfile", + modelProperties: { + osProfile: { + serializedName: "osProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetOSProfile", + }, + }, + storageProfile: { + serializedName: "storageProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetStorageProfile", + }, + }, + networkProfile: { + serializedName: "networkProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetNetworkProfile", + }, + }, + securityProfile: { + serializedName: "securityProfile", + type: { + name: "Composite", + className: "SecurityProfile", + }, + }, + diagnosticsProfile: { + serializedName: "diagnosticsProfile", + type: { + name: "Composite", + className: "DiagnosticsProfile", + }, + }, + extensionProfile: { + serializedName: "extensionProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetExtensionProfile", + }, + }, + licenseType: { + serializedName: "licenseType", + type: { + name: "String", + }, + }, + priority: { + serializedName: "priority", + type: { + name: "String", + }, + }, + evictionPolicy: { + serializedName: "evictionPolicy", + type: { + name: "String", + }, + }, + billingProfile: { + serializedName: "billingProfile", + type: { + name: "Composite", + className: "BillingProfile", + }, + }, + scheduledEventsProfile: { + serializedName: "scheduledEventsProfile", + type: { + name: "Composite", + className: "ScheduledEventsProfile", + }, + }, + userData: { + serializedName: "userData", + type: { + name: "String", + }, + }, + capacityReservation: { + serializedName: "capacityReservation", + type: { + name: "Composite", + className: "CapacityReservationProfile", + }, + }, + applicationProfile: { + serializedName: "applicationProfile", + type: { + name: "Composite", + className: "ApplicationProfile", + }, + }, + hardwareProfile: { + serializedName: "hardwareProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetHardwareProfile", + }, + }, + serviceArtifactReference: { + serializedName: "serviceArtifactReference", + type: { + name: "Composite", + className: "ServiceArtifactReference", + }, + }, + securityPostureReference: { + serializedName: "securityPostureReference", + type: { + name: "Composite", + className: "SecurityPostureReference", + }, + }, + timeCreated: { + serializedName: "timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetOSProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetOSProfile", + modelProperties: { + computerNamePrefix: { + serializedName: "computerNamePrefix", + type: { + name: "String", + }, + }, + adminUsername: { + serializedName: "adminUsername", + type: { + name: "String", + }, + }, + adminPassword: { + serializedName: "adminPassword", + type: { + name: "String", + }, + }, + customData: { + serializedName: "customData", + type: { + name: "String", + }, + }, + windowsConfiguration: { + serializedName: "windowsConfiguration", + type: { + name: "Composite", + className: "WindowsConfiguration", + }, + }, + linuxConfiguration: { + serializedName: "linuxConfiguration", + type: { + name: "Composite", + className: "LinuxConfiguration", + }, + }, + secrets: { + serializedName: "secrets", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VaultSecretGroup", + }, + }, + }, + }, + allowExtensionOperations: { + serializedName: "allowExtensionOperations", + type: { + name: "Boolean", + }, + }, + requireGuestProvisionSignal: { + serializedName: "requireGuestProvisionSignal", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const WindowsConfiguration = { + type: { + name: "Composite", + className: "WindowsConfiguration", + modelProperties: { + provisionVMAgent: { + serializedName: "provisionVMAgent", + type: { + name: "Boolean", + }, + }, + enableAutomaticUpdates: { + serializedName: "enableAutomaticUpdates", + type: { + name: "Boolean", + }, + }, + timeZone: { + serializedName: "timeZone", + type: { + name: "String", + }, + }, + additionalUnattendContent: { + serializedName: "additionalUnattendContent", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AdditionalUnattendContent", + }, + }, + }, + }, + patchSettings: { + serializedName: "patchSettings", + type: { + name: "Composite", + className: "PatchSettings", + }, + }, + winRM: { + serializedName: "winRM", + type: { + name: "Composite", + className: "WinRMConfiguration", + }, + }, + enableVMAgentPlatformUpdates: { + serializedName: "enableVMAgentPlatformUpdates", + readOnly: true, + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const AdditionalUnattendContent = { + type: { + name: "Composite", + className: "AdditionalUnattendContent", + modelProperties: { + passName: { + defaultValue: "OobeSystem", + isConstant: true, + serializedName: "passName", + type: { + name: "String", + }, + }, + componentName: { + defaultValue: "Microsoft-Windows-Shell-Setup", + isConstant: true, + serializedName: "componentName", + type: { + name: "String", + }, + }, + settingName: { + serializedName: "settingName", + type: { + name: "Enum", + allowedValues: ["AutoLogon", "FirstLogonCommands"], + }, + }, + content: { + serializedName: "content", + type: { + name: "String", + }, + }, + }, + }, +}; +const PatchSettings = { + type: { + name: "Composite", + className: "PatchSettings", + modelProperties: { + patchMode: { + serializedName: "patchMode", + type: { + name: "String", + }, + }, + enableHotpatching: { + serializedName: "enableHotpatching", + type: { + name: "Boolean", + }, + }, + assessmentMode: { + serializedName: "assessmentMode", + type: { + name: "String", + }, + }, + automaticByPlatformSettings: { + serializedName: "automaticByPlatformSettings", + type: { + name: "Composite", + className: "WindowsVMGuestPatchAutomaticByPlatformSettings", + }, + }, + }, + }, +}; +const WindowsVMGuestPatchAutomaticByPlatformSettings = { + type: { + name: "Composite", + className: "WindowsVMGuestPatchAutomaticByPlatformSettings", + modelProperties: { + rebootSetting: { + serializedName: "rebootSetting", + type: { + name: "String", + }, + }, + bypassPlatformSafetyChecksOnUserSchedule: { + serializedName: "bypassPlatformSafetyChecksOnUserSchedule", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const WinRMConfiguration = { + type: { + name: "Composite", + className: "WinRMConfiguration", + modelProperties: { + listeners: { + serializedName: "listeners", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "WinRMListener", + }, + }, + }, + }, + }, + }, +}; +const WinRMListener = { + type: { + name: "Composite", + className: "WinRMListener", + modelProperties: { + protocol: { + serializedName: "protocol", + type: { + name: "Enum", + allowedValues: ["Http", "Https"], + }, + }, + certificateUrl: { + serializedName: "certificateUrl", + type: { + name: "String", + }, + }, + }, + }, +}; +const LinuxConfiguration = { + type: { + name: "Composite", + className: "LinuxConfiguration", + modelProperties: { + disablePasswordAuthentication: { + serializedName: "disablePasswordAuthentication", + type: { + name: "Boolean", + }, + }, + ssh: { + serializedName: "ssh", + type: { + name: "Composite", + className: "SshConfiguration", + }, + }, + provisionVMAgent: { + serializedName: "provisionVMAgent", + type: { + name: "Boolean", + }, + }, + patchSettings: { + serializedName: "patchSettings", + type: { + name: "Composite", + className: "LinuxPatchSettings", + }, + }, + enableVMAgentPlatformUpdates: { + serializedName: "enableVMAgentPlatformUpdates", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const SshConfiguration = { + type: { + name: "Composite", + className: "SshConfiguration", + modelProperties: { + publicKeys: { + serializedName: "publicKeys", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SshPublicKey", + }, + }, + }, + }, + }, + }, +}; +const SshPublicKey = { + type: { + name: "Composite", + className: "SshPublicKey", + modelProperties: { + path: { + serializedName: "path", + type: { + name: "String", + }, + }, + keyData: { + serializedName: "keyData", + type: { + name: "String", + }, + }, + }, + }, +}; +const LinuxPatchSettings = { + type: { + name: "Composite", + className: "LinuxPatchSettings", + modelProperties: { + patchMode: { + serializedName: "patchMode", + type: { + name: "String", + }, + }, + assessmentMode: { + serializedName: "assessmentMode", + type: { + name: "String", + }, + }, + automaticByPlatformSettings: { + serializedName: "automaticByPlatformSettings", + type: { + name: "Composite", + className: "LinuxVMGuestPatchAutomaticByPlatformSettings", + }, + }, + }, + }, +}; +const LinuxVMGuestPatchAutomaticByPlatformSettings = { + type: { + name: "Composite", + className: "LinuxVMGuestPatchAutomaticByPlatformSettings", + modelProperties: { + rebootSetting: { + serializedName: "rebootSetting", + type: { + name: "String", + }, + }, + bypassPlatformSafetyChecksOnUserSchedule: { + serializedName: "bypassPlatformSafetyChecksOnUserSchedule", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const VaultSecretGroup = { + type: { + name: "Composite", + className: "VaultSecretGroup", + modelProperties: { + sourceVault: { + serializedName: "sourceVault", + type: { + name: "Composite", + className: "SubResource", + }, + }, + vaultCertificates: { + serializedName: "vaultCertificates", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VaultCertificate", + }, + }, + }, + }, + }, + }, +}; +const SubResource = { + type: { + name: "Composite", + className: "SubResource", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + }, + }, +}; +const VaultCertificate = { + type: { + name: "Composite", + className: "VaultCertificate", + modelProperties: { + certificateUrl: { + serializedName: "certificateUrl", + type: { + name: "String", + }, + }, + certificateStore: { + serializedName: "certificateStore", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetStorageProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetStorageProfile", + modelProperties: { + imageReference: { + serializedName: "imageReference", + type: { + name: "Composite", + className: "ImageReference", + }, + }, + osDisk: { + serializedName: "osDisk", + type: { + name: "Composite", + className: "VirtualMachineScaleSetOSDisk", + }, + }, + dataDisks: { + serializedName: "dataDisks", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetDataDisk", + }, + }, + }, + }, + diskControllerType: { + serializedName: "diskControllerType", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetOSDisk = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetOSDisk", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + caching: { + serializedName: "caching", + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + writeAcceleratorEnabled: { + serializedName: "writeAcceleratorEnabled", + type: { + name: "Boolean", + }, + }, + createOption: { + serializedName: "createOption", + required: true, + type: { + name: "String", + }, + }, + diffDiskSettings: { + serializedName: "diffDiskSettings", + type: { + name: "Composite", + className: "DiffDiskSettings", + }, + }, + diskSizeGB: { + serializedName: "diskSizeGB", + type: { + name: "Number", + }, + }, + osType: { + serializedName: "osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, + image: { + serializedName: "image", + type: { + name: "Composite", + className: "VirtualHardDisk", + }, + }, + vhdContainers: { + serializedName: "vhdContainers", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + managedDisk: { + serializedName: "managedDisk", + type: { + name: "Composite", + className: "VirtualMachineScaleSetManagedDiskParameters", + }, + }, + deleteOption: { + serializedName: "deleteOption", + type: { + name: "String", + }, + }, + }, + }, +}; +const DiffDiskSettings = { + type: { + name: "Composite", + className: "DiffDiskSettings", + modelProperties: { + option: { + serializedName: "option", + type: { + name: "String", + }, + }, + placement: { + serializedName: "placement", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualHardDisk = { + type: { + name: "Composite", + className: "VirtualHardDisk", + modelProperties: { + uri: { + serializedName: "uri", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetManagedDiskParameters = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetManagedDiskParameters", + modelProperties: { + storageAccountType: { + serializedName: "storageAccountType", + type: { + name: "String", + }, + }, + diskEncryptionSet: { + serializedName: "diskEncryptionSet", + type: { + name: "Composite", + className: "DiskEncryptionSetParameters", + }, + }, + securityProfile: { + serializedName: "securityProfile", + type: { + name: "Composite", + className: "VMDiskSecurityProfile", + }, + }, + }, + }, +}; +const VMDiskSecurityProfile = { + type: { + name: "Composite", + className: "VMDiskSecurityProfile", + modelProperties: { + securityEncryptionType: { + serializedName: "securityEncryptionType", + type: { + name: "String", + }, + }, + diskEncryptionSet: { + serializedName: "diskEncryptionSet", + type: { + name: "Composite", + className: "DiskEncryptionSetParameters", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetDataDisk = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetDataDisk", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + lun: { + serializedName: "lun", + required: true, + type: { + name: "Number", + }, + }, + caching: { + serializedName: "caching", + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + writeAcceleratorEnabled: { + serializedName: "writeAcceleratorEnabled", + type: { + name: "Boolean", + }, + }, + createOption: { + serializedName: "createOption", + required: true, + type: { + name: "String", + }, + }, + diskSizeGB: { + serializedName: "diskSizeGB", + type: { + name: "Number", + }, + }, + managedDisk: { + serializedName: "managedDisk", + type: { + name: "Composite", + className: "VirtualMachineScaleSetManagedDiskParameters", + }, + }, + diskIopsReadWrite: { + serializedName: "diskIOPSReadWrite", + type: { + name: "Number", + }, + }, + diskMBpsReadWrite: { + serializedName: "diskMBpsReadWrite", + type: { + name: "Number", + }, + }, + deleteOption: { + serializedName: "deleteOption", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetNetworkProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetNetworkProfile", + modelProperties: { + healthProbe: { + serializedName: "healthProbe", + type: { + name: "Composite", + className: "ApiEntityReference", + }, + }, + networkInterfaceConfigurations: { + serializedName: "networkInterfaceConfigurations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetNetworkConfiguration", + }, + }, + }, + }, + networkApiVersion: { + serializedName: "networkApiVersion", + type: { + name: "String", + }, + }, + }, + }, +}; +const ApiEntityReference = { + type: { + name: "Composite", + className: "ApiEntityReference", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetNetworkConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetNetworkConfiguration", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + primary: { + serializedName: "properties.primary", + type: { + name: "Boolean", + }, + }, + enableAcceleratedNetworking: { + serializedName: "properties.enableAcceleratedNetworking", + type: { + name: "Boolean", + }, + }, + disableTcpStateTracking: { + serializedName: "properties.disableTcpStateTracking", + type: { + name: "Boolean", + }, + }, + enableFpga: { + serializedName: "properties.enableFpga", + type: { + name: "Boolean", + }, + }, + networkSecurityGroup: { + serializedName: "properties.networkSecurityGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, + dnsSettings: { + serializedName: "properties.dnsSettings", + type: { + name: "Composite", + className: "VirtualMachineScaleSetNetworkConfigurationDnsSettings", + }, + }, + ipConfigurations: { + serializedName: "properties.ipConfigurations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetIPConfiguration", + }, + }, + }, + }, + enableIPForwarding: { + serializedName: "properties.enableIPForwarding", + type: { + name: "Boolean", + }, + }, + deleteOption: { + serializedName: "properties.deleteOption", + type: { + name: "String", + }, + }, + auxiliaryMode: { + serializedName: "properties.auxiliaryMode", + type: { + name: "String", + }, + }, + auxiliarySku: { + serializedName: "properties.auxiliarySku", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetNetworkConfigurationDnsSettings = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetNetworkConfigurationDnsSettings", + modelProperties: { + dnsServers: { + serializedName: "dnsServers", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetIPConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetIPConfiguration", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + subnet: { + serializedName: "properties.subnet", + type: { + name: "Composite", + className: "ApiEntityReference", + }, + }, + primary: { + serializedName: "properties.primary", + type: { + name: "Boolean", + }, + }, + publicIPAddressConfiguration: { + serializedName: "properties.publicIPAddressConfiguration", + type: { + name: "Composite", + className: "VirtualMachineScaleSetPublicIPAddressConfiguration", + }, + }, + privateIPAddressVersion: { + serializedName: "properties.privateIPAddressVersion", + type: { + name: "String", + }, + }, + applicationGatewayBackendAddressPools: { + serializedName: "properties.applicationGatewayBackendAddressPools", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + applicationSecurityGroups: { + serializedName: "properties.applicationSecurityGroups", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + loadBalancerBackendAddressPools: { + serializedName: "properties.loadBalancerBackendAddressPools", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + loadBalancerInboundNatPools: { + serializedName: "properties.loadBalancerInboundNatPools", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetPublicIPAddressConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetPublicIPAddressConfiguration", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "PublicIPAddressSku", + }, + }, + idleTimeoutInMinutes: { + serializedName: "properties.idleTimeoutInMinutes", + type: { + name: "Number", + }, + }, + dnsSettings: { + serializedName: "properties.dnsSettings", + type: { + name: "Composite", + className: "VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings", + }, + }, + ipTags: { + serializedName: "properties.ipTags", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetIpTag", + }, + }, + }, + }, + publicIPPrefix: { + serializedName: "properties.publicIPPrefix", + type: { + name: "Composite", + className: "SubResource", + }, + }, + publicIPAddressVersion: { + serializedName: "properties.publicIPAddressVersion", + type: { + name: "String", + }, + }, + deleteOption: { + serializedName: "properties.deleteOption", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings", + modelProperties: { + domainNameLabel: { + serializedName: "domainNameLabel", + required: true, + type: { + name: "String", + }, + }, + domainNameLabelScope: { + serializedName: "domainNameLabelScope", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetIpTag = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetIpTag", + modelProperties: { + ipTagType: { + serializedName: "ipTagType", + type: { + name: "String", + }, + }, + tag: { + serializedName: "tag", + type: { + name: "String", + }, + }, + }, + }, +}; +const PublicIPAddressSku = { + type: { + name: "Composite", + className: "PublicIPAddressSku", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + tier: { + serializedName: "tier", + type: { + name: "String", + }, + }, + }, + }, +}; +const SecurityProfile = { + type: { + name: "Composite", + className: "SecurityProfile", + modelProperties: { + uefiSettings: { + serializedName: "uefiSettings", + type: { + name: "Composite", + className: "UefiSettings", + }, + }, + encryptionAtHost: { + serializedName: "encryptionAtHost", + type: { + name: "Boolean", + }, + }, + securityType: { + serializedName: "securityType", + type: { + name: "String", + }, + }, + encryptionIdentity: { + serializedName: "encryptionIdentity", + type: { + name: "Composite", + className: "EncryptionIdentity", + }, + }, + proxyAgentSettings: { + serializedName: "proxyAgentSettings", + type: { + name: "Composite", + className: "ProxyAgentSettings", + }, + }, + }, + }, +}; +const UefiSettings = { + type: { + name: "Composite", + className: "UefiSettings", + modelProperties: { + secureBootEnabled: { + serializedName: "secureBootEnabled", + type: { + name: "Boolean", + }, + }, + vTpmEnabled: { + serializedName: "vTpmEnabled", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const EncryptionIdentity = { + type: { + name: "Composite", + className: "EncryptionIdentity", + modelProperties: { + userAssignedIdentityResourceId: { + serializedName: "userAssignedIdentityResourceId", + type: { + name: "String", + }, + }, + }, + }, +}; +const ProxyAgentSettings = { + type: { + name: "Composite", + className: "ProxyAgentSettings", + modelProperties: { + enabled: { + serializedName: "enabled", + type: { + name: "Boolean", + }, + }, + mode: { + serializedName: "mode", + type: { + name: "String", + }, + }, + keyIncarnationId: { + serializedName: "keyIncarnationId", + type: { + name: "Number", + }, + }, + }, + }, +}; +const DiagnosticsProfile = { + type: { + name: "Composite", + className: "DiagnosticsProfile", + modelProperties: { + bootDiagnostics: { + serializedName: "bootDiagnostics", + type: { + name: "Composite", + className: "BootDiagnostics", + }, + }, + }, + }, +}; +const BootDiagnostics = { + type: { + name: "Composite", + className: "BootDiagnostics", + modelProperties: { + enabled: { + serializedName: "enabled", + type: { + name: "Boolean", + }, + }, + storageUri: { + serializedName: "storageUri", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetExtensionProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetExtensionProfile", + modelProperties: { + extensions: { + serializedName: "extensions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetExtension", + }, + }, + }, + }, + extensionsTimeBudget: { + serializedName: "extensionsTimeBudget", + type: { + name: "String", + }, + }, + }, + }, +}; +const KeyVaultSecretReference = { + type: { + name: "Composite", + className: "KeyVaultSecretReference", + modelProperties: { + secretUrl: { + serializedName: "secretUrl", + required: true, + type: { + name: "String", + }, + }, + sourceVault: { + serializedName: "sourceVault", + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, +}; +const SubResourceReadOnly = { + type: { + name: "Composite", + className: "SubResourceReadOnly", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const BillingProfile = { + type: { + name: "Composite", + className: "BillingProfile", + modelProperties: { + maxPrice: { + serializedName: "maxPrice", + type: { + name: "Number", + }, + }, + }, + }, +}; +const ScheduledEventsProfile = { + type: { + name: "Composite", + className: "ScheduledEventsProfile", + modelProperties: { + terminateNotificationProfile: { + serializedName: "terminateNotificationProfile", + type: { + name: "Composite", + className: "TerminateNotificationProfile", + }, + }, + osImageNotificationProfile: { + serializedName: "osImageNotificationProfile", + type: { + name: "Composite", + className: "OSImageNotificationProfile", + }, + }, + }, + }, +}; +const TerminateNotificationProfile = { + type: { + name: "Composite", + className: "TerminateNotificationProfile", + modelProperties: { + notBeforeTimeout: { + serializedName: "notBeforeTimeout", + type: { + name: "String", + }, + }, + enable: { + serializedName: "enable", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const OSImageNotificationProfile = { + type: { + name: "Composite", + className: "OSImageNotificationProfile", + modelProperties: { + notBeforeTimeout: { + serializedName: "notBeforeTimeout", + type: { + name: "String", + }, + }, + enable: { + serializedName: "enable", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const CapacityReservationProfile = { + type: { + name: "Composite", + className: "CapacityReservationProfile", + modelProperties: { + capacityReservationGroup: { + serializedName: "capacityReservationGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, +}; +const ApplicationProfile = { + type: { + name: "Composite", + className: "ApplicationProfile", + modelProperties: { + galleryApplications: { + serializedName: "galleryApplications", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VMGalleryApplication", + }, + }, + }, + }, + }, + }, +}; +const VMGalleryApplication = { + type: { + name: "Composite", + className: "VMGalleryApplication", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "String", + }, + }, + order: { + serializedName: "order", + type: { + name: "Number", + }, + }, + packageReferenceId: { + serializedName: "packageReferenceId", + required: true, + type: { + name: "String", + }, + }, + configurationReference: { + serializedName: "configurationReference", + type: { + name: "String", + }, + }, + treatFailureAsDeploymentFailure: { + serializedName: "treatFailureAsDeploymentFailure", + type: { + name: "Boolean", + }, + }, + enableAutomaticUpgrade: { + serializedName: "enableAutomaticUpgrade", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetHardwareProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetHardwareProfile", + modelProperties: { + vmSizeProperties: { + serializedName: "vmSizeProperties", + type: { + name: "Composite", + className: "VMSizeProperties", + }, + }, + }, + }, +}; +const VMSizeProperties = { + type: { + name: "Composite", + className: "VMSizeProperties", + modelProperties: { + vCPUsAvailable: { + serializedName: "vCPUsAvailable", + type: { + name: "Number", + }, + }, + vCPUsPerCore: { + serializedName: "vCPUsPerCore", + type: { + name: "Number", + }, + }, + }, + }, +}; +const ServiceArtifactReference = { + type: { + name: "Composite", + className: "ServiceArtifactReference", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + }, + }, +}; +const SecurityPostureReference = { + type: { + name: "Composite", + className: "SecurityPostureReference", + modelProperties: { + id: { + serializedName: "id", + required: true, + type: { + name: "String", + }, + }, + excludeExtensions: { + serializedName: "excludeExtensions", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + isOverridable: { + serializedName: "isOverridable", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const AdditionalCapabilities = { + type: { + name: "Composite", + className: "AdditionalCapabilities", + modelProperties: { + ultraSSDEnabled: { + serializedName: "ultraSSDEnabled", + type: { + name: "Boolean", + }, + }, + hibernationEnabled: { + serializedName: "hibernationEnabled", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const ScaleInPolicy = { + type: { + name: "Composite", + className: "ScaleInPolicy", + modelProperties: { + rules: { + serializedName: "rules", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + forceDeletion: { + serializedName: "forceDeletion", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const SpotRestorePolicy = { + type: { + name: "Composite", + className: "SpotRestorePolicy", + modelProperties: { + enabled: { + serializedName: "enabled", + type: { + name: "Boolean", + }, + }, + restoreTimeout: { + serializedName: "restoreTimeout", + type: { + name: "String", + }, + }, + }, + }, +}; +const PriorityMixPolicy = { + type: { + name: "Composite", + className: "PriorityMixPolicy", + modelProperties: { + baseRegularPriorityCount: { + constraints: { + InclusiveMinimum: 0, + }, + serializedName: "baseRegularPriorityCount", + type: { + name: "Number", + }, + }, + regularPriorityPercentageAboveBase: { + constraints: { + InclusiveMaximum: 100, + InclusiveMinimum: 0, + }, + serializedName: "regularPriorityPercentageAboveBase", + type: { + name: "Number", + }, + }, + }, + }, +}; +const ResiliencyPolicy = { + type: { + name: "Composite", + className: "ResiliencyPolicy", + modelProperties: { + resilientVMCreationPolicy: { + serializedName: "resilientVMCreationPolicy", + type: { + name: "Composite", + className: "ResilientVMCreationPolicy", + }, + }, + resilientVMDeletionPolicy: { + serializedName: "resilientVMDeletionPolicy", + type: { + name: "Composite", + className: "ResilientVMDeletionPolicy", + }, + }, + }, + }, +}; +const ResilientVMCreationPolicy = { + type: { + name: "Composite", + className: "ResilientVMCreationPolicy", + modelProperties: { + enabled: { + serializedName: "enabled", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const ResilientVMDeletionPolicy = { + type: { + name: "Composite", + className: "ResilientVMDeletionPolicy", + modelProperties: { + enabled: { + serializedName: "enabled", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const SkuProfile = { + type: { + name: "Composite", + className: "SkuProfile", + modelProperties: { + vmSizes: { + serializedName: "vmSizes", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SkuProfileVMSize", + }, + }, + }, + }, + allocationStrategy: { + serializedName: "allocationStrategy", + type: { + name: "String", + }, + }, + }, + }, +}; +const SkuProfileVMSize = { + type: { + name: "Composite", + className: "SkuProfileVMSize", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetIdentity = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetIdentity", + modelProperties: { + principalId: { + serializedName: "principalId", + readOnly: true, + type: { + name: "String", + }, + }, + tenantId: { + serializedName: "tenantId", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + type: { + name: "Enum", + allowedValues: [ + "SystemAssigned", + "UserAssigned", + "SystemAssigned, UserAssigned", + "None", + ], + }, + }, + userAssignedIdentities: { + serializedName: "userAssignedIdentities", + type: { + name: "Dictionary", + value: { + type: { + name: "Composite", + className: "UserAssignedIdentitiesValue", + }, + }, + }, + }, + }, + }, +}; +const UserAssignedIdentitiesValue = { + type: { + name: "Composite", + className: "UserAssignedIdentitiesValue", + modelProperties: { + principalId: { + serializedName: "principalId", + readOnly: true, + type: { + name: "String", + }, + }, + clientId: { + serializedName: "clientId", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const ExtendedLocation = { + type: { + name: "Composite", + className: "ExtendedLocation", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + }, + }, +}; +const Resource = { + type: { + name: "Composite", + className: "Resource", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + required: true, + type: { + name: "String", + }, + }, + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetUpdateVMProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateVMProfile", + modelProperties: { + osProfile: { + serializedName: "osProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateOSProfile", + }, + }, + storageProfile: { + serializedName: "storageProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateStorageProfile", + }, + }, + networkProfile: { + serializedName: "networkProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateNetworkProfile", + }, + }, + securityPostureReference: { + serializedName: "securityPostureReference", + type: { + name: "Composite", + className: "SecurityPostureReferenceUpdate", + }, + }, + securityProfile: { + serializedName: "securityProfile", + type: { + name: "Composite", + className: "SecurityProfile", + }, + }, + diagnosticsProfile: { + serializedName: "diagnosticsProfile", + type: { + name: "Composite", + className: "DiagnosticsProfile", + }, + }, + extensionProfile: { + serializedName: "extensionProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetExtensionProfile", + }, + }, + licenseType: { + serializedName: "licenseType", + type: { + name: "String", + }, + }, + billingProfile: { + serializedName: "billingProfile", + type: { + name: "Composite", + className: "BillingProfile", + }, + }, + scheduledEventsProfile: { + serializedName: "scheduledEventsProfile", + type: { + name: "Composite", + className: "ScheduledEventsProfile", + }, + }, + userData: { + serializedName: "userData", + type: { + name: "String", + }, + }, + hardwareProfile: { + serializedName: "hardwareProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetHardwareProfile", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetUpdateOSProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateOSProfile", + modelProperties: { + customData: { + serializedName: "customData", + type: { + name: "String", + }, + }, + windowsConfiguration: { + serializedName: "windowsConfiguration", + type: { + name: "Composite", + className: "WindowsConfiguration", + }, + }, + linuxConfiguration: { + serializedName: "linuxConfiguration", + type: { + name: "Composite", + className: "LinuxConfiguration", + }, + }, + secrets: { + serializedName: "secrets", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VaultSecretGroup", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetUpdateStorageProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateStorageProfile", + modelProperties: { + imageReference: { + serializedName: "imageReference", + type: { + name: "Composite", + className: "ImageReference", + }, + }, + osDisk: { + serializedName: "osDisk", + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateOSDisk", + }, + }, + dataDisks: { + serializedName: "dataDisks", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetDataDisk", + }, + }, + }, + }, + diskControllerType: { + serializedName: "diskControllerType", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetUpdateOSDisk = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateOSDisk", + modelProperties: { + caching: { + serializedName: "caching", + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + writeAcceleratorEnabled: { + serializedName: "writeAcceleratorEnabled", + type: { + name: "Boolean", + }, + }, + diffDiskSettings: { + serializedName: "diffDiskSettings", + type: { + name: "Composite", + className: "DiffDiskSettings", + }, + }, + diskSizeGB: { + serializedName: "diskSizeGB", + type: { + name: "Number", + }, + }, + image: { + serializedName: "image", + type: { + name: "Composite", + className: "VirtualHardDisk", + }, + }, + vhdContainers: { + serializedName: "vhdContainers", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + managedDisk: { + serializedName: "managedDisk", + type: { + name: "Composite", + className: "VirtualMachineScaleSetManagedDiskParameters", + }, + }, + deleteOption: { + serializedName: "deleteOption", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetUpdateNetworkProfile = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateNetworkProfile", + modelProperties: { + healthProbe: { + serializedName: "healthProbe", + type: { + name: "Composite", + className: "ApiEntityReference", + }, + }, + networkInterfaceConfigurations: { + serializedName: "networkInterfaceConfigurations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateNetworkConfiguration", + }, + }, + }, + }, + networkApiVersion: { + serializedName: "networkApiVersion", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetUpdateNetworkConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateNetworkConfiguration", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + primary: { + serializedName: "properties.primary", + type: { + name: "Boolean", + }, + }, + enableAcceleratedNetworking: { + serializedName: "properties.enableAcceleratedNetworking", + type: { + name: "Boolean", + }, + }, + disableTcpStateTracking: { + serializedName: "properties.disableTcpStateTracking", + type: { + name: "Boolean", + }, + }, + enableFpga: { + serializedName: "properties.enableFpga", + type: { + name: "Boolean", + }, + }, + networkSecurityGroup: { + serializedName: "properties.networkSecurityGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, + dnsSettings: { + serializedName: "properties.dnsSettings", + type: { + name: "Composite", + className: "VirtualMachineScaleSetNetworkConfigurationDnsSettings", + }, + }, + ipConfigurations: { + serializedName: "properties.ipConfigurations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateIPConfiguration", + }, + }, + }, + }, + enableIPForwarding: { + serializedName: "properties.enableIPForwarding", + type: { + name: "Boolean", + }, + }, + deleteOption: { + serializedName: "properties.deleteOption", + type: { + name: "String", + }, + }, + auxiliaryMode: { + serializedName: "properties.auxiliaryMode", + type: { + name: "String", + }, + }, + auxiliarySku: { + serializedName: "properties.auxiliarySku", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetUpdateIPConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateIPConfiguration", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + subnet: { + serializedName: "properties.subnet", + type: { + name: "Composite", + className: "ApiEntityReference", + }, + }, + primary: { + serializedName: "properties.primary", + type: { + name: "Boolean", + }, + }, + publicIPAddressConfiguration: { + serializedName: "properties.publicIPAddressConfiguration", + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdatePublicIPAddressConfiguration", + }, + }, + privateIPAddressVersion: { + serializedName: "properties.privateIPAddressVersion", + type: { + name: "String", + }, + }, + applicationGatewayBackendAddressPools: { + serializedName: "properties.applicationGatewayBackendAddressPools", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + applicationSecurityGroups: { + serializedName: "properties.applicationSecurityGroups", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + loadBalancerBackendAddressPools: { + serializedName: "properties.loadBalancerBackendAddressPools", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + loadBalancerInboundNatPools: { + serializedName: "properties.loadBalancerInboundNatPools", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetUpdatePublicIPAddressConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdatePublicIPAddressConfiguration", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + idleTimeoutInMinutes: { + serializedName: "properties.idleTimeoutInMinutes", + type: { + name: "Number", + }, + }, + dnsSettings: { + serializedName: "properties.dnsSettings", + type: { + name: "Composite", + className: "VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings", + }, + }, + publicIPPrefix: { + serializedName: "properties.publicIPPrefix", + type: { + name: "Composite", + className: "SubResource", + }, + }, + deleteOption: { + serializedName: "properties.deleteOption", + type: { + name: "String", + }, + }, + }, + }, +}; +const SecurityPostureReferenceUpdate = { + type: { + name: "Composite", + className: "SecurityPostureReferenceUpdate", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + excludeExtensions: { + serializedName: "excludeExtensions", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + isOverridable: { + serializedName: "isOverridable", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const UpdateResource = { + type: { + name: "Composite", + className: "UpdateResource", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMInstanceIDs = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMInstanceIDs", + modelProperties: { + instanceIds: { + serializedName: "instanceIds", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMInstanceRequiredIDs = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMInstanceRequiredIDs", + modelProperties: { + instanceIds: { + serializedName: "instanceIds", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetInstanceView = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetInstanceView", + modelProperties: { + virtualMachine: { + serializedName: "virtualMachine", + type: { + name: "Composite", + className: "VirtualMachineScaleSetInstanceViewStatusesSummary", + }, + }, + extensions: { + serializedName: "extensions", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMExtensionsSummary", + }, + }, + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + orchestrationServices: { + serializedName: "orchestrationServices", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "OrchestrationServiceSummary", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetInstanceViewStatusesSummary = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetInstanceViewStatusesSummary", + modelProperties: { + statusesSummary: { + serializedName: "statusesSummary", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineStatusCodeCount", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineStatusCodeCount = { + type: { + name: "Composite", + className: "VirtualMachineStatusCodeCount", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String", + }, + }, + count: { + serializedName: "count", + readOnly: true, + type: { + name: "Number", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMExtensionsSummary = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMExtensionsSummary", + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + statusesSummary: { + serializedName: "statusesSummary", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineStatusCodeCount", + }, + }, + }, + }, + }, + }, +}; +const InstanceViewStatus = { + type: { + name: "Composite", + className: "InstanceViewStatus", + modelProperties: { + code: { + serializedName: "code", + type: { + name: "String", + }, + }, + level: { + serializedName: "level", + type: { + name: "Enum", + allowedValues: ["Info", "Warning", "Error"], + }, + }, + displayStatus: { + serializedName: "displayStatus", + type: { + name: "String", + }, + }, + message: { + serializedName: "message", + type: { + name: "String", + }, + }, + time: { + serializedName: "time", + type: { + name: "DateTime", + }, + }, + }, + }, +}; +const OrchestrationServiceSummary = { + type: { + name: "Composite", + className: "OrchestrationServiceSummary", + modelProperties: { + serviceName: { + serializedName: "serviceName", + readOnly: true, + type: { + name: "String", + }, + }, + serviceState: { + serializedName: "serviceState", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetExtensionListResult = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetExtensionListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetExtension", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetListWithLinkResult = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetListWithLinkResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSet", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetListSkusResult = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetListSkusResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetSku", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetSku = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetSku", + modelProperties: { + resourceType: { + serializedName: "resourceType", + readOnly: true, + type: { + name: "String", + }, + }, + sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, + capacity: { + serializedName: "capacity", + type: { + name: "Composite", + className: "VirtualMachineScaleSetSkuCapacity", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetSkuCapacity = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetSkuCapacity", + modelProperties: { + minimum: { + serializedName: "minimum", + readOnly: true, + type: { + name: "Number", + }, + }, + maximum: { + serializedName: "maximum", + readOnly: true, + type: { + name: "Number", + }, + }, + defaultCapacity: { + serializedName: "defaultCapacity", + readOnly: true, + type: { + name: "Number", + }, + }, + scaleType: { + serializedName: "scaleType", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["Automatic", "None"], + }, + }, + }, + }, +}; +const VirtualMachineScaleSetListOSUpgradeHistory = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetListOSUpgradeHistory", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "UpgradeOperationHistoricalStatusInfo", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const UpgradeOperationHistoricalStatusInfo = { + type: { + name: "Composite", + className: "UpgradeOperationHistoricalStatusInfo", + modelProperties: { + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "UpgradeOperationHistoricalStatusInfoProperties", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const UpgradeOperationHistoricalStatusInfoProperties = { + type: { + name: "Composite", + className: "UpgradeOperationHistoricalStatusInfoProperties", + modelProperties: { + runningStatus: { + serializedName: "runningStatus", + type: { + name: "Composite", + className: "UpgradeOperationHistoryStatus", + }, + }, + progress: { + serializedName: "progress", + type: { + name: "Composite", + className: "RollingUpgradeProgressInfo", + }, + }, + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ApiError", + }, + }, + startedBy: { + serializedName: "startedBy", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["Unknown", "User", "Platform"], + }, + }, + targetImageReference: { + serializedName: "targetImageReference", + type: { + name: "Composite", + className: "ImageReference", + }, + }, + rollbackInfo: { + serializedName: "rollbackInfo", + type: { + name: "Composite", + className: "RollbackStatusInfo", + }, + }, + }, + }, +}; +const UpgradeOperationHistoryStatus = { + type: { + name: "Composite", + className: "UpgradeOperationHistoryStatus", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "Enum", + allowedValues: [ + "RollingForward", + "Cancelled", + "Completed", + "Faulted", + ], + }, + }, + startTime: { + serializedName: "startTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + endTime: { + serializedName: "endTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + }, + }, +}; +const RollingUpgradeProgressInfo = { + type: { + name: "Composite", + className: "RollingUpgradeProgressInfo", + modelProperties: { + successfulInstanceCount: { + serializedName: "successfulInstanceCount", + readOnly: true, + type: { + name: "Number", + }, + }, + failedInstanceCount: { + serializedName: "failedInstanceCount", + readOnly: true, + type: { + name: "Number", + }, + }, + inProgressInstanceCount: { + serializedName: "inProgressInstanceCount", + readOnly: true, + type: { + name: "Number", + }, + }, + pendingInstanceCount: { + serializedName: "pendingInstanceCount", + readOnly: true, + type: { + name: "Number", + }, + }, + }, + }, +}; +const RollbackStatusInfo = { + type: { + name: "Composite", + className: "RollbackStatusInfo", + modelProperties: { + successfullyRolledbackInstanceCount: { + serializedName: "successfullyRolledbackInstanceCount", + readOnly: true, + type: { + name: "Number", + }, + }, + failedRolledbackInstanceCount: { + serializedName: "failedRolledbackInstanceCount", + readOnly: true, + type: { + name: "Number", + }, + }, + rollbackError: { + serializedName: "rollbackError", + type: { + name: "Composite", + className: "ApiError", + }, + }, + }, + }, +}; +const VirtualMachineReimageParameters = { + type: { + name: "Composite", + className: "VirtualMachineReimageParameters", + modelProperties: { + tempDisk: { + serializedName: "tempDisk", + type: { + name: "Boolean", + }, + }, + exactVersion: { + serializedName: "exactVersion", + type: { + name: "String", + }, + }, + osProfile: { + serializedName: "osProfile", + type: { + name: "Composite", + className: "OSProfileProvisioningData", + }, + }, + }, + }, +}; +const OSProfileProvisioningData = { + type: { + name: "Composite", + className: "OSProfileProvisioningData", + modelProperties: { + adminPassword: { + serializedName: "adminPassword", + type: { + name: "String", + }, + }, + customData: { + serializedName: "customData", + type: { + name: "String", + }, + }, + }, + }, +}; +const RollingUpgradeRunningStatus = { + type: { + name: "Composite", + className: "RollingUpgradeRunningStatus", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "Enum", + allowedValues: [ + "RollingForward", + "Cancelled", + "Completed", + "Faulted", + ], + }, + }, + startTime: { + serializedName: "startTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + lastAction: { + serializedName: "lastAction", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["Start", "Cancel"], + }, + }, + lastActionTime: { + serializedName: "lastActionTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + }, + }, +}; +const RecoveryWalkResponse = { + type: { + name: "Composite", + className: "RecoveryWalkResponse", + modelProperties: { + walkPerformed: { + serializedName: "walkPerformed", + readOnly: true, + type: { + name: "Boolean", + }, + }, + nextPlatformUpdateDomain: { + serializedName: "nextPlatformUpdateDomain", + readOnly: true, + type: { + name: "Number", + }, + }, + }, + }, +}; +const VMScaleSetConvertToSinglePlacementGroupInput = { + type: { + name: "Composite", + className: "VMScaleSetConvertToSinglePlacementGroupInput", + modelProperties: { + activePlacementGroupId: { + serializedName: "activePlacementGroupId", + type: { + name: "String", + }, + }, + }, + }, +}; +const OrchestrationServiceStateInput = { + type: { + name: "Composite", + className: "OrchestrationServiceStateInput", + modelProperties: { + serviceName: { + serializedName: "serviceName", + required: true, + type: { + name: "String", + }, + }, + action: { + serializedName: "action", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineExtensionInstanceView = { + type: { + name: "Composite", + className: "VirtualMachineExtensionInstanceView", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + typeHandlerVersion: { + serializedName: "typeHandlerVersion", + type: { + name: "String", + }, + }, + substatuses: { + serializedName: "substatuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMExtensionsListResult = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMExtensionsListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMExtension", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMInstanceView = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMInstanceView", + modelProperties: { + platformUpdateDomain: { + serializedName: "platformUpdateDomain", + type: { + name: "Number", + }, + }, + platformFaultDomain: { + serializedName: "platformFaultDomain", + type: { + name: "Number", + }, + }, + rdpThumbPrint: { + serializedName: "rdpThumbPrint", + type: { + name: "String", + }, + }, + vmAgent: { + serializedName: "vmAgent", + type: { + name: "Composite", + className: "VirtualMachineAgentInstanceView", + }, + }, + maintenanceRedeployStatus: { + serializedName: "maintenanceRedeployStatus", + type: { + name: "Composite", + className: "MaintenanceRedeployStatus", + }, + }, + disks: { + serializedName: "disks", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DiskInstanceView", + }, + }, + }, + }, + extensions: { + serializedName: "extensions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineExtensionInstanceView", + }, + }, + }, + }, + vmHealth: { + serializedName: "vmHealth", + type: { + name: "Composite", + className: "VirtualMachineHealthStatus", + }, + }, + bootDiagnostics: { + serializedName: "bootDiagnostics", + type: { + name: "Composite", + className: "BootDiagnosticsInstanceView", + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + assignedHost: { + serializedName: "assignedHost", + readOnly: true, + type: { + name: "String", + }, + }, + placementGroupId: { + serializedName: "placementGroupId", + type: { + name: "String", + }, + }, + computerName: { + serializedName: "computerName", + type: { + name: "String", + }, + }, + osName: { + serializedName: "osName", + type: { + name: "String", + }, + }, + osVersion: { + serializedName: "osVersion", + type: { + name: "String", + }, + }, + hyperVGeneration: { + serializedName: "hyperVGeneration", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineAgentInstanceView = { + type: { + name: "Composite", + className: "VirtualMachineAgentInstanceView", + modelProperties: { + vmAgentVersion: { + serializedName: "vmAgentVersion", + type: { + name: "String", + }, + }, + extensionHandlers: { + serializedName: "extensionHandlers", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineExtensionHandlerInstanceView", + }, + }, + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineExtensionHandlerInstanceView = { + type: { + name: "Composite", + className: "VirtualMachineExtensionHandlerInstanceView", + modelProperties: { + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + typeHandlerVersion: { + serializedName: "typeHandlerVersion", + type: { + name: "String", + }, + }, + status: { + serializedName: "status", + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, +}; +const MaintenanceRedeployStatus = { + type: { + name: "Composite", + className: "MaintenanceRedeployStatus", + modelProperties: { + isCustomerInitiatedMaintenanceAllowed: { + serializedName: "isCustomerInitiatedMaintenanceAllowed", + type: { + name: "Boolean", + }, + }, + preMaintenanceWindowStartTime: { + serializedName: "preMaintenanceWindowStartTime", + type: { + name: "DateTime", + }, + }, + preMaintenanceWindowEndTime: { + serializedName: "preMaintenanceWindowEndTime", + type: { + name: "DateTime", + }, + }, + maintenanceWindowStartTime: { + serializedName: "maintenanceWindowStartTime", + type: { + name: "DateTime", + }, + }, + maintenanceWindowEndTime: { + serializedName: "maintenanceWindowEndTime", + type: { + name: "DateTime", + }, + }, + lastOperationResultCode: { + serializedName: "lastOperationResultCode", + type: { + name: "Enum", + allowedValues: [ + "None", + "RetryLater", + "MaintenanceAborted", + "MaintenanceCompleted", + ], + }, + }, + lastOperationMessage: { + serializedName: "lastOperationMessage", + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskInstanceView = { + type: { + name: "Composite", + className: "DiskInstanceView", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + encryptionSettings: { + serializedName: "encryptionSettings", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DiskEncryptionSettings", + }, + }, + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const DiskEncryptionSettings = { + type: { + name: "Composite", + className: "DiskEncryptionSettings", + modelProperties: { + diskEncryptionKey: { + serializedName: "diskEncryptionKey", + type: { + name: "Composite", + className: "KeyVaultSecretReference", + }, + }, + keyEncryptionKey: { + serializedName: "keyEncryptionKey", + type: { + name: "Composite", + className: "KeyVaultKeyReference", + }, + }, + enabled: { + serializedName: "enabled", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const KeyVaultKeyReference = { + type: { + name: "Composite", + className: "KeyVaultKeyReference", + modelProperties: { + keyUrl: { + serializedName: "keyUrl", + required: true, + type: { + name: "String", + }, + }, + sourceVault: { + serializedName: "sourceVault", + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, +}; +const VirtualMachineHealthStatus = { + type: { + name: "Composite", + className: "VirtualMachineHealthStatus", + modelProperties: { + status: { + serializedName: "status", + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, +}; +const BootDiagnosticsInstanceView = { + type: { + name: "Composite", + className: "BootDiagnosticsInstanceView", + modelProperties: { + consoleScreenshotBlobUri: { + serializedName: "consoleScreenshotBlobUri", + readOnly: true, + type: { + name: "String", + }, + }, + serialConsoleLogBlobUri: { + serializedName: "serialConsoleLogBlobUri", + readOnly: true, + type: { + name: "String", + }, + }, + status: { + serializedName: "status", + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, +}; +const HardwareProfile = { + type: { + name: "Composite", + className: "HardwareProfile", + modelProperties: { + vmSize: { + serializedName: "vmSize", + type: { + name: "String", + }, + }, + vmSizeProperties: { + serializedName: "vmSizeProperties", + type: { + name: "Composite", + className: "VMSizeProperties", + }, + }, + }, + }, +}; +const StorageProfile = { + type: { + name: "Composite", + className: "StorageProfile", + modelProperties: { + imageReference: { + serializedName: "imageReference", + type: { + name: "Composite", + className: "ImageReference", + }, + }, + osDisk: { + serializedName: "osDisk", + type: { + name: "Composite", + className: "OSDisk", + }, + }, + dataDisks: { + serializedName: "dataDisks", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DataDisk", + }, + }, + }, + }, + diskControllerType: { + serializedName: "diskControllerType", + type: { + name: "String", + }, + }, + }, + }, +}; +const OSDisk = { + type: { + name: "Composite", + className: "OSDisk", + modelProperties: { + osType: { + serializedName: "osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, + encryptionSettings: { + serializedName: "encryptionSettings", + type: { + name: "Composite", + className: "DiskEncryptionSettings", + }, + }, + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + vhd: { + serializedName: "vhd", + type: { + name: "Composite", + className: "VirtualHardDisk", + }, + }, + image: { + serializedName: "image", + type: { + name: "Composite", + className: "VirtualHardDisk", + }, + }, + caching: { + serializedName: "caching", + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + writeAcceleratorEnabled: { + serializedName: "writeAcceleratorEnabled", + type: { + name: "Boolean", + }, + }, + diffDiskSettings: { + serializedName: "diffDiskSettings", + type: { + name: "Composite", + className: "DiffDiskSettings", + }, + }, + createOption: { + serializedName: "createOption", + required: true, + type: { + name: "String", + }, + }, + diskSizeGB: { + serializedName: "diskSizeGB", + type: { + name: "Number", + }, + }, + managedDisk: { + serializedName: "managedDisk", + type: { + name: "Composite", + className: "ManagedDiskParameters", + }, + }, + deleteOption: { + serializedName: "deleteOption", + type: { + name: "String", + }, + }, + }, + }, +}; +const DataDisk = { + type: { + name: "Composite", + className: "DataDisk", + modelProperties: { + lun: { + serializedName: "lun", + required: true, + type: { + name: "Number", + }, + }, + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + vhd: { + serializedName: "vhd", + type: { + name: "Composite", + className: "VirtualHardDisk", + }, + }, + image: { + serializedName: "image", + type: { + name: "Composite", + className: "VirtualHardDisk", + }, + }, + caching: { + serializedName: "caching", + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + writeAcceleratorEnabled: { + serializedName: "writeAcceleratorEnabled", + type: { + name: "Boolean", + }, + }, + createOption: { + serializedName: "createOption", + required: true, + type: { + name: "String", + }, + }, + diskSizeGB: { + serializedName: "diskSizeGB", + type: { + name: "Number", + }, + }, + managedDisk: { + serializedName: "managedDisk", + type: { + name: "Composite", + className: "ManagedDiskParameters", + }, + }, + sourceResource: { + serializedName: "sourceResource", + type: { + name: "Composite", + className: "ApiEntityReference", + }, + }, + toBeDetached: { + serializedName: "toBeDetached", + type: { + name: "Boolean", + }, + }, + diskIopsReadWrite: { + serializedName: "diskIOPSReadWrite", + readOnly: true, + type: { + name: "Number", + }, + }, + diskMBpsReadWrite: { + serializedName: "diskMBpsReadWrite", + readOnly: true, + type: { + name: "Number", + }, + }, + detachOption: { + serializedName: "detachOption", + type: { + name: "String", + }, + }, + deleteOption: { + serializedName: "deleteOption", + type: { + name: "String", + }, + }, + }, + }, +}; +const OSProfile = { + type: { + name: "Composite", + className: "OSProfile", + modelProperties: { + computerName: { + serializedName: "computerName", + type: { + name: "String", + }, + }, + adminUsername: { + serializedName: "adminUsername", + type: { + name: "String", + }, + }, + adminPassword: { + serializedName: "adminPassword", + type: { + name: "String", + }, + }, + customData: { + serializedName: "customData", + type: { + name: "String", + }, + }, + windowsConfiguration: { + serializedName: "windowsConfiguration", + type: { + name: "Composite", + className: "WindowsConfiguration", + }, + }, + linuxConfiguration: { + serializedName: "linuxConfiguration", + type: { + name: "Composite", + className: "LinuxConfiguration", + }, + }, + secrets: { + serializedName: "secrets", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VaultSecretGroup", + }, + }, + }, + }, + allowExtensionOperations: { + serializedName: "allowExtensionOperations", + type: { + name: "Boolean", + }, + }, + requireGuestProvisionSignal: { + serializedName: "requireGuestProvisionSignal", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const NetworkProfile = { + type: { + name: "Composite", + className: "NetworkProfile", + modelProperties: { + networkInterfaces: { + serializedName: "networkInterfaces", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "NetworkInterfaceReference", + }, + }, + }, + }, + networkApiVersion: { + serializedName: "networkApiVersion", + type: { + name: "String", + }, + }, + networkInterfaceConfigurations: { + serializedName: "networkInterfaceConfigurations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineNetworkInterfaceConfiguration", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineNetworkInterfaceConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineNetworkInterfaceConfiguration", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + primary: { + serializedName: "properties.primary", + type: { + name: "Boolean", + }, + }, + deleteOption: { + serializedName: "properties.deleteOption", + type: { + name: "String", + }, + }, + enableAcceleratedNetworking: { + serializedName: "properties.enableAcceleratedNetworking", + type: { + name: "Boolean", + }, + }, + disableTcpStateTracking: { + serializedName: "properties.disableTcpStateTracking", + type: { + name: "Boolean", + }, + }, + enableFpga: { + serializedName: "properties.enableFpga", + type: { + name: "Boolean", + }, + }, + enableIPForwarding: { + serializedName: "properties.enableIPForwarding", + type: { + name: "Boolean", + }, + }, + networkSecurityGroup: { + serializedName: "properties.networkSecurityGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, + dnsSettings: { + serializedName: "properties.dnsSettings", + type: { + name: "Composite", + className: "VirtualMachineNetworkInterfaceDnsSettingsConfiguration", + }, + }, + ipConfigurations: { + serializedName: "properties.ipConfigurations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineNetworkInterfaceIPConfiguration", + }, + }, + }, + }, + dscpConfiguration: { + serializedName: "properties.dscpConfiguration", + type: { + name: "Composite", + className: "SubResource", + }, + }, + auxiliaryMode: { + serializedName: "properties.auxiliaryMode", + type: { + name: "String", + }, + }, + auxiliarySku: { + serializedName: "properties.auxiliarySku", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineNetworkInterfaceDnsSettingsConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineNetworkInterfaceDnsSettingsConfiguration", + modelProperties: { + dnsServers: { + serializedName: "dnsServers", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineNetworkInterfaceIPConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineNetworkInterfaceIPConfiguration", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + subnet: { + serializedName: "properties.subnet", + type: { + name: "Composite", + className: "SubResource", + }, + }, + primary: { + serializedName: "properties.primary", + type: { + name: "Boolean", + }, + }, + publicIPAddressConfiguration: { + serializedName: "properties.publicIPAddressConfiguration", + type: { + name: "Composite", + className: "VirtualMachinePublicIPAddressConfiguration", + }, + }, + privateIPAddressVersion: { + serializedName: "properties.privateIPAddressVersion", + type: { + name: "String", + }, + }, + applicationSecurityGroups: { + serializedName: "properties.applicationSecurityGroups", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + applicationGatewayBackendAddressPools: { + serializedName: "properties.applicationGatewayBackendAddressPools", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + loadBalancerBackendAddressPools: { + serializedName: "properties.loadBalancerBackendAddressPools", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachinePublicIPAddressConfiguration = { + type: { + name: "Composite", + className: "VirtualMachinePublicIPAddressConfiguration", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "PublicIPAddressSku", + }, + }, + idleTimeoutInMinutes: { + serializedName: "properties.idleTimeoutInMinutes", + type: { + name: "Number", + }, + }, + deleteOption: { + serializedName: "properties.deleteOption", + type: { + name: "String", + }, + }, + dnsSettings: { + serializedName: "properties.dnsSettings", + type: { + name: "Composite", + className: "VirtualMachinePublicIPAddressDnsSettingsConfiguration", + }, + }, + ipTags: { + serializedName: "properties.ipTags", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineIpTag", + }, + }, + }, + }, + publicIPPrefix: { + serializedName: "properties.publicIPPrefix", + type: { + name: "Composite", + className: "SubResource", + }, + }, + publicIPAddressVersion: { + serializedName: "properties.publicIPAddressVersion", + type: { + name: "String", + }, + }, + publicIPAllocationMethod: { + serializedName: "properties.publicIPAllocationMethod", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachinePublicIPAddressDnsSettingsConfiguration = { + type: { + name: "Composite", + className: "VirtualMachinePublicIPAddressDnsSettingsConfiguration", + modelProperties: { + domainNameLabel: { + serializedName: "domainNameLabel", + required: true, + type: { + name: "String", + }, + }, + domainNameLabelScope: { + serializedName: "domainNameLabelScope", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineIpTag = { + type: { + name: "Composite", + className: "VirtualMachineIpTag", + modelProperties: { + ipTagType: { + serializedName: "ipTagType", + type: { + name: "String", + }, + }, + tag: { + serializedName: "tag", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMNetworkProfileConfiguration = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMNetworkProfileConfiguration", + modelProperties: { + networkInterfaceConfigurations: { + serializedName: "networkInterfaceConfigurations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetNetworkConfiguration", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMProtectionPolicy = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMProtectionPolicy", + modelProperties: { + protectFromScaleIn: { + serializedName: "protectFromScaleIn", + type: { + name: "Boolean", + }, + }, + protectFromScaleSetActions: { + serializedName: "protectFromScaleSetActions", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const ResourceWithOptionalLocation = { + type: { + name: "Composite", + className: "ResourceWithOptionalLocation", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String", + }, + }, + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + }, + }, +}; +const VirtualMachineIdentity = { + type: { + name: "Composite", + className: "VirtualMachineIdentity", + modelProperties: { + principalId: { + serializedName: "principalId", + readOnly: true, + type: { + name: "String", + }, + }, + tenantId: { + serializedName: "tenantId", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + type: { + name: "Enum", + allowedValues: [ + "SystemAssigned", + "UserAssigned", + "SystemAssigned, UserAssigned", + "None", + ], + }, + }, + userAssignedIdentities: { + serializedName: "userAssignedIdentities", + type: { + name: "Dictionary", + value: { + type: { + name: "Composite", + className: "UserAssignedIdentitiesValue", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMListResult = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVM", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const RetrieveBootDiagnosticsDataResult = { + type: { + name: "Composite", + className: "RetrieveBootDiagnosticsDataResult", + modelProperties: { + consoleScreenshotBlobUri: { + serializedName: "consoleScreenshotBlobUri", + readOnly: true, + type: { + name: "String", + }, + }, + serialConsoleLogBlobUri: { + serializedName: "serialConsoleLogBlobUri", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const AttachDetachDataDisksRequest = { + type: { + name: "Composite", + className: "AttachDetachDataDisksRequest", + modelProperties: { + dataDisksToAttach: { + constraints: { + MinItems: 1, + }, + serializedName: "dataDisksToAttach", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DataDisksToAttach", + }, + }, + }, + }, + dataDisksToDetach: { + constraints: { + MinItems: 1, + }, + serializedName: "dataDisksToDetach", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DataDisksToDetach", + }, + }, + }, + }, + }, + }, +}; +const DataDisksToAttach = { + type: { + name: "Composite", + className: "DataDisksToAttach", + modelProperties: { + diskId: { + serializedName: "diskId", + required: true, + type: { + name: "String", + }, + }, + lun: { + serializedName: "lun", + type: { + name: "Number", + }, + }, + caching: { + serializedName: "caching", + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + deleteOption: { + serializedName: "deleteOption", + type: { + name: "String", + }, + }, + diskEncryptionSet: { + serializedName: "diskEncryptionSet", + type: { + name: "Composite", + className: "DiskEncryptionSetParameters", + }, + }, + writeAcceleratorEnabled: { + serializedName: "writeAcceleratorEnabled", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const DataDisksToDetach = { + type: { + name: "Composite", + className: "DataDisksToDetach", + modelProperties: { + diskId: { + serializedName: "diskId", + required: true, + type: { + name: "String", + }, + }, + detachOption: { + serializedName: "detachOption", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineExtensionsListResult = { + type: { + name: "Composite", + className: "VirtualMachineExtensionsListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineExtension", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineListResult = { + type: { + name: "Composite", + className: "VirtualMachineListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachine", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineInstanceView = { + type: { + name: "Composite", + className: "VirtualMachineInstanceView", + modelProperties: { + platformUpdateDomain: { + serializedName: "platformUpdateDomain", + type: { + name: "Number", + }, + }, + platformFaultDomain: { + serializedName: "platformFaultDomain", + type: { + name: "Number", + }, + }, + computerName: { + serializedName: "computerName", + type: { + name: "String", + }, + }, + osName: { + serializedName: "osName", + type: { + name: "String", + }, + }, + osVersion: { + serializedName: "osVersion", + type: { + name: "String", + }, + }, + hyperVGeneration: { + serializedName: "hyperVGeneration", + type: { + name: "String", + }, + }, + rdpThumbPrint: { + serializedName: "rdpThumbPrint", + type: { + name: "String", + }, + }, + vmAgent: { + serializedName: "vmAgent", + type: { + name: "Composite", + className: "VirtualMachineAgentInstanceView", + }, + }, + maintenanceRedeployStatus: { + serializedName: "maintenanceRedeployStatus", + type: { + name: "Composite", + className: "MaintenanceRedeployStatus", + }, + }, + disks: { + serializedName: "disks", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DiskInstanceView", + }, + }, + }, + }, + extensions: { + serializedName: "extensions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineExtensionInstanceView", + }, + }, + }, + }, + vmHealth: { + serializedName: "vmHealth", + type: { + name: "Composite", + className: "VirtualMachineHealthStatus", + }, + }, + bootDiagnostics: { + serializedName: "bootDiagnostics", + type: { + name: "Composite", + className: "BootDiagnosticsInstanceView", + }, + }, + assignedHost: { + serializedName: "assignedHost", + readOnly: true, + type: { + name: "String", + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + patchStatus: { + serializedName: "patchStatus", + type: { + name: "Composite", + className: "VirtualMachinePatchStatus", + }, + }, + isVMInStandbyPool: { + serializedName: "isVMInStandbyPool", + readOnly: true, + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const VirtualMachinePatchStatus = { + type: { + name: "Composite", + className: "VirtualMachinePatchStatus", + modelProperties: { + availablePatchSummary: { + serializedName: "availablePatchSummary", + type: { + name: "Composite", + className: "AvailablePatchSummary", + }, + }, + lastPatchInstallationSummary: { + serializedName: "lastPatchInstallationSummary", + type: { + name: "Composite", + className: "LastPatchInstallationSummary", + }, + }, + configurationStatuses: { + serializedName: "configurationStatuses", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const AvailablePatchSummary = { + type: { + name: "Composite", + className: "AvailablePatchSummary", + modelProperties: { + status: { + serializedName: "status", + readOnly: true, + type: { + name: "String", + }, + }, + assessmentActivityId: { + serializedName: "assessmentActivityId", + readOnly: true, + type: { + name: "String", + }, + }, + rebootPending: { + serializedName: "rebootPending", + readOnly: true, + type: { + name: "Boolean", + }, + }, + criticalAndSecurityPatchCount: { + serializedName: "criticalAndSecurityPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + otherPatchCount: { + serializedName: "otherPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + startTime: { + serializedName: "startTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + lastModifiedTime: { + serializedName: "lastModifiedTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ApiError", + }, + }, + }, + }, +}; +const LastPatchInstallationSummary = { + type: { + name: "Composite", + className: "LastPatchInstallationSummary", + modelProperties: { + status: { + serializedName: "status", + readOnly: true, + type: { + name: "String", + }, + }, + installationActivityId: { + serializedName: "installationActivityId", + readOnly: true, + type: { + name: "String", + }, + }, + maintenanceWindowExceeded: { + serializedName: "maintenanceWindowExceeded", + readOnly: true, + type: { + name: "Boolean", + }, + }, + notSelectedPatchCount: { + serializedName: "notSelectedPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + excludedPatchCount: { + serializedName: "excludedPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + pendingPatchCount: { + serializedName: "pendingPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + installedPatchCount: { + serializedName: "installedPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + failedPatchCount: { + serializedName: "failedPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + startTime: { + serializedName: "startTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + lastModifiedTime: { + serializedName: "lastModifiedTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ApiError", + }, + }, + }, + }, +}; +const VirtualMachineCaptureParameters = { + type: { + name: "Composite", + className: "VirtualMachineCaptureParameters", + modelProperties: { + vhdPrefix: { + serializedName: "vhdPrefix", + required: true, + type: { + name: "String", + }, + }, + destinationContainerName: { + serializedName: "destinationContainerName", + required: true, + type: { + name: "String", + }, + }, + overwriteVhds: { + serializedName: "overwriteVhds", + required: true, + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const VirtualMachineAssessPatchesResult = { + type: { + name: "Composite", + className: "VirtualMachineAssessPatchesResult", + modelProperties: { + status: { + serializedName: "status", + readOnly: true, + type: { + name: "String", + }, + }, + assessmentActivityId: { + serializedName: "assessmentActivityId", + readOnly: true, + type: { + name: "String", + }, + }, + rebootPending: { + serializedName: "rebootPending", + readOnly: true, + type: { + name: "Boolean", + }, + }, + criticalAndSecurityPatchCount: { + serializedName: "criticalAndSecurityPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + otherPatchCount: { + serializedName: "otherPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + startDateTime: { + serializedName: "startDateTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + availablePatches: { + serializedName: "availablePatches", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineSoftwarePatchProperties", + }, + }, + }, + }, + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ApiError", + }, + }, + }, + }, +}; +const VirtualMachineSoftwarePatchProperties = { + type: { + name: "Composite", + className: "VirtualMachineSoftwarePatchProperties", + modelProperties: { + patchId: { + serializedName: "patchId", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + version: { + serializedName: "version", + readOnly: true, + type: { + name: "String", + }, + }, + kbId: { + serializedName: "kbId", + readOnly: true, + type: { + name: "String", + }, + }, + classifications: { + serializedName: "classifications", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + rebootBehavior: { + serializedName: "rebootBehavior", + readOnly: true, + type: { + name: "String", + }, + }, + activityId: { + serializedName: "activityId", + readOnly: true, + type: { + name: "String", + }, + }, + publishedDate: { + serializedName: "publishedDate", + readOnly: true, + type: { + name: "DateTime", + }, + }, + lastModifiedDateTime: { + serializedName: "lastModifiedDateTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + assessmentState: { + serializedName: "assessmentState", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineInstallPatchesParameters = { + type: { + name: "Composite", + className: "VirtualMachineInstallPatchesParameters", + modelProperties: { + maximumDuration: { + serializedName: "maximumDuration", + type: { + name: "String", + }, + }, + rebootSetting: { + serializedName: "rebootSetting", + required: true, + type: { + name: "String", + }, + }, + windowsParameters: { + serializedName: "windowsParameters", + type: { + name: "Composite", + className: "WindowsParameters", + }, + }, + linuxParameters: { + serializedName: "linuxParameters", + type: { + name: "Composite", + className: "LinuxParameters", + }, + }, + }, + }, +}; +const WindowsParameters = { + type: { + name: "Composite", + className: "WindowsParameters", + modelProperties: { + classificationsToInclude: { + serializedName: "classificationsToInclude", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + kbNumbersToInclude: { + serializedName: "kbNumbersToInclude", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + kbNumbersToExclude: { + serializedName: "kbNumbersToExclude", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + excludeKbsRequiringReboot: { + serializedName: "excludeKbsRequiringReboot", + type: { + name: "Boolean", + }, + }, + maxPatchPublishDate: { + serializedName: "maxPatchPublishDate", + type: { + name: "DateTime", + }, + }, + }, + }, +}; +const LinuxParameters = { + type: { + name: "Composite", + className: "LinuxParameters", + modelProperties: { + classificationsToInclude: { + serializedName: "classificationsToInclude", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + packageNameMasksToInclude: { + serializedName: "packageNameMasksToInclude", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + packageNameMasksToExclude: { + serializedName: "packageNameMasksToExclude", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + maintenanceRunId: { + serializedName: "maintenanceRunId", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineInstallPatchesResult = { + type: { + name: "Composite", + className: "VirtualMachineInstallPatchesResult", + modelProperties: { + status: { + serializedName: "status", + readOnly: true, + type: { + name: "String", + }, + }, + installationActivityId: { + serializedName: "installationActivityId", + readOnly: true, + type: { + name: "String", + }, + }, + rebootStatus: { + serializedName: "rebootStatus", + readOnly: true, + type: { + name: "String", + }, + }, + maintenanceWindowExceeded: { + serializedName: "maintenanceWindowExceeded", + readOnly: true, + type: { + name: "Boolean", + }, + }, + excludedPatchCount: { + serializedName: "excludedPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + notSelectedPatchCount: { + serializedName: "notSelectedPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + pendingPatchCount: { + serializedName: "pendingPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + installedPatchCount: { + serializedName: "installedPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + failedPatchCount: { + serializedName: "failedPatchCount", + readOnly: true, + type: { + name: "Number", + }, + }, + patches: { + serializedName: "patches", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PatchInstallationDetail", + }, + }, + }, + }, + startDateTime: { + serializedName: "startDateTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ApiError", + }, + }, + }, + }, +}; +const PatchInstallationDetail = { + type: { + name: "Composite", + className: "PatchInstallationDetail", + modelProperties: { + patchId: { + serializedName: "patchId", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + version: { + serializedName: "version", + readOnly: true, + type: { + name: "String", + }, + }, + kbId: { + serializedName: "kbId", + readOnly: true, + type: { + name: "String", + }, + }, + classifications: { + serializedName: "classifications", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + installationState: { + serializedName: "installationState", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const PurchasePlan = { + type: { + name: "Composite", + className: "PurchasePlan", + modelProperties: { + publisher: { + serializedName: "publisher", + required: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + product: { + serializedName: "product", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const OSDiskImage = { + type: { + name: "Composite", + className: "OSDiskImage", + modelProperties: { + operatingSystem: { + serializedName: "operatingSystem", + required: true, + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, + }, + }, +}; +const DataDiskImage = { + type: { + name: "Composite", + className: "DataDiskImage", + modelProperties: { + lun: { + serializedName: "lun", + readOnly: true, + type: { + name: "Number", + }, + }, + }, + }, +}; +const AutomaticOSUpgradeProperties = { + type: { + name: "Composite", + className: "AutomaticOSUpgradeProperties", + modelProperties: { + automaticOSUpgradeSupported: { + serializedName: "automaticOSUpgradeSupported", + required: true, + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const DisallowedConfiguration = { + type: { + name: "Composite", + className: "DisallowedConfiguration", + modelProperties: { + vmDiskType: { + serializedName: "vmDiskType", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineImageFeature = { + type: { + name: "Composite", + className: "VirtualMachineImageFeature", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + value: { + serializedName: "value", + type: { + name: "String", + }, + }, + }, + }, +}; +const ImageDeprecationStatus = { + type: { + name: "Composite", + className: "ImageDeprecationStatus", + modelProperties: { + imageState: { + serializedName: "imageState", + type: { + name: "String", + }, + }, + scheduledDeprecationTime: { + serializedName: "scheduledDeprecationTime", + type: { + name: "DateTime", + }, + }, + alternativeOption: { + serializedName: "alternativeOption", + type: { + name: "Composite", + className: "AlternativeOption", + }, + }, + }, + }, +}; +const AlternativeOption = { + type: { + name: "Composite", + className: "AlternativeOption", + modelProperties: { + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + value: { + serializedName: "value", + type: { + name: "String", + }, + }, + }, + }, +}; +const VmImagesInEdgeZoneListResult = { + type: { + name: "Composite", + className: "VmImagesInEdgeZoneListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const AvailabilitySetListResult = { + type: { + name: "Composite", + className: "AvailabilitySetListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AvailabilitySet", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const ProximityPlacementGroupPropertiesIntent = { + type: { + name: "Composite", + className: "ProximityPlacementGroupPropertiesIntent", + modelProperties: { + vmSizes: { + serializedName: "vmSizes", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const ProximityPlacementGroupListResult = { + type: { + name: "Composite", + className: "ProximityPlacementGroupListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ProximityPlacementGroup", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const DedicatedHostGroupInstanceView = { + type: { + name: "Composite", + className: "DedicatedHostGroupInstanceView", + modelProperties: { + hosts: { + serializedName: "hosts", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DedicatedHostInstanceViewWithName", + }, + }, + }, + }, + }, + }, +}; +const DedicatedHostInstanceView = { + type: { + name: "Composite", + className: "DedicatedHostInstanceView", + modelProperties: { + assetId: { + serializedName: "assetId", + readOnly: true, + type: { + name: "String", + }, + }, + availableCapacity: { + serializedName: "availableCapacity", + type: { + name: "Composite", + className: "DedicatedHostAvailableCapacity", + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const DedicatedHostAvailableCapacity = { + type: { + name: "Composite", + className: "DedicatedHostAvailableCapacity", + modelProperties: { + allocatableVMs: { + serializedName: "allocatableVMs", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DedicatedHostAllocatableVM", + }, + }, + }, + }, + }, + }, +}; +const DedicatedHostAllocatableVM = { + type: { + name: "Composite", + className: "DedicatedHostAllocatableVM", + modelProperties: { + vmSize: { + serializedName: "vmSize", + type: { + name: "String", + }, + }, + count: { + serializedName: "count", + type: { + name: "Number", + }, + }, + }, + }, +}; +const DedicatedHostGroupPropertiesAdditionalCapabilities = { + type: { + name: "Composite", + className: "DedicatedHostGroupPropertiesAdditionalCapabilities", + modelProperties: { + ultraSSDEnabled: { + serializedName: "ultraSSDEnabled", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const DedicatedHostGroupListResult = { + type: { + name: "Composite", + className: "DedicatedHostGroupListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DedicatedHostGroup", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const DedicatedHostListResult = { + type: { + name: "Composite", + className: "DedicatedHostListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DedicatedHost", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const DedicatedHostSizeListResult = { + type: { + name: "Composite", + className: "DedicatedHostSizeListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const SshPublicKeysGroupListResult = { + type: { + name: "Composite", + className: "SshPublicKeysGroupListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SshPublicKeyResource", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const SshGenerateKeyPairInputParameters = { + type: { + name: "Composite", + className: "SshGenerateKeyPairInputParameters", + modelProperties: { + encryptionType: { + serializedName: "encryptionType", + type: { + name: "String", + }, + }, + }, + }, +}; +const SshPublicKeyGenerateKeyPairResult = { + type: { + name: "Composite", + className: "SshPublicKeyGenerateKeyPairResult", + modelProperties: { + privateKey: { + serializedName: "privateKey", + required: true, + type: { + name: "String", + }, + }, + publicKey: { + serializedName: "publicKey", + required: true, + type: { + name: "String", + }, + }, + id: { + serializedName: "id", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const ImageStorageProfile = { + type: { + name: "Composite", + className: "ImageStorageProfile", + modelProperties: { + osDisk: { + serializedName: "osDisk", + type: { + name: "Composite", + className: "ImageOSDisk", + }, + }, + dataDisks: { + serializedName: "dataDisks", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ImageDataDisk", + }, + }, + }, + }, + zoneResilient: { + serializedName: "zoneResilient", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const ImageDisk = { + type: { + name: "Composite", + className: "ImageDisk", + modelProperties: { + snapshot: { + serializedName: "snapshot", + type: { + name: "Composite", + className: "SubResource", + }, + }, + managedDisk: { + serializedName: "managedDisk", + type: { + name: "Composite", + className: "SubResource", + }, + }, + blobUri: { + serializedName: "blobUri", + type: { + name: "String", + }, + }, + caching: { + serializedName: "caching", + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + diskSizeGB: { + serializedName: "diskSizeGB", + type: { + name: "Number", + }, + }, + storageAccountType: { + serializedName: "storageAccountType", + type: { + name: "String", + }, + }, + diskEncryptionSet: { + serializedName: "diskEncryptionSet", + type: { + name: "Composite", + className: "DiskEncryptionSetParameters", + }, + }, + }, + }, +}; +const ImageListResult = { + type: { + name: "Composite", + className: "ImageListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Image", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const RestorePointCollectionSourceProperties = { + type: { + name: "Composite", + className: "RestorePointCollectionSourceProperties", + modelProperties: { + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + }, + }, +}; +const RestorePointSourceMetadata = { + type: { + name: "Composite", + className: "RestorePointSourceMetadata", + modelProperties: { + hardwareProfile: { + serializedName: "hardwareProfile", + type: { + name: "Composite", + className: "HardwareProfile", + }, + }, + storageProfile: { + serializedName: "storageProfile", + type: { + name: "Composite", + className: "RestorePointSourceVMStorageProfile", + }, + }, + osProfile: { + serializedName: "osProfile", + type: { + name: "Composite", + className: "OSProfile", + }, + }, + diagnosticsProfile: { + serializedName: "diagnosticsProfile", + type: { + name: "Composite", + className: "DiagnosticsProfile", + }, + }, + licenseType: { + serializedName: "licenseType", + readOnly: true, + type: { + name: "String", + }, + }, + vmId: { + serializedName: "vmId", + readOnly: true, + type: { + name: "String", + }, + }, + securityProfile: { + serializedName: "securityProfile", + type: { + name: "Composite", + className: "SecurityProfile", + }, + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + userData: { + serializedName: "userData", + readOnly: true, + type: { + name: "String", + }, + }, + hyperVGeneration: { + serializedName: "hyperVGeneration", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const RestorePointSourceVMStorageProfile = { + type: { + name: "Composite", + className: "RestorePointSourceVMStorageProfile", + modelProperties: { + osDisk: { + serializedName: "osDisk", + type: { + name: "Composite", + className: "RestorePointSourceVmosDisk", + }, + }, + dataDisks: { + serializedName: "dataDisks", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RestorePointSourceVMDataDisk", + }, + }, + }, + }, + diskControllerType: { + serializedName: "diskControllerType", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const RestorePointSourceVmosDisk = { + type: { + name: "Composite", + className: "RestorePointSourceVmosDisk", + modelProperties: { + osType: { + serializedName: "osType", + readOnly: true, + type: { + name: "String", + }, + }, + encryptionSettings: { + serializedName: "encryptionSettings", + type: { + name: "Composite", + className: "DiskEncryptionSettings", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + caching: { + serializedName: "caching", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + diskSizeGB: { + serializedName: "diskSizeGB", + readOnly: true, + type: { + name: "Number", + }, + }, + managedDisk: { + serializedName: "managedDisk", + type: { + name: "Composite", + className: "ManagedDiskParameters", + }, + }, + diskRestorePoint: { + serializedName: "diskRestorePoint", + type: { + name: "Composite", + className: "DiskRestorePointAttributes", + }, + }, + writeAcceleratorEnabled: { + serializedName: "writeAcceleratorEnabled", + readOnly: true, + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const RestorePointEncryption = { + type: { + name: "Composite", + className: "RestorePointEncryption", + modelProperties: { + diskEncryptionSet: { + serializedName: "diskEncryptionSet", + type: { + name: "Composite", + className: "DiskEncryptionSetParameters", + }, + }, + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + }, + }, +}; +const RestorePointSourceVMDataDisk = { + type: { + name: "Composite", + className: "RestorePointSourceVMDataDisk", + modelProperties: { + lun: { + serializedName: "lun", + readOnly: true, + type: { + name: "Number", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + caching: { + serializedName: "caching", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + diskSizeGB: { + serializedName: "diskSizeGB", + readOnly: true, + type: { + name: "Number", + }, + }, + managedDisk: { + serializedName: "managedDisk", + type: { + name: "Composite", + className: "ManagedDiskParameters", + }, + }, + diskRestorePoint: { + serializedName: "diskRestorePoint", + type: { + name: "Composite", + className: "DiskRestorePointAttributes", + }, + }, + writeAcceleratorEnabled: { + serializedName: "writeAcceleratorEnabled", + readOnly: true, + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const RestorePointInstanceView = { + type: { + name: "Composite", + className: "RestorePointInstanceView", + modelProperties: { + diskRestorePoints: { + serializedName: "diskRestorePoints", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DiskRestorePointInstanceView", + }, + }, + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const DiskRestorePointInstanceView = { + type: { + name: "Composite", + className: "DiskRestorePointInstanceView", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + replicationStatus: { + serializedName: "replicationStatus", + type: { + name: "Composite", + className: "DiskRestorePointReplicationStatus", + }, + }, + }, + }, +}; +const DiskRestorePointReplicationStatus = { + type: { + name: "Composite", + className: "DiskRestorePointReplicationStatus", + modelProperties: { + status: { + serializedName: "status", + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + completionPercent: { + serializedName: "completionPercent", + type: { + name: "Number", + }, + }, + }, + }, +}; +const ProxyResource = { + type: { + name: "Composite", + className: "ProxyResource", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const RestorePointCollectionListResult = { + type: { + name: "Composite", + className: "RestorePointCollectionListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RestorePointCollection", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const CapacityReservationGroupInstanceView = { + type: { + name: "Composite", + className: "CapacityReservationGroupInstanceView", + modelProperties: { + capacityReservations: { + serializedName: "capacityReservations", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CapacityReservationInstanceViewWithName", + }, + }, + }, + }, + sharedSubscriptionIds: { + serializedName: "sharedSubscriptionIds", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, + }, + }, +}; +const CapacityReservationInstanceView = { + type: { + name: "Composite", + className: "CapacityReservationInstanceView", + modelProperties: { + utilizationInfo: { + serializedName: "utilizationInfo", + type: { + name: "Composite", + className: "CapacityReservationUtilization", + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const CapacityReservationUtilization = { + type: { + name: "Composite", + className: "CapacityReservationUtilization", + modelProperties: { + currentCapacity: { + serializedName: "currentCapacity", + readOnly: true, + type: { + name: "Number", + }, + }, + virtualMachinesAllocated: { + serializedName: "virtualMachinesAllocated", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, + }, + }, +}; +const ResourceSharingProfile = { + type: { + name: "Composite", + className: "ResourceSharingProfile", + modelProperties: { + subscriptionIds: { + serializedName: "subscriptionIds", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + }, + }, +}; +const CapacityReservationGroupListResult = { + type: { + name: "Composite", + className: "CapacityReservationGroupListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CapacityReservationGroup", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const CapacityReservationListResult = { + type: { + name: "Composite", + className: "CapacityReservationListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CapacityReservation", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const LogAnalyticsInputBase = { + type: { + name: "Composite", + className: "LogAnalyticsInputBase", + modelProperties: { + blobContainerSasUri: { + serializedName: "blobContainerSasUri", + required: true, + type: { + name: "String", + }, + }, + fromTime: { + serializedName: "fromTime", + required: true, + type: { + name: "DateTime", + }, + }, + toTime: { + serializedName: "toTime", + required: true, + type: { + name: "DateTime", + }, + }, + groupByThrottlePolicy: { + serializedName: "groupByThrottlePolicy", + type: { + name: "Boolean", + }, + }, + groupByOperationName: { + serializedName: "groupByOperationName", + type: { + name: "Boolean", + }, + }, + groupByResourceName: { + serializedName: "groupByResourceName", + type: { + name: "Boolean", + }, + }, + groupByClientApplicationId: { + serializedName: "groupByClientApplicationId", + type: { + name: "Boolean", + }, + }, + groupByUserAgent: { + serializedName: "groupByUserAgent", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const LogAnalyticsOperationResult = { + type: { + name: "Composite", + className: "LogAnalyticsOperationResult", + modelProperties: { + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "LogAnalyticsOutput", + }, + }, + }, + }, +}; +const LogAnalyticsOutput = { + type: { + name: "Composite", + className: "LogAnalyticsOutput", + modelProperties: { + output: { + serializedName: "output", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const RunCommandListResult = { + type: { + name: "Composite", + className: "RunCommandListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RunCommandDocumentBase", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const RunCommandDocumentBase = { + type: { + name: "Composite", + className: "RunCommandDocumentBase", + modelProperties: { + schema: { + serializedName: "$schema", + required: true, + type: { + name: "String", + }, + }, + id: { + serializedName: "id", + required: true, + type: { + name: "String", + }, + }, + osType: { + serializedName: "osType", + required: true, + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, + label: { + serializedName: "label", + required: true, + type: { + name: "String", + }, + }, + description: { + serializedName: "description", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const RunCommandParameterDefinition = { + type: { + name: "Composite", + className: "RunCommandParameterDefinition", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + required: true, + type: { + name: "String", + }, + }, + defaultValue: { + serializedName: "defaultValue", + type: { + name: "String", + }, + }, + required: { + defaultValue: false, + serializedName: "required", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const RunCommandInput = { + type: { + name: "Composite", + className: "RunCommandInput", + modelProperties: { + commandId: { + serializedName: "commandId", + required: true, + type: { + name: "String", + }, + }, + script: { + serializedName: "script", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + parameters: { + serializedName: "parameters", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RunCommandInputParameter", + }, + }, + }, + }, + }, + }, +}; +const RunCommandInputParameter = { + type: { + name: "Composite", + className: "RunCommandInputParameter", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + value: { + serializedName: "value", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const RunCommandResult = { + type: { + name: "Composite", + className: "RunCommandResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineRunCommandScriptSource = { + type: { + name: "Composite", + className: "VirtualMachineRunCommandScriptSource", + modelProperties: { + script: { + serializedName: "script", + type: { + name: "String", + }, + }, + scriptUri: { + serializedName: "scriptUri", + type: { + name: "String", + }, + }, + commandId: { + serializedName: "commandId", + type: { + name: "String", + }, + }, + scriptUriManagedIdentity: { + serializedName: "scriptUriManagedIdentity", + type: { + name: "Composite", + className: "RunCommandManagedIdentity", + }, + }, + }, + }, +}; +const RunCommandManagedIdentity = { + type: { + name: "Composite", + className: "RunCommandManagedIdentity", + modelProperties: { + clientId: { + serializedName: "clientId", + type: { + name: "String", + }, + }, + objectId: { + serializedName: "objectId", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineRunCommandInstanceView = { + type: { + name: "Composite", + className: "VirtualMachineRunCommandInstanceView", + modelProperties: { + executionState: { + serializedName: "executionState", + type: { + name: "String", + }, + }, + executionMessage: { + serializedName: "executionMessage", + type: { + name: "String", + }, + }, + exitCode: { + serializedName: "exitCode", + type: { + name: "Number", + }, + }, + output: { + serializedName: "output", + type: { + name: "String", + }, + }, + error: { + serializedName: "error", + type: { + name: "String", + }, + }, + startTime: { + serializedName: "startTime", + type: { + name: "DateTime", + }, + }, + endTime: { + serializedName: "endTime", + type: { + name: "DateTime", + }, + }, + statuses: { + serializedName: "statuses", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const VirtualMachineRunCommandsListResult = { + type: { + name: "Composite", + className: "VirtualMachineRunCommandsListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineRunCommand", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskSku = { + type: { + name: "Composite", + className: "DiskSku", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + tier: { + serializedName: "tier", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskPurchasePlan = { + type: { + name: "Composite", + className: "DiskPurchasePlan", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + publisher: { + serializedName: "publisher", + required: true, + type: { + name: "String", + }, + }, + product: { + serializedName: "product", + required: true, + type: { + name: "String", + }, + }, + promotionCode: { + serializedName: "promotionCode", + type: { + name: "String", + }, + }, + }, + }, +}; +const SupportedCapabilities = { + type: { + name: "Composite", + className: "SupportedCapabilities", + modelProperties: { + diskControllerTypes: { + serializedName: "diskControllerTypes", + type: { + name: "String", + }, + }, + acceleratedNetwork: { + serializedName: "acceleratedNetwork", + type: { + name: "Boolean", + }, + }, + architecture: { + serializedName: "architecture", + type: { + name: "String", + }, + }, + }, + }, +}; +const CreationData = { + type: { + name: "Composite", + className: "CreationData", + modelProperties: { + createOption: { + serializedName: "createOption", + required: true, + type: { + name: "String", + }, + }, + storageAccountId: { + serializedName: "storageAccountId", + type: { + name: "String", + }, + }, + imageReference: { + serializedName: "imageReference", + type: { + name: "Composite", + className: "ImageDiskReference", + }, + }, + galleryImageReference: { + serializedName: "galleryImageReference", + type: { + name: "Composite", + className: "ImageDiskReference", + }, + }, + sourceUri: { + serializedName: "sourceUri", + type: { + name: "String", + }, + }, + sourceResourceId: { + serializedName: "sourceResourceId", + type: { + name: "String", + }, + }, + sourceUniqueId: { + serializedName: "sourceUniqueId", + readOnly: true, + type: { + name: "String", + }, + }, + uploadSizeBytes: { + serializedName: "uploadSizeBytes", + type: { + name: "Number", + }, + }, + logicalSectorSize: { + serializedName: "logicalSectorSize", + type: { + name: "Number", + }, + }, + securityDataUri: { + serializedName: "securityDataUri", + type: { + name: "String", + }, + }, + performancePlus: { + serializedName: "performancePlus", + type: { + name: "Boolean", + }, + }, + elasticSanResourceId: { + serializedName: "elasticSanResourceId", + type: { + name: "String", + }, + }, + provisionedBandwidthCopySpeed: { + serializedName: "provisionedBandwidthCopySpeed", + type: { + name: "String", + }, + }, + }, + }, +}; +const ImageDiskReference = { + type: { + name: "Composite", + className: "ImageDiskReference", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + sharedGalleryImageId: { + serializedName: "sharedGalleryImageId", + type: { + name: "String", + }, + }, + communityGalleryImageId: { + serializedName: "communityGalleryImageId", + type: { + name: "String", + }, + }, + lun: { + serializedName: "lun", + type: { + name: "Number", + }, + }, + }, + }, +}; +const EncryptionSettingsCollection = { + type: { + name: "Composite", + className: "EncryptionSettingsCollection", + modelProperties: { + enabled: { + serializedName: "enabled", + required: true, + type: { + name: "Boolean", + }, + }, + encryptionSettings: { + serializedName: "encryptionSettings", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "EncryptionSettingsElement", + }, + }, + }, + }, + encryptionSettingsVersion: { + serializedName: "encryptionSettingsVersion", + type: { + name: "String", + }, + }, + }, + }, +}; +const EncryptionSettingsElement = { + type: { + name: "Composite", + className: "EncryptionSettingsElement", + modelProperties: { + diskEncryptionKey: { + serializedName: "diskEncryptionKey", + type: { + name: "Composite", + className: "KeyVaultAndSecretReference", + }, + }, + keyEncryptionKey: { + serializedName: "keyEncryptionKey", + type: { + name: "Composite", + className: "KeyVaultAndKeyReference", + }, + }, + }, + }, +}; +const KeyVaultAndSecretReference = { + type: { + name: "Composite", + className: "KeyVaultAndSecretReference", + modelProperties: { + sourceVault: { + serializedName: "sourceVault", + type: { + name: "Composite", + className: "SourceVault", + }, + }, + secretUrl: { + serializedName: "secretUrl", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const SourceVault = { + type: { + name: "Composite", + className: "SourceVault", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + }, + }, +}; +const KeyVaultAndKeyReference = { + type: { + name: "Composite", + className: "KeyVaultAndKeyReference", + modelProperties: { + sourceVault: { + serializedName: "sourceVault", + type: { + name: "Composite", + className: "SourceVault", + }, + }, + keyUrl: { + serializedName: "keyUrl", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const Encryption = { + type: { + name: "Composite", + className: "Encryption", + modelProperties: { + diskEncryptionSetId: { + serializedName: "diskEncryptionSetId", + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + }, + }, +}; +const ShareInfoElement = { + type: { + name: "Composite", + className: "ShareInfoElement", + modelProperties: { + vmUri: { + serializedName: "vmUri", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const PropertyUpdatesInProgress = { + type: { + name: "Composite", + className: "PropertyUpdatesInProgress", + modelProperties: { + targetTier: { + serializedName: "targetTier", + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskSecurityProfile = { + type: { + name: "Composite", + className: "DiskSecurityProfile", + modelProperties: { + securityType: { + serializedName: "securityType", + type: { + name: "String", + }, + }, + secureVMDiskEncryptionSetId: { + serializedName: "secureVMDiskEncryptionSetId", + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskUpdate = { + type: { + name: "Composite", + className: "DiskUpdate", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "DiskSku", + }, + }, + osType: { + serializedName: "properties.osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, + diskSizeGB: { + serializedName: "properties.diskSizeGB", + type: { + name: "Number", + }, + }, + encryptionSettingsCollection: { + serializedName: "properties.encryptionSettingsCollection", + type: { + name: "Composite", + className: "EncryptionSettingsCollection", + }, + }, + diskIopsReadWrite: { + serializedName: "properties.diskIOPSReadWrite", + type: { + name: "Number", + }, + }, + diskMBpsReadWrite: { + serializedName: "properties.diskMBpsReadWrite", + type: { + name: "Number", + }, + }, + diskIopsReadOnly: { + serializedName: "properties.diskIOPSReadOnly", + type: { + name: "Number", + }, + }, + diskMBpsReadOnly: { + serializedName: "properties.diskMBpsReadOnly", + type: { + name: "Number", + }, + }, + maxShares: { + serializedName: "properties.maxShares", + type: { + name: "Number", + }, + }, + encryption: { + serializedName: "properties.encryption", + type: { + name: "Composite", + className: "Encryption", + }, + }, + networkAccessPolicy: { + serializedName: "properties.networkAccessPolicy", + type: { + name: "String", + }, + }, + diskAccessId: { + serializedName: "properties.diskAccessId", + type: { + name: "String", + }, + }, + tier: { + serializedName: "properties.tier", + type: { + name: "String", + }, + }, + burstingEnabled: { + serializedName: "properties.burstingEnabled", + type: { + name: "Boolean", + }, + }, + purchasePlan: { + serializedName: "properties.purchasePlan", + type: { + name: "Composite", + className: "DiskPurchasePlan", + }, + }, + supportedCapabilities: { + serializedName: "properties.supportedCapabilities", + type: { + name: "Composite", + className: "SupportedCapabilities", + }, + }, + propertyUpdatesInProgress: { + serializedName: "properties.propertyUpdatesInProgress", + type: { + name: "Composite", + className: "PropertyUpdatesInProgress", + }, + }, + supportsHibernation: { + serializedName: "properties.supportsHibernation", + type: { + name: "Boolean", + }, + }, + publicNetworkAccess: { + serializedName: "properties.publicNetworkAccess", + type: { + name: "String", + }, + }, + dataAccessAuthMode: { + serializedName: "properties.dataAccessAuthMode", + type: { + name: "String", + }, + }, + optimizedForFrequentAttach: { + serializedName: "properties.optimizedForFrequentAttach", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const DiskList = { + type: { + name: "Composite", + className: "DiskList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Disk", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const GrantAccessData = { + type: { + name: "Composite", + className: "GrantAccessData", + modelProperties: { + access: { + serializedName: "access", + required: true, + type: { + name: "String", + }, + }, + durationInSeconds: { + serializedName: "durationInSeconds", + required: true, + type: { + name: "Number", + }, + }, + getSecureVMGuestStateSAS: { + serializedName: "getSecureVMGuestStateSAS", + type: { + name: "Boolean", + }, + }, + fileFormat: { + serializedName: "fileFormat", + type: { + name: "String", + }, + }, + }, + }, +}; +const AccessUri = { + type: { + name: "Composite", + className: "AccessUri", + modelProperties: { + accessSAS: { + serializedName: "accessSAS", + readOnly: true, + type: { + name: "String", + }, + }, + securityDataAccessSAS: { + serializedName: "securityDataAccessSAS", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const PrivateEndpointConnection = { + type: { + name: "Composite", + className: "PrivateEndpointConnection", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + privateEndpoint: { + serializedName: "properties.privateEndpoint", + type: { + name: "Composite", + className: "PrivateEndpoint", + }, + }, + privateLinkServiceConnectionState: { + serializedName: "properties.privateLinkServiceConnectionState", + type: { + name: "Composite", + className: "PrivateLinkServiceConnectionState", + }, + }, + provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const PrivateEndpoint = { + type: { + name: "Composite", + className: "PrivateEndpoint", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const PrivateLinkServiceConnectionState = { + type: { + name: "Composite", + className: "PrivateLinkServiceConnectionState", + modelProperties: { + status: { + serializedName: "status", + type: { + name: "String", + }, + }, + description: { + serializedName: "description", + type: { + name: "String", + }, + }, + actionsRequired: { + serializedName: "actionsRequired", + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskAccessUpdate = { + type: { + name: "Composite", + className: "DiskAccessUpdate", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + }, + }, +}; +const DiskAccessList = { + type: { + name: "Composite", + className: "DiskAccessList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DiskAccess", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const PrivateLinkResourceListResult = { + type: { + name: "Composite", + className: "PrivateLinkResourceListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PrivateLinkResource", + }, + }, + }, + }, + }, + }, +}; +const PrivateLinkResource = { + type: { + name: "Composite", + className: "PrivateLinkResource", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + groupId: { + serializedName: "properties.groupId", + readOnly: true, + type: { + name: "String", + }, + }, + requiredMembers: { + serializedName: "properties.requiredMembers", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + requiredZoneNames: { + serializedName: "properties.requiredZoneNames", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const PrivateEndpointConnectionListResult = { + type: { + name: "Composite", + className: "PrivateEndpointConnectionListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PrivateEndpointConnection", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const EncryptionSetIdentity = { + type: { + name: "Composite", + className: "EncryptionSetIdentity", + modelProperties: { + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + principalId: { + serializedName: "principalId", + readOnly: true, + type: { + name: "String", + }, + }, + tenantId: { + serializedName: "tenantId", + readOnly: true, + type: { + name: "String", + }, + }, + userAssignedIdentities: { + serializedName: "userAssignedIdentities", + type: { + name: "Dictionary", + value: { + type: { + name: "Composite", + className: "UserAssignedIdentitiesValue", + }, + }, + }, + }, + }, + }, +}; +const KeyForDiskEncryptionSet = { + type: { + name: "Composite", + className: "KeyForDiskEncryptionSet", + modelProperties: { + sourceVault: { + serializedName: "sourceVault", + type: { + name: "Composite", + className: "SourceVault", + }, + }, + keyUrl: { + serializedName: "keyUrl", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskEncryptionSetUpdate = { + type: { + name: "Composite", + className: "DiskEncryptionSetUpdate", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "EncryptionSetIdentity", + }, + }, + encryptionType: { + serializedName: "properties.encryptionType", + type: { + name: "String", + }, + }, + activeKey: { + serializedName: "properties.activeKey", + type: { + name: "Composite", + className: "KeyForDiskEncryptionSet", + }, + }, + rotationToLatestKeyVersionEnabled: { + serializedName: "properties.rotationToLatestKeyVersionEnabled", + type: { + name: "Boolean", + }, + }, + federatedClientId: { + serializedName: "properties.federatedClientId", + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskEncryptionSetList = { + type: { + name: "Composite", + className: "DiskEncryptionSetList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DiskEncryptionSet", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const ResourceUriList = { + type: { + name: "Composite", + className: "ResourceUriList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const ProxyOnlyResource = { + type: { + name: "Composite", + className: "ProxyOnlyResource", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskRestorePointList = { + type: { + name: "Composite", + className: "DiskRestorePointList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DiskRestorePoint", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const SnapshotSku = { + type: { + name: "Composite", + className: "SnapshotSku", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + tier: { + serializedName: "tier", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const CopyCompletionError = { + type: { + name: "Composite", + className: "CopyCompletionError", + modelProperties: { + errorCode: { + serializedName: "errorCode", + required: true, + type: { + name: "String", + }, + }, + errorMessage: { + serializedName: "errorMessage", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const SnapshotUpdate = { + type: { + name: "Composite", + className: "SnapshotUpdate", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "SnapshotSku", + }, + }, + osType: { + serializedName: "properties.osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, + diskSizeGB: { + serializedName: "properties.diskSizeGB", + type: { + name: "Number", + }, + }, + encryptionSettingsCollection: { + serializedName: "properties.encryptionSettingsCollection", + type: { + name: "Composite", + className: "EncryptionSettingsCollection", + }, + }, + encryption: { + serializedName: "properties.encryption", + type: { + name: "Composite", + className: "Encryption", + }, + }, + networkAccessPolicy: { + serializedName: "properties.networkAccessPolicy", + type: { + name: "String", + }, + }, + diskAccessId: { + serializedName: "properties.diskAccessId", + type: { + name: "String", + }, + }, + supportsHibernation: { + serializedName: "properties.supportsHibernation", + type: { + name: "Boolean", + }, + }, + publicNetworkAccess: { + serializedName: "properties.publicNetworkAccess", + type: { + name: "String", + }, + }, + dataAccessAuthMode: { + serializedName: "properties.dataAccessAuthMode", + type: { + name: "String", + }, + }, + supportedCapabilities: { + serializedName: "properties.supportedCapabilities", + type: { + name: "Composite", + className: "SupportedCapabilities", + }, + }, + }, + }, +}; +const SnapshotList = { + type: { + name: "Composite", + className: "SnapshotList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Snapshot", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const ResourceSkusResult = { + type: { + name: "Composite", + className: "ResourceSkusResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceSku", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const ResourceSku = { + type: { + name: "Composite", + className: "ResourceSku", + modelProperties: { + resourceType: { + serializedName: "resourceType", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + tier: { + serializedName: "tier", + readOnly: true, + type: { + name: "String", + }, + }, + size: { + serializedName: "size", + readOnly: true, + type: { + name: "String", + }, + }, + family: { + serializedName: "family", + readOnly: true, + type: { + name: "String", + }, + }, + kind: { + serializedName: "kind", + readOnly: true, + type: { + name: "String", + }, + }, + capacity: { + serializedName: "capacity", + type: { + name: "Composite", + className: "ResourceSkuCapacity", + }, + }, + locations: { + serializedName: "locations", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + locationInfo: { + serializedName: "locationInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceSkuLocationInfo", + }, + }, + }, + }, + apiVersions: { + serializedName: "apiVersions", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + costs: { + serializedName: "costs", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceSkuCosts", + }, + }, + }, + }, + capabilities: { + serializedName: "capabilities", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceSkuCapabilities", + }, + }, + }, + }, + restrictions: { + serializedName: "restrictions", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceSkuRestrictions", + }, + }, + }, + }, + }, + }, +}; +const ResourceSkuCapacity = { + type: { + name: "Composite", + className: "ResourceSkuCapacity", + modelProperties: { + minimum: { + serializedName: "minimum", + readOnly: true, + type: { + name: "Number", + }, + }, + maximum: { + serializedName: "maximum", + readOnly: true, + type: { + name: "Number", + }, + }, + default: { + serializedName: "default", + readOnly: true, + type: { + name: "Number", + }, + }, + scaleType: { + serializedName: "scaleType", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["Automatic", "Manual", "None"], + }, + }, + }, + }, +}; +const ResourceSkuLocationInfo = { + type: { + name: "Composite", + className: "ResourceSkuLocationInfo", + modelProperties: { + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + zones: { + serializedName: "zones", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + zoneDetails: { + serializedName: "zoneDetails", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceSkuZoneDetails", + }, + }, + }, + }, + extendedLocations: { + serializedName: "extendedLocations", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const ResourceSkuZoneDetails = { + type: { + name: "Composite", + className: "ResourceSkuZoneDetails", + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + capabilities: { + serializedName: "capabilities", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceSkuCapabilities", + }, + }, + }, + }, + }, + }, +}; +const ResourceSkuCapabilities = { + type: { + name: "Composite", + className: "ResourceSkuCapabilities", + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + value: { + serializedName: "value", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const ResourceSkuCosts = { + type: { + name: "Composite", + className: "ResourceSkuCosts", + modelProperties: { + meterID: { + serializedName: "meterID", + readOnly: true, + type: { + name: "String", + }, + }, + quantity: { + serializedName: "quantity", + readOnly: true, + type: { + name: "Number", + }, + }, + extendedUnit: { + serializedName: "extendedUnit", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const ResourceSkuRestrictions = { + type: { + name: "Composite", + className: "ResourceSkuRestrictions", + modelProperties: { + type: { + serializedName: "type", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["Location", "Zone"], + }, + }, + values: { + serializedName: "values", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + restrictionInfo: { + serializedName: "restrictionInfo", + type: { + name: "Composite", + className: "ResourceSkuRestrictionInfo", + }, + }, + reasonCode: { + serializedName: "reasonCode", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["QuotaId", "NotAvailableForSubscription"], + }, + }, + }, + }, +}; +const ResourceSkuRestrictionInfo = { + type: { + name: "Composite", + className: "ResourceSkuRestrictionInfo", + modelProperties: { + locations: { + serializedName: "locations", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + zones: { + serializedName: "zones", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const GalleryIdentifier = { + type: { + name: "Composite", + className: "GalleryIdentifier", + modelProperties: { + uniqueName: { + serializedName: "uniqueName", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const SharingProfile = { + type: { + name: "Composite", + className: "SharingProfile", + modelProperties: { + permissions: { + serializedName: "permissions", + type: { + name: "String", + }, + }, + groups: { + serializedName: "groups", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SharingProfileGroup", + }, + }, + }, + }, + communityGalleryInfo: { + serializedName: "communityGalleryInfo", + type: { + name: "Composite", + className: "CommunityGalleryInfo", + }, + }, + }, + }, +}; +const SharingProfileGroup = { + type: { + name: "Composite", + className: "SharingProfileGroup", + modelProperties: { + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + ids: { + serializedName: "ids", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const CommunityGalleryInfo = { + type: { + name: "Composite", + className: "CommunityGalleryInfo", + modelProperties: { + publisherUri: { + serializedName: "publisherUri", + type: { + name: "String", + }, + }, + publisherContact: { + serializedName: "publisherContact", + type: { + name: "String", + }, + }, + eula: { + serializedName: "eula", + type: { + name: "String", + }, + }, + publicNamePrefix: { + serializedName: "publicNamePrefix", + type: { + name: "String", + }, + }, + communityGalleryEnabled: { + serializedName: "communityGalleryEnabled", + readOnly: true, + type: { + name: "Boolean", + }, + }, + publicNames: { + serializedName: "publicNames", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const SoftDeletePolicy = { + type: { + name: "Composite", + className: "SoftDeletePolicy", + modelProperties: { + isSoftDeleteEnabled: { + serializedName: "isSoftDeleteEnabled", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const SharingStatus = { + type: { + name: "Composite", + className: "SharingStatus", + modelProperties: { + aggregatedState: { + serializedName: "aggregatedState", + readOnly: true, + type: { + name: "String", + }, + }, + summary: { + serializedName: "summary", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RegionalSharingStatus", + }, + }, + }, + }, + }, + }, +}; +const RegionalSharingStatus = { + type: { + name: "Composite", + className: "RegionalSharingStatus", + modelProperties: { + region: { + serializedName: "region", + type: { + name: "String", + }, + }, + state: { + serializedName: "state", + readOnly: true, + type: { + name: "String", + }, + }, + details: { + serializedName: "details", + type: { + name: "String", + }, + }, + }, + }, +}; +const UpdateResourceDefinition = { + type: { + name: "Composite", + className: "UpdateResourceDefinition", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + }, + }, +}; +const GalleryImageIdentifier = { + type: { + name: "Composite", + className: "GalleryImageIdentifier", + modelProperties: { + publisher: { + serializedName: "publisher", + required: true, + type: { + name: "String", + }, + }, + offer: { + serializedName: "offer", + required: true, + type: { + name: "String", + }, + }, + sku: { + serializedName: "sku", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const RecommendedMachineConfiguration = { + type: { + name: "Composite", + className: "RecommendedMachineConfiguration", + modelProperties: { + vCPUs: { + serializedName: "vCPUs", + type: { + name: "Composite", + className: "ResourceRange", + }, + }, + memory: { + serializedName: "memory", + type: { + name: "Composite", + className: "ResourceRange", + }, + }, + }, + }, +}; +const ResourceRange = { + type: { + name: "Composite", + className: "ResourceRange", + modelProperties: { + min: { + serializedName: "min", + type: { + name: "Number", + }, + }, + max: { + serializedName: "max", + type: { + name: "Number", + }, + }, + }, + }, +}; +const Disallowed = { + type: { + name: "Composite", + className: "Disallowed", + modelProperties: { + diskTypes: { + serializedName: "diskTypes", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const ImagePurchasePlan = { + type: { + name: "Composite", + className: "ImagePurchasePlan", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + publisher: { + serializedName: "publisher", + type: { + name: "String", + }, + }, + product: { + serializedName: "product", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryImageFeature = { + type: { + name: "Composite", + className: "GalleryImageFeature", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + value: { + serializedName: "value", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryArtifactPublishingProfileBase = { + type: { + name: "Composite", + className: "GalleryArtifactPublishingProfileBase", + modelProperties: { + targetRegions: { + serializedName: "targetRegions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TargetRegion", + }, + }, + }, + }, + replicaCount: { + serializedName: "replicaCount", + type: { + name: "Number", + }, + }, + excludeFromLatest: { + serializedName: "excludeFromLatest", + type: { + name: "Boolean", + }, + }, + publishedDate: { + serializedName: "publishedDate", + readOnly: true, + type: { + name: "DateTime", + }, + }, + endOfLifeDate: { + serializedName: "endOfLifeDate", + type: { + name: "DateTime", + }, + }, + storageAccountType: { + serializedName: "storageAccountType", + type: { + name: "String", + }, + }, + replicationMode: { + serializedName: "replicationMode", + type: { + name: "String", + }, + }, + targetExtendedLocations: { + serializedName: "targetExtendedLocations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryTargetExtendedLocation", + }, + }, + }, + }, + }, + }, +}; +const TargetRegion = { + type: { + name: "Composite", + className: "TargetRegion", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + regionalReplicaCount: { + serializedName: "regionalReplicaCount", + type: { + name: "Number", + }, + }, + storageAccountType: { + serializedName: "storageAccountType", + type: { + name: "String", + }, + }, + encryption: { + serializedName: "encryption", + type: { + name: "Composite", + className: "EncryptionImages", + }, + }, + excludeFromLatest: { + serializedName: "excludeFromLatest", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const EncryptionImages = { + type: { + name: "Composite", + className: "EncryptionImages", + modelProperties: { + osDiskImage: { + serializedName: "osDiskImage", + type: { + name: "Composite", + className: "OSDiskImageEncryption", + }, + }, + dataDiskImages: { + serializedName: "dataDiskImages", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DataDiskImageEncryption", + }, + }, + }, + }, + }, + }, +}; +const OSDiskImageSecurityProfile = { + type: { + name: "Composite", + className: "OSDiskImageSecurityProfile", + modelProperties: { + confidentialVMEncryptionType: { + serializedName: "confidentialVMEncryptionType", + type: { + name: "String", + }, + }, + secureVMDiskEncryptionSetId: { + serializedName: "secureVMDiskEncryptionSetId", + type: { + name: "String", + }, + }, + }, + }, +}; +const DiskImageEncryption = { + type: { + name: "Composite", + className: "DiskImageEncryption", + modelProperties: { + diskEncryptionSetId: { + serializedName: "diskEncryptionSetId", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryTargetExtendedLocation = { + type: { + name: "Composite", + className: "GalleryTargetExtendedLocation", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + extendedLocation: { + serializedName: "extendedLocation", + type: { + name: "Composite", + className: "GalleryExtendedLocation", + }, + }, + extendedLocationReplicaCount: { + serializedName: "extendedLocationReplicaCount", + type: { + name: "Number", + }, + }, + storageAccountType: { + serializedName: "storageAccountType", + type: { + name: "String", + }, + }, + encryption: { + serializedName: "encryption", + type: { + name: "Composite", + className: "EncryptionImages", + }, + }, + }, + }, +}; +const GalleryExtendedLocation = { + type: { + name: "Composite", + className: "GalleryExtendedLocation", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryImageVersionStorageProfile = { + type: { + name: "Composite", + className: "GalleryImageVersionStorageProfile", + modelProperties: { + source: { + serializedName: "source", + type: { + name: "Composite", + className: "GalleryArtifactVersionFullSource", + }, + }, + osDiskImage: { + serializedName: "osDiskImage", + type: { + name: "Composite", + className: "GalleryOSDiskImage", + }, + }, + dataDiskImages: { + serializedName: "dataDiskImages", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryDataDiskImage", + }, + }, + }, + }, + }, + }, +}; +const GalleryArtifactVersionSource = { + type: { + name: "Composite", + className: "GalleryArtifactVersionSource", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryDiskImage = { + type: { + name: "Composite", + className: "GalleryDiskImage", + modelProperties: { + sizeInGB: { + serializedName: "sizeInGB", + readOnly: true, + type: { + name: "Number", + }, + }, + hostCaching: { + serializedName: "hostCaching", + type: { + name: "Enum", + allowedValues: ["None", "ReadOnly", "ReadWrite"], + }, + }, + source: { + serializedName: "source", + type: { + name: "Composite", + className: "GalleryDiskImageSource", + }, + }, + }, + }, +}; +const PolicyViolation = { + type: { + name: "Composite", + className: "PolicyViolation", + modelProperties: { + category: { + serializedName: "category", + type: { + name: "String", + }, + }, + details: { + serializedName: "details", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryArtifactSafetyProfileBase = { + type: { + name: "Composite", + className: "GalleryArtifactSafetyProfileBase", + modelProperties: { + allowDeletionOfReplicatedLocations: { + serializedName: "allowDeletionOfReplicatedLocations", + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const ReplicationStatus = { + type: { + name: "Composite", + className: "ReplicationStatus", + modelProperties: { + aggregatedState: { + serializedName: "aggregatedState", + readOnly: true, + type: { + name: "String", + }, + }, + summary: { + serializedName: "summary", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RegionalReplicationStatus", + }, + }, + }, + }, + }, + }, +}; +const RegionalReplicationStatus = { + type: { + name: "Composite", + className: "RegionalReplicationStatus", + modelProperties: { + region: { + serializedName: "region", + readOnly: true, + type: { + name: "String", + }, + }, + state: { + serializedName: "state", + readOnly: true, + type: { + name: "String", + }, + }, + details: { + serializedName: "details", + readOnly: true, + type: { + name: "String", + }, + }, + progress: { + serializedName: "progress", + readOnly: true, + type: { + name: "Number", + }, + }, + }, + }, +}; +const ImageVersionSecurityProfile = { + type: { + name: "Composite", + className: "ImageVersionSecurityProfile", + modelProperties: { + uefiSettings: { + serializedName: "uefiSettings", + type: { + name: "Composite", + className: "GalleryImageVersionUefiSettings", + }, + }, + }, + }, +}; +const GalleryImageVersionUefiSettings = { + type: { + name: "Composite", + className: "GalleryImageVersionUefiSettings", + modelProperties: { + signatureTemplateNames: { + serializedName: "signatureTemplateNames", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + additionalSignatures: { + serializedName: "additionalSignatures", + type: { + name: "Composite", + className: "UefiKeySignatures", + }, + }, + }, + }, +}; +const UefiKeySignatures = { + type: { + name: "Composite", + className: "UefiKeySignatures", + modelProperties: { + pk: { + serializedName: "pk", + type: { + name: "Composite", + className: "UefiKey", + }, + }, + kek: { + serializedName: "kek", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "UefiKey", + }, + }, + }, + }, + db: { + serializedName: "db", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "UefiKey", + }, + }, + }, + }, + dbx: { + serializedName: "dbx", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "UefiKey", + }, + }, + }, + }, + }, + }, +}; +const UefiKey = { + type: { + name: "Composite", + className: "UefiKey", + modelProperties: { + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const GalleryApplicationCustomAction = { + type: { + name: "Composite", + className: "GalleryApplicationCustomAction", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + script: { + serializedName: "script", + required: true, + type: { + name: "String", + }, + }, + description: { + serializedName: "description", + type: { + name: "String", + }, + }, + parameters: { + serializedName: "parameters", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryApplicationCustomActionParameter", + }, + }, + }, + }, + }, + }, +}; +const GalleryApplicationCustomActionParameter = { + type: { + name: "Composite", + className: "GalleryApplicationCustomActionParameter", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + required: { + serializedName: "required", + type: { + name: "Boolean", + }, + }, + type: { + serializedName: "type", + type: { + name: "Enum", + allowedValues: ["String", "ConfigurationDataBlob", "LogOutputBlob"], + }, + }, + defaultValue: { + serializedName: "defaultValue", + type: { + name: "String", + }, + }, + description: { + serializedName: "description", + type: { + name: "String", + }, + }, + }, + }, +}; +const UserArtifactSource = { + type: { + name: "Composite", + className: "UserArtifactSource", + modelProperties: { + mediaLink: { + serializedName: "mediaLink", + required: true, + type: { + name: "String", + }, + }, + defaultConfigurationLink: { + serializedName: "defaultConfigurationLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const UserArtifactManage = { + type: { + name: "Composite", + className: "UserArtifactManage", + modelProperties: { + install: { + serializedName: "install", + required: true, + type: { + name: "String", + }, + }, + remove: { + serializedName: "remove", + required: true, + type: { + name: "String", + }, + }, + update: { + serializedName: "update", + type: { + name: "String", + }, + }, + }, + }, +}; +const UserArtifactSettings = { + type: { + name: "Composite", + className: "UserArtifactSettings", + modelProperties: { + packageFileName: { + serializedName: "packageFileName", + type: { + name: "String", + }, + }, + configFileName: { + serializedName: "configFileName", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryList = { + type: { + name: "Composite", + className: "GalleryList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Gallery", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryImageList = { + type: { + name: "Composite", + className: "GalleryImageList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryImage", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryImageVersionList = { + type: { + name: "Composite", + className: "GalleryImageVersionList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryImageVersion", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryApplicationList = { + type: { + name: "Composite", + className: "GalleryApplicationList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryApplication", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryApplicationVersionList = { + type: { + name: "Composite", + className: "GalleryApplicationVersionList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryApplicationVersion", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const SharingUpdate = { + type: { + name: "Composite", + className: "SharingUpdate", + modelProperties: { + operationType: { + serializedName: "operationType", + required: true, + type: { + name: "String", + }, + }, + groups: { + serializedName: "groups", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SharingProfileGroup", + }, + }, + }, + }, + }, + }, +}; +const SharedGalleryList = { + type: { + name: "Composite", + className: "SharedGalleryList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SharedGallery", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const PirResource = { + type: { + name: "Composite", + className: "PirResource", + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const SharedGalleryImageList = { + type: { + name: "Composite", + className: "SharedGalleryImageList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SharedGalleryImage", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const SharedGalleryImageVersionList = { + type: { + name: "Composite", + className: "SharedGalleryImageVersionList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SharedGalleryImageVersion", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const SharedGalleryImageVersionStorageProfile = { + type: { + name: "Composite", + className: "SharedGalleryImageVersionStorageProfile", + modelProperties: { + osDiskImage: { + serializedName: "osDiskImage", + type: { + name: "Composite", + className: "SharedGalleryOSDiskImage", + }, + }, + dataDiskImages: { + serializedName: "dataDiskImages", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SharedGalleryDataDiskImage", + }, + }, + }, + }, + }, + }, +}; +const SharedGalleryDiskImage = { + type: { + name: "Composite", + className: "SharedGalleryDiskImage", + modelProperties: { + diskSizeGB: { + serializedName: "diskSizeGB", + readOnly: true, + type: { + name: "Number", + }, + }, + hostCaching: { + serializedName: "hostCaching", + type: { + name: "String", + }, + }, + }, + }, +}; +const CommunityGalleryMetadata = { + type: { + name: "Composite", + className: "CommunityGalleryMetadata", + modelProperties: { + publisherUri: { + serializedName: "publisherUri", + type: { + name: "String", + }, + }, + publisherContact: { + serializedName: "publisherContact", + required: true, + type: { + name: "String", + }, + }, + eula: { + serializedName: "eula", + type: { + name: "String", + }, + }, + publicNames: { + serializedName: "publicNames", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + privacyStatementUri: { + serializedName: "privacyStatementUri", + type: { + name: "String", + }, + }, + }, + }, +}; +const PirCommunityGalleryResource = { + type: { + name: "Composite", + className: "PirCommunityGalleryResource", + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + uniqueId: { + serializedName: "identifier.uniqueId", + type: { + name: "String", + }, + }, + }, + }, +}; +const CommunityGalleryImageIdentifier = { + type: { + name: "Composite", + className: "CommunityGalleryImageIdentifier", + modelProperties: { + publisher: { + serializedName: "publisher", + type: { + name: "String", + }, + }, + offer: { + serializedName: "offer", + type: { + name: "String", + }, + }, + sku: { + serializedName: "sku", + type: { + name: "String", + }, + }, + }, + }, +}; +const CommunityGalleryImageList = { + type: { + name: "Composite", + className: "CommunityGalleryImageList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CommunityGalleryImage", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const CommunityGalleryImageVersionList = { + type: { + name: "Composite", + className: "CommunityGalleryImageVersionList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CommunityGalleryImageVersion", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const RoleInstance = { + type: { + name: "Composite", + className: "RoleInstance", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + tags: { + serializedName: "tags", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "InstanceSku", + }, + }, + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "RoleInstanceProperties", + }, + }, + }, + }, +}; +const InstanceSku = { + type: { + name: "Composite", + className: "InstanceSku", + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + tier: { + serializedName: "tier", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const RoleInstanceProperties = { + type: { + name: "Composite", + className: "RoleInstanceProperties", + modelProperties: { + networkProfile: { + serializedName: "networkProfile", + type: { + name: "Composite", + className: "RoleInstanceNetworkProfile", + }, + }, + instanceView: { + serializedName: "instanceView", + type: { + name: "Composite", + className: "RoleInstanceView", + }, + }, + }, + }, +}; +const RoleInstanceNetworkProfile = { + type: { + name: "Composite", + className: "RoleInstanceNetworkProfile", + modelProperties: { + networkInterfaces: { + serializedName: "networkInterfaces", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, + }, + }, +}; +const RoleInstanceView = { + type: { + name: "Composite", + className: "RoleInstanceView", + modelProperties: { + platformUpdateDomain: { + serializedName: "platformUpdateDomain", + readOnly: true, + type: { + name: "Number", + }, + }, + platformFaultDomain: { + serializedName: "platformFaultDomain", + readOnly: true, + type: { + name: "Number", + }, + }, + privateId: { + serializedName: "privateId", + readOnly: true, + type: { + name: "String", + }, + }, + statuses: { + serializedName: "statuses", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceInstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const ResourceInstanceViewStatus = { + type: { + name: "Composite", + className: "ResourceInstanceViewStatus", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String", + }, + }, + displayStatus: { + serializedName: "displayStatus", + readOnly: true, + type: { + name: "String", + }, + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String", + }, + }, + time: { + serializedName: "time", + readOnly: true, + type: { + name: "DateTime", + }, + }, + level: { + serializedName: "level", + type: { + name: "Enum", + allowedValues: ["Info", "Warning", "Error"], + }, + }, + }, + }, +}; +const RoleInstanceListResult = { + type: { + name: "Composite", + className: "RoleInstanceListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RoleInstance", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const CloudServiceRole = { + type: { + name: "Composite", + className: "CloudServiceRole", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "CloudServiceRoleSku", + }, + }, + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "CloudServiceRoleProperties", + }, + }, + }, + }, +}; +const CloudServiceRoleSku = { + type: { + name: "Composite", + className: "CloudServiceRoleSku", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + tier: { + serializedName: "tier", + type: { + name: "String", + }, + }, + capacity: { + serializedName: "capacity", + type: { + name: "Number", + }, + }, + }, + }, +}; +const CloudServiceRoleProperties = { + type: { + name: "Composite", + className: "CloudServiceRoleProperties", + modelProperties: { + uniqueId: { + serializedName: "uniqueId", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const CloudServiceRoleListResult = { + type: { + name: "Composite", + className: "CloudServiceRoleListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CloudServiceRole", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const CloudService = { + type: { + name: "Composite", + className: "CloudService", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + required: true, + type: { + name: "String", + }, + }, + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "CloudServiceProperties", + }, + }, + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData", + }, + }, + zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const CloudServiceProperties = { + type: { + name: "Composite", + className: "CloudServiceProperties", + modelProperties: { + packageUrl: { + serializedName: "packageUrl", + type: { + name: "String", + }, + }, + configuration: { + serializedName: "configuration", + type: { + name: "String", + }, + }, + configurationUrl: { + serializedName: "configurationUrl", + type: { + name: "String", + }, + }, + startCloudService: { + serializedName: "startCloudService", + type: { + name: "Boolean", + }, + }, + allowModelOverride: { + serializedName: "allowModelOverride", + type: { + name: "Boolean", + }, + }, + upgradeMode: { + serializedName: "upgradeMode", + type: { + name: "String", + }, + }, + roleProfile: { + serializedName: "roleProfile", + type: { + name: "Composite", + className: "CloudServiceRoleProfile", + }, + }, + osProfile: { + serializedName: "osProfile", + type: { + name: "Composite", + className: "CloudServiceOsProfile", + }, + }, + networkProfile: { + serializedName: "networkProfile", + type: { + name: "Composite", + className: "CloudServiceNetworkProfile", + }, + }, + extensionProfile: { + serializedName: "extensionProfile", + type: { + name: "Composite", + className: "CloudServiceExtensionProfile", + }, + }, + provisioningState: { + serializedName: "provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, + uniqueId: { + serializedName: "uniqueId", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const CloudServiceRoleProfile = { + type: { + name: "Composite", + className: "CloudServiceRoleProfile", + modelProperties: { + roles: { + serializedName: "roles", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CloudServiceRoleProfileProperties", + }, + }, + }, + }, + }, + }, +}; +const CloudServiceRoleProfileProperties = { + type: { + name: "Composite", + className: "CloudServiceRoleProfileProperties", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "CloudServiceRoleSku", + }, + }, + }, + }, +}; +const CloudServiceOsProfile = { + type: { + name: "Composite", + className: "CloudServiceOsProfile", + modelProperties: { + secrets: { + serializedName: "secrets", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CloudServiceVaultSecretGroup", + }, + }, + }, + }, + }, + }, +}; +const CloudServiceVaultSecretGroup = { + type: { + name: "Composite", + className: "CloudServiceVaultSecretGroup", + modelProperties: { + sourceVault: { + serializedName: "sourceVault", + type: { + name: "Composite", + className: "SubResource", + }, + }, + vaultCertificates: { + serializedName: "vaultCertificates", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CloudServiceVaultCertificate", + }, + }, + }, + }, + }, + }, +}; +const CloudServiceVaultCertificate = { + type: { + name: "Composite", + className: "CloudServiceVaultCertificate", + modelProperties: { + certificateUrl: { + serializedName: "certificateUrl", + type: { + name: "String", + }, + }, + }, + }, +}; +const CloudServiceNetworkProfile = { + type: { + name: "Composite", + className: "CloudServiceNetworkProfile", + modelProperties: { + loadBalancerConfigurations: { + serializedName: "loadBalancerConfigurations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "LoadBalancerConfiguration", + }, + }, + }, + }, + slotType: { + serializedName: "slotType", + type: { + name: "String", + }, + }, + swappableCloudService: { + serializedName: "swappableCloudService", + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, +}; +const LoadBalancerConfiguration = { + type: { + name: "Composite", + className: "LoadBalancerConfiguration", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "LoadBalancerConfigurationProperties", + }, + }, + }, + }, +}; +const LoadBalancerConfigurationProperties = { + type: { + name: "Composite", + className: "LoadBalancerConfigurationProperties", + modelProperties: { + frontendIpConfigurations: { + serializedName: "frontendIpConfigurations", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "LoadBalancerFrontendIpConfiguration", + }, + }, + }, + }, + }, + }, +}; +const LoadBalancerFrontendIpConfiguration = { + type: { + name: "Composite", + className: "LoadBalancerFrontendIpConfiguration", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "LoadBalancerFrontendIpConfigurationProperties", + }, + }, + }, + }, +}; +const LoadBalancerFrontendIpConfigurationProperties = { + type: { + name: "Composite", + className: "LoadBalancerFrontendIpConfigurationProperties", + modelProperties: { + publicIPAddress: { + serializedName: "publicIPAddress", + type: { + name: "Composite", + className: "SubResource", + }, + }, + subnet: { + serializedName: "subnet", + type: { + name: "Composite", + className: "SubResource", + }, + }, + privateIPAddress: { + serializedName: "privateIPAddress", + type: { + name: "String", + }, + }, + }, + }, +}; +const CloudServiceExtensionProfile = { + type: { + name: "Composite", + className: "CloudServiceExtensionProfile", + modelProperties: { + extensions: { + serializedName: "extensions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Extension", + }, + }, + }, + }, + }, + }, +}; +const Extension = { + type: { + name: "Composite", + className: "Extension", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String", + }, + }, + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "CloudServiceExtensionProperties", + }, + }, + }, + }, +}; +const CloudServiceExtensionProperties = { + type: { + name: "Composite", + className: "CloudServiceExtensionProperties", + modelProperties: { + publisher: { + serializedName: "publisher", + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + type: { + name: "String", + }, + }, + typeHandlerVersion: { + serializedName: "typeHandlerVersion", + type: { + name: "String", + }, + }, + autoUpgradeMinorVersion: { + serializedName: "autoUpgradeMinorVersion", + type: { + name: "Boolean", + }, + }, + settings: { + serializedName: "settings", + type: { + name: "any", + }, + }, + protectedSettings: { + serializedName: "protectedSettings", + type: { + name: "any", + }, + }, + protectedSettingsFromKeyVault: { + serializedName: "protectedSettingsFromKeyVault", + type: { + name: "Composite", + className: "CloudServiceVaultAndSecretReference", + }, + }, + forceUpdateTag: { + serializedName: "forceUpdateTag", + type: { + name: "String", + }, + }, + provisioningState: { + serializedName: "provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, + rolesAppliedTo: { + serializedName: "rolesAppliedTo", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const CloudServiceVaultAndSecretReference = { + type: { + name: "Composite", + className: "CloudServiceVaultAndSecretReference", + modelProperties: { + sourceVault: { + serializedName: "sourceVault", + type: { + name: "Composite", + className: "SubResource", + }, + }, + secretUrl: { + serializedName: "secretUrl", + type: { + name: "String", + }, + }, + }, + }, +}; +const SystemData = { + type: { + name: "Composite", + className: "SystemData", + modelProperties: { + createdAt: { + serializedName: "createdAt", + readOnly: true, + type: { + name: "DateTime", + }, + }, + lastModifiedAt: { + serializedName: "lastModifiedAt", + readOnly: true, + type: { + name: "DateTime", + }, + }, + }, + }, +}; +const CloudServiceUpdate = { + type: { + name: "Composite", + className: "CloudServiceUpdate", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, + }, + }, +}; +const CloudServiceInstanceView = { + type: { + name: "Composite", + className: "CloudServiceInstanceView", + modelProperties: { + roleInstance: { + serializedName: "roleInstance", + type: { + name: "Composite", + className: "InstanceViewStatusesSummary", + }, + }, + sdkVersion: { + serializedName: "sdkVersion", + readOnly: true, + type: { + name: "String", + }, + }, + privateIds: { + serializedName: "privateIds", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + statuses: { + serializedName: "statuses", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceInstanceViewStatus", + }, + }, + }, + }, + }, + }, +}; +const InstanceViewStatusesSummary = { + type: { + name: "Composite", + className: "InstanceViewStatusesSummary", + modelProperties: { + statusesSummary: { + serializedName: "statusesSummary", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "StatusCodeCount", + }, + }, + }, + }, + }, + }, +}; +const StatusCodeCount = { + type: { + name: "Composite", + className: "StatusCodeCount", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String", + }, + }, + count: { + serializedName: "count", + readOnly: true, + type: { + name: "Number", + }, + }, + }, + }, +}; +const CloudServiceListResult = { + type: { + name: "Composite", + className: "CloudServiceListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CloudService", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const RoleInstances = { + type: { + name: "Composite", + className: "RoleInstances", + modelProperties: { + roleInstances: { + serializedName: "roleInstances", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, + }, + }, +}; +const UpdateDomain = { + type: { + name: "Composite", + className: "UpdateDomain", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const UpdateDomainListResult = { + type: { + name: "Composite", + className: "UpdateDomainListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "UpdateDomain", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const OSVersion = { + type: { + name: "Composite", + className: "OSVersion", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "OSVersionProperties", + }, + }, + }, + }, +}; +const OSVersionProperties = { + type: { + name: "Composite", + className: "OSVersionProperties", + modelProperties: { + family: { + serializedName: "family", + readOnly: true, + type: { + name: "String", + }, + }, + familyLabel: { + serializedName: "familyLabel", + readOnly: true, + type: { + name: "String", + }, + }, + version: { + serializedName: "version", + readOnly: true, + type: { + name: "String", + }, + }, + label: { + serializedName: "label", + readOnly: true, + type: { + name: "String", + }, + }, + isDefault: { + serializedName: "isDefault", + readOnly: true, + type: { + name: "Boolean", + }, + }, + isActive: { + serializedName: "isActive", + readOnly: true, + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const OSVersionListResult = { + type: { + name: "Composite", + className: "OSVersionListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "OSVersion", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const OSFamily = { + type: { + name: "Composite", + className: "OSFamily", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String", + }, + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String", + }, + }, + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "OSFamilyProperties", + }, + }, + }, + }, +}; +const OSFamilyProperties = { + type: { + name: "Composite", + className: "OSFamilyProperties", + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, + label: { + serializedName: "label", + readOnly: true, + type: { + name: "String", + }, + }, + versions: { + serializedName: "versions", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "OSVersionPropertiesBase", + }, + }, + }, + }, + }, + }, +}; +const OSVersionPropertiesBase = { + type: { + name: "Composite", + className: "OSVersionPropertiesBase", + modelProperties: { + version: { + serializedName: "version", + readOnly: true, + type: { + name: "String", + }, + }, + label: { + serializedName: "label", + readOnly: true, + type: { + name: "String", + }, + }, + isDefault: { + serializedName: "isDefault", + readOnly: true, + type: { + name: "Boolean", + }, + }, + isActive: { + serializedName: "isActive", + readOnly: true, + type: { + name: "Boolean", + }, + }, + }, + }, +}; +const OSFamilyListResult = { + type: { + name: "Composite", + className: "OSFamilyListResult", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "OSFamily", + }, + }, + }, + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String", + }, + }, + }, + }, +}; +const GalleryArtifactSource = { + type: { + name: "Composite", + className: "GalleryArtifactSource", + modelProperties: { + managedImage: { + serializedName: "managedImage", + type: { + name: "Composite", + className: "ManagedArtifact", + }, + }, + }, + }, +}; +const ManagedArtifact = { + type: { + name: "Composite", + className: "ManagedArtifact", + modelProperties: { + id: { + serializedName: "id", + required: true, + type: { + name: "String", + }, + }, + }, + }, +}; +const LatestGalleryImageVersion = { + type: { + name: "Composite", + className: "LatestGalleryImageVersion", + modelProperties: { + latestVersionName: { + serializedName: "latestVersionName", + type: { + name: "String", + }, + }, + location: { + serializedName: "location", + type: { + name: "String", + }, + }, + }, + }, +}; +const ImageReference = { + type: { + name: "Composite", + className: "ImageReference", + modelProperties: Object.assign(Object.assign({}, SubResource.type.modelProperties), { publisher: { + serializedName: "publisher", + type: { + name: "String", + }, + }, offer: { + serializedName: "offer", + type: { + name: "String", + }, + }, sku: { + serializedName: "sku", + type: { + name: "String", + }, + }, version: { + serializedName: "version", + type: { + name: "String", + }, + }, exactVersion: { + serializedName: "exactVersion", + readOnly: true, + type: { + name: "String", + }, + }, sharedGalleryImageId: { + serializedName: "sharedGalleryImageId", + type: { + name: "String", + }, + }, communityGalleryImageId: { + serializedName: "communityGalleryImageId", + type: { + name: "String", + }, + } }), + }, +}; +const DiskEncryptionSetParameters = { + type: { + name: "Composite", + className: "DiskEncryptionSetParameters", + modelProperties: Object.assign({}, SubResource.type.modelProperties), + }, +}; +const ManagedDiskParameters = { + type: { + name: "Composite", + className: "ManagedDiskParameters", + modelProperties: Object.assign(Object.assign({}, SubResource.type.modelProperties), { storageAccountType: { + serializedName: "storageAccountType", + type: { + name: "String", + }, + }, diskEncryptionSet: { + serializedName: "diskEncryptionSet", + type: { + name: "Composite", + className: "DiskEncryptionSetParameters", + }, + }, securityProfile: { + serializedName: "securityProfile", + type: { + name: "Composite", + className: "VMDiskSecurityProfile", + }, + } }), + }, +}; +const NetworkInterfaceReference = { + type: { + name: "Composite", + className: "NetworkInterfaceReference", + modelProperties: Object.assign(Object.assign({}, SubResource.type.modelProperties), { primary: { + serializedName: "properties.primary", + type: { + name: "Boolean", + }, + }, deleteOption: { + serializedName: "properties.deleteOption", + type: { + name: "String", + }, + } }), + }, +}; +const VirtualMachineCaptureResult = { + type: { + name: "Composite", + className: "VirtualMachineCaptureResult", + modelProperties: Object.assign(Object.assign({}, SubResource.type.modelProperties), { schema: { + serializedName: "$schema", + readOnly: true, + type: { + name: "String", + }, + }, contentVersion: { + serializedName: "contentVersion", + readOnly: true, + type: { + name: "String", + }, + }, parameters: { + serializedName: "parameters", + readOnly: true, + type: { + name: "any", + }, + }, resources: { + serializedName: "resources", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "any", + }, + }, + }, + } }), + }, +}; +const VirtualMachineImageResource = { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + modelProperties: Object.assign(Object.assign({}, SubResource.type.modelProperties), { name: { + serializedName: "name", + required: true, + type: { + name: "String", + }, + }, location: { + serializedName: "location", + required: true, + type: { + name: "String", + }, + }, tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, extendedLocation: { + serializedName: "extendedLocation", + type: { + name: "Composite", + className: "ExtendedLocation", + }, + } }), + }, +}; +const SubResourceWithColocationStatus = { + type: { + name: "Composite", + className: "SubResourceWithColocationStatus", + modelProperties: Object.assign(Object.assign({}, SubResource.type.modelProperties), { colocationStatus: { + serializedName: "colocationStatus", + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + } }), + }, +}; +const VirtualMachineScaleSetExtension = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetExtension", + modelProperties: Object.assign(Object.assign({}, SubResourceReadOnly.type.modelProperties), { name: { + serializedName: "name", + type: { + name: "String", + }, + }, type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, forceUpdateTag: { + serializedName: "properties.forceUpdateTag", + type: { + name: "String", + }, + }, publisher: { + serializedName: "properties.publisher", + type: { + name: "String", + }, + }, typePropertiesType: { + serializedName: "properties.type", + type: { + name: "String", + }, + }, typeHandlerVersion: { + serializedName: "properties.typeHandlerVersion", + type: { + name: "String", + }, + }, autoUpgradeMinorVersion: { + serializedName: "properties.autoUpgradeMinorVersion", + type: { + name: "Boolean", + }, + }, enableAutomaticUpgrade: { + serializedName: "properties.enableAutomaticUpgrade", + type: { + name: "Boolean", + }, + }, settings: { + serializedName: "properties.settings", + type: { + name: "any", + }, + }, protectedSettings: { + serializedName: "properties.protectedSettings", + type: { + name: "any", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, provisionAfterExtensions: { + serializedName: "properties.provisionAfterExtensions", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, suppressFailures: { + serializedName: "properties.suppressFailures", + type: { + name: "Boolean", + }, + }, protectedSettingsFromKeyVault: { + serializedName: "properties.protectedSettingsFromKeyVault", + type: { + name: "Composite", + className: "KeyVaultSecretReference", + }, + } }), + }, +}; +const VirtualMachineScaleSetExtensionUpdate = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetExtensionUpdate", + modelProperties: Object.assign(Object.assign({}, SubResourceReadOnly.type.modelProperties), { name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, forceUpdateTag: { + serializedName: "properties.forceUpdateTag", + type: { + name: "String", + }, + }, publisher: { + serializedName: "properties.publisher", + type: { + name: "String", + }, + }, typePropertiesType: { + serializedName: "properties.type", + type: { + name: "String", + }, + }, typeHandlerVersion: { + serializedName: "properties.typeHandlerVersion", + type: { + name: "String", + }, + }, autoUpgradeMinorVersion: { + serializedName: "properties.autoUpgradeMinorVersion", + type: { + name: "Boolean", + }, + }, enableAutomaticUpgrade: { + serializedName: "properties.enableAutomaticUpgrade", + type: { + name: "Boolean", + }, + }, settings: { + serializedName: "properties.settings", + type: { + name: "any", + }, + }, protectedSettings: { + serializedName: "properties.protectedSettings", + type: { + name: "any", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, provisionAfterExtensions: { + serializedName: "properties.provisionAfterExtensions", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, suppressFailures: { + serializedName: "properties.suppressFailures", + type: { + name: "Boolean", + }, + }, protectedSettingsFromKeyVault: { + serializedName: "properties.protectedSettingsFromKeyVault", + type: { + name: "Composite", + className: "KeyVaultSecretReference", + }, + } }), + }, +}; +const VirtualMachineScaleSetVMExtension = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMExtension", + modelProperties: Object.assign(Object.assign({}, SubResourceReadOnly.type.modelProperties), { name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, location: { + serializedName: "location", + type: { + name: "String", + }, + }, forceUpdateTag: { + serializedName: "properties.forceUpdateTag", + type: { + name: "String", + }, + }, publisher: { + serializedName: "properties.publisher", + type: { + name: "String", + }, + }, typePropertiesType: { + serializedName: "properties.type", + type: { + name: "String", + }, + }, typeHandlerVersion: { + serializedName: "properties.typeHandlerVersion", + type: { + name: "String", + }, + }, autoUpgradeMinorVersion: { + serializedName: "properties.autoUpgradeMinorVersion", + type: { + name: "Boolean", + }, + }, enableAutomaticUpgrade: { + serializedName: "properties.enableAutomaticUpgrade", + type: { + name: "Boolean", + }, + }, settings: { + serializedName: "properties.settings", + type: { + name: "any", + }, + }, protectedSettings: { + serializedName: "properties.protectedSettings", + type: { + name: "any", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "VirtualMachineExtensionInstanceView", + }, + }, suppressFailures: { + serializedName: "properties.suppressFailures", + type: { + name: "Boolean", + }, + }, protectedSettingsFromKeyVault: { + serializedName: "properties.protectedSettingsFromKeyVault", + type: { + name: "Composite", + className: "KeyVaultSecretReference", + }, + }, provisionAfterExtensions: { + serializedName: "properties.provisionAfterExtensions", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + } }), + }, +}; +const VirtualMachineScaleSetVMExtensionUpdate = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMExtensionUpdate", + modelProperties: Object.assign(Object.assign({}, SubResourceReadOnly.type.modelProperties), { name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + }, type: { + serializedName: "type", + readOnly: true, + type: { + name: "String", + }, + }, forceUpdateTag: { + serializedName: "properties.forceUpdateTag", + type: { + name: "String", + }, + }, publisher: { + serializedName: "properties.publisher", + type: { + name: "String", + }, + }, typePropertiesType: { + serializedName: "properties.type", + type: { + name: "String", + }, + }, typeHandlerVersion: { + serializedName: "properties.typeHandlerVersion", + type: { + name: "String", + }, + }, autoUpgradeMinorVersion: { + serializedName: "properties.autoUpgradeMinorVersion", + type: { + name: "Boolean", + }, + }, enableAutomaticUpgrade: { + serializedName: "properties.enableAutomaticUpgrade", + type: { + name: "Boolean", + }, + }, settings: { + serializedName: "properties.settings", + type: { + name: "any", + }, + }, protectedSettings: { + serializedName: "properties.protectedSettings", + type: { + name: "any", + }, + }, suppressFailures: { + serializedName: "properties.suppressFailures", + type: { + name: "Boolean", + }, + }, protectedSettingsFromKeyVault: { + serializedName: "properties.protectedSettingsFromKeyVault", + type: { + name: "Composite", + className: "KeyVaultSecretReference", + }, + } }), + }, +}; +const DiskRestorePointAttributes = { + type: { + name: "Composite", + className: "DiskRestorePointAttributes", + modelProperties: Object.assign(Object.assign({}, SubResourceReadOnly.type.modelProperties), { encryption: { + serializedName: "encryption", + type: { + name: "Composite", + className: "RestorePointEncryption", + }, + }, sourceDiskRestorePoint: { + serializedName: "sourceDiskRestorePoint", + type: { + name: "Composite", + className: "ApiEntityReference", + }, + } }), + }, +}; +const VirtualMachineScaleSet = { + type: { + name: "Composite", + className: "VirtualMachineScaleSet", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, plan: { + serializedName: "plan", + type: { + name: "Composite", + className: "Plan", + }, + }, identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "VirtualMachineScaleSetIdentity", + }, + }, zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, extendedLocation: { + serializedName: "extendedLocation", + type: { + name: "Composite", + className: "ExtendedLocation", + }, + }, etag: { + serializedName: "etag", + readOnly: true, + type: { + name: "String", + }, + }, upgradePolicy: { + serializedName: "properties.upgradePolicy", + type: { + name: "Composite", + className: "UpgradePolicy", + }, + }, scheduledEventsPolicy: { + serializedName: "properties.scheduledEventsPolicy", + type: { + name: "Composite", + className: "ScheduledEventsPolicy", + }, + }, automaticRepairsPolicy: { + serializedName: "properties.automaticRepairsPolicy", + type: { + name: "Composite", + className: "AutomaticRepairsPolicy", + }, + }, virtualMachineProfile: { + serializedName: "properties.virtualMachineProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMProfile", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, overprovision: { + serializedName: "properties.overprovision", + type: { + name: "Boolean", + }, + }, doNotRunExtensionsOnOverprovisionedVMs: { + serializedName: "properties.doNotRunExtensionsOnOverprovisionedVMs", + type: { + name: "Boolean", + }, + }, uniqueId: { + serializedName: "properties.uniqueId", + readOnly: true, + type: { + name: "String", + }, + }, singlePlacementGroup: { + serializedName: "properties.singlePlacementGroup", + type: { + name: "Boolean", + }, + }, zoneBalance: { + serializedName: "properties.zoneBalance", + type: { + name: "Boolean", + }, + }, platformFaultDomainCount: { + serializedName: "properties.platformFaultDomainCount", + type: { + name: "Number", + }, + }, proximityPlacementGroup: { + serializedName: "properties.proximityPlacementGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, hostGroup: { + serializedName: "properties.hostGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, additionalCapabilities: { + serializedName: "properties.additionalCapabilities", + type: { + name: "Composite", + className: "AdditionalCapabilities", + }, + }, scaleInPolicy: { + serializedName: "properties.scaleInPolicy", + type: { + name: "Composite", + className: "ScaleInPolicy", + }, + }, orchestrationMode: { + serializedName: "properties.orchestrationMode", + type: { + name: "String", + }, + }, spotRestorePolicy: { + serializedName: "properties.spotRestorePolicy", + type: { + name: "Composite", + className: "SpotRestorePolicy", + }, + }, priorityMixPolicy: { + serializedName: "properties.priorityMixPolicy", + type: { + name: "Composite", + className: "PriorityMixPolicy", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + }, constrainedMaximumCapacity: { + serializedName: "properties.constrainedMaximumCapacity", + type: { + name: "Boolean", + }, + }, resiliencyPolicy: { + serializedName: "properties.resiliencyPolicy", + type: { + name: "Composite", + className: "ResiliencyPolicy", + }, + }, zonalPlatformFaultDomainAlignMode: { + serializedName: "properties.zonalPlatformFaultDomainAlignMode", + type: { + name: "String", + }, + }, skuProfile: { + serializedName: "properties.skuProfile", + type: { + name: "Composite", + className: "SkuProfile", + }, + } }), + }, +}; +const RollingUpgradeStatusInfo = { + type: { + name: "Composite", + className: "RollingUpgradeStatusInfo", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { policy: { + serializedName: "properties.policy", + type: { + name: "Composite", + className: "RollingUpgradePolicy", + }, + }, runningStatus: { + serializedName: "properties.runningStatus", + type: { + name: "Composite", + className: "RollingUpgradeRunningStatus", + }, + }, progress: { + serializedName: "properties.progress", + type: { + name: "Composite", + className: "RollingUpgradeProgressInfo", + }, + }, error: { + serializedName: "properties.error", + type: { + name: "Composite", + className: "ApiError", + }, + } }), + }, +}; +const VirtualMachineScaleSetVM = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVM", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { instanceId: { + serializedName: "instanceId", + readOnly: true, + type: { + name: "String", + }, + }, sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, plan: { + serializedName: "plan", + type: { + name: "Composite", + className: "Plan", + }, + }, resources: { + serializedName: "resources", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineExtension", + }, + }, + }, + }, zones: { + serializedName: "zones", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "VirtualMachineIdentity", + }, + }, etag: { + serializedName: "etag", + readOnly: true, + type: { + name: "String", + }, + }, latestModelApplied: { + serializedName: "properties.latestModelApplied", + readOnly: true, + type: { + name: "Boolean", + }, + }, vmId: { + serializedName: "properties.vmId", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMInstanceView", + }, + }, hardwareProfile: { + serializedName: "properties.hardwareProfile", + type: { + name: "Composite", + className: "HardwareProfile", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "StorageProfile", + }, + }, additionalCapabilities: { + serializedName: "properties.additionalCapabilities", + type: { + name: "Composite", + className: "AdditionalCapabilities", + }, + }, osProfile: { + serializedName: "properties.osProfile", + type: { + name: "Composite", + className: "OSProfile", + }, + }, securityProfile: { + serializedName: "properties.securityProfile", + type: { + name: "Composite", + className: "SecurityProfile", + }, + }, networkProfile: { + serializedName: "properties.networkProfile", + type: { + name: "Composite", + className: "NetworkProfile", + }, + }, networkProfileConfiguration: { + serializedName: "properties.networkProfileConfiguration", + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMNetworkProfileConfiguration", + }, + }, diagnosticsProfile: { + serializedName: "properties.diagnosticsProfile", + type: { + name: "Composite", + className: "DiagnosticsProfile", + }, + }, availabilitySet: { + serializedName: "properties.availabilitySet", + type: { + name: "Composite", + className: "SubResource", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, licenseType: { + serializedName: "properties.licenseType", + type: { + name: "String", + }, + }, modelDefinitionApplied: { + serializedName: "properties.modelDefinitionApplied", + readOnly: true, + type: { + name: "String", + }, + }, protectionPolicy: { + serializedName: "properties.protectionPolicy", + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMProtectionPolicy", + }, + }, userData: { + serializedName: "properties.userData", + type: { + name: "String", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const VirtualMachine = { + type: { + name: "Composite", + className: "VirtualMachine", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { plan: { + serializedName: "plan", + type: { + name: "Composite", + className: "Plan", + }, + }, resources: { + serializedName: "resources", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineExtension", + }, + }, + }, + }, identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "VirtualMachineIdentity", + }, + }, zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, extendedLocation: { + serializedName: "extendedLocation", + type: { + name: "Composite", + className: "ExtendedLocation", + }, + }, managedBy: { + serializedName: "managedBy", + readOnly: true, + type: { + name: "String", + }, + }, etag: { + serializedName: "etag", + readOnly: true, + type: { + name: "String", + }, + }, hardwareProfile: { + serializedName: "properties.hardwareProfile", + type: { + name: "Composite", + className: "HardwareProfile", + }, + }, scheduledEventsPolicy: { + serializedName: "properties.scheduledEventsPolicy", + type: { + name: "Composite", + className: "ScheduledEventsPolicy", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "StorageProfile", + }, + }, additionalCapabilities: { + serializedName: "properties.additionalCapabilities", + type: { + name: "Composite", + className: "AdditionalCapabilities", + }, + }, osProfile: { + serializedName: "properties.osProfile", + type: { + name: "Composite", + className: "OSProfile", + }, + }, networkProfile: { + serializedName: "properties.networkProfile", + type: { + name: "Composite", + className: "NetworkProfile", + }, + }, securityProfile: { + serializedName: "properties.securityProfile", + type: { + name: "Composite", + className: "SecurityProfile", + }, + }, diagnosticsProfile: { + serializedName: "properties.diagnosticsProfile", + type: { + name: "Composite", + className: "DiagnosticsProfile", + }, + }, availabilitySet: { + serializedName: "properties.availabilitySet", + type: { + name: "Composite", + className: "SubResource", + }, + }, virtualMachineScaleSet: { + serializedName: "properties.virtualMachineScaleSet", + type: { + name: "Composite", + className: "SubResource", + }, + }, proximityPlacementGroup: { + serializedName: "properties.proximityPlacementGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, priority: { + serializedName: "properties.priority", + type: { + name: "String", + }, + }, evictionPolicy: { + serializedName: "properties.evictionPolicy", + type: { + name: "String", + }, + }, billingProfile: { + serializedName: "properties.billingProfile", + type: { + name: "Composite", + className: "BillingProfile", + }, + }, host: { + serializedName: "properties.host", + type: { + name: "Composite", + className: "SubResource", + }, + }, hostGroup: { + serializedName: "properties.hostGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "VirtualMachineInstanceView", + }, + }, licenseType: { + serializedName: "properties.licenseType", + type: { + name: "String", + }, + }, vmId: { + serializedName: "properties.vmId", + readOnly: true, + type: { + name: "String", + }, + }, extensionsTimeBudget: { + serializedName: "properties.extensionsTimeBudget", + type: { + name: "String", + }, + }, platformFaultDomain: { + serializedName: "properties.platformFaultDomain", + type: { + name: "Number", + }, + }, scheduledEventsProfile: { + serializedName: "properties.scheduledEventsProfile", + type: { + name: "Composite", + className: "ScheduledEventsProfile", + }, + }, userData: { + serializedName: "properties.userData", + type: { + name: "String", + }, + }, capacityReservation: { + serializedName: "properties.capacityReservation", + type: { + name: "Composite", + className: "CapacityReservationProfile", + }, + }, applicationProfile: { + serializedName: "properties.applicationProfile", + type: { + name: "Composite", + className: "ApplicationProfile", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const VirtualMachineExtensionImage = { + type: { + name: "Composite", + className: "VirtualMachineExtensionImage", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { operatingSystem: { + serializedName: "properties.operatingSystem", + type: { + name: "String", + }, + }, computeRole: { + serializedName: "properties.computeRole", + type: { + name: "String", + }, + }, handlerSchema: { + serializedName: "properties.handlerSchema", + type: { + name: "String", + }, + }, vmScaleSetEnabled: { + serializedName: "properties.vmScaleSetEnabled", + type: { + name: "Boolean", + }, + }, supportsMultipleExtensions: { + serializedName: "properties.supportsMultipleExtensions", + type: { + name: "Boolean", + }, + } }), + }, +}; +const AvailabilitySet = { + type: { + name: "Composite", + className: "AvailabilitySet", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, platformUpdateDomainCount: { + serializedName: "properties.platformUpdateDomainCount", + type: { + name: "Number", + }, + }, platformFaultDomainCount: { + serializedName: "properties.platformFaultDomainCount", + type: { + name: "Number", + }, + }, virtualMachines: { + serializedName: "properties.virtualMachines", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, proximityPlacementGroup: { + serializedName: "properties.proximityPlacementGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, statuses: { + serializedName: "properties.statuses", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, scheduledEventsPolicy: { + serializedName: "properties.scheduledEventsPolicy", + type: { + name: "Composite", + className: "ScheduledEventsPolicy", + }, + } }), + }, +}; +const ProximityPlacementGroup = { + type: { + name: "Composite", + className: "ProximityPlacementGroup", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, proximityPlacementGroupType: { + serializedName: "properties.proximityPlacementGroupType", + type: { + name: "String", + }, + }, virtualMachines: { + serializedName: "properties.virtualMachines", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceWithColocationStatus", + }, + }, + }, + }, virtualMachineScaleSets: { + serializedName: "properties.virtualMachineScaleSets", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceWithColocationStatus", + }, + }, + }, + }, availabilitySets: { + serializedName: "properties.availabilitySets", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceWithColocationStatus", + }, + }, + }, + }, colocationStatus: { + serializedName: "properties.colocationStatus", + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, intent: { + serializedName: "properties.intent", + type: { + name: "Composite", + className: "ProximityPlacementGroupPropertiesIntent", + }, + } }), + }, +}; +const DedicatedHostGroup = { + type: { + name: "Composite", + className: "DedicatedHostGroup", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, platformFaultDomainCount: { + constraints: { + InclusiveMinimum: 1, + }, + serializedName: "properties.platformFaultDomainCount", + type: { + name: "Number", + }, + }, hosts: { + serializedName: "properties.hosts", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "DedicatedHostGroupInstanceView", + }, + }, supportAutomaticPlacement: { + serializedName: "properties.supportAutomaticPlacement", + type: { + name: "Boolean", + }, + }, additionalCapabilities: { + serializedName: "properties.additionalCapabilities", + type: { + name: "Composite", + className: "DedicatedHostGroupPropertiesAdditionalCapabilities", + }, + } }), + }, +}; +const DedicatedHost = { + type: { + name: "Composite", + className: "DedicatedHost", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, platformFaultDomain: { + constraints: { + InclusiveMinimum: 0, + }, + serializedName: "properties.platformFaultDomain", + type: { + name: "Number", + }, + }, autoReplaceOnFailure: { + serializedName: "properties.autoReplaceOnFailure", + type: { + name: "Boolean", + }, + }, hostId: { + serializedName: "properties.hostId", + readOnly: true, + type: { + name: "String", + }, + }, virtualMachines: { + serializedName: "properties.virtualMachines", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, licenseType: { + serializedName: "properties.licenseType", + type: { + name: "Enum", + allowedValues: [ + "None", + "Windows_Server_Hybrid", + "Windows_Server_Perpetual", + ], + }, + }, provisioningTime: { + serializedName: "properties.provisioningTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "DedicatedHostInstanceView", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const SshPublicKeyResource = { + type: { + name: "Composite", + className: "SshPublicKeyResource", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { publicKey: { + serializedName: "properties.publicKey", + type: { + name: "String", + }, + } }), + }, +}; +const Image = { + type: { + name: "Composite", + className: "Image", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { extendedLocation: { + serializedName: "extendedLocation", + type: { + name: "Composite", + className: "ExtendedLocation", + }, + }, sourceVirtualMachine: { + serializedName: "properties.sourceVirtualMachine", + type: { + name: "Composite", + className: "SubResource", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "ImageStorageProfile", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + } }), + }, +}; +const RestorePointCollection = { + type: { + name: "Composite", + className: "RestorePointCollection", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { source: { + serializedName: "properties.source", + type: { + name: "Composite", + className: "RestorePointCollectionSourceProperties", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, restorePointCollectionId: { + serializedName: "properties.restorePointCollectionId", + readOnly: true, + type: { + name: "String", + }, + }, restorePoints: { + serializedName: "properties.restorePoints", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RestorePoint", + }, + }, + }, + } }), + }, +}; +const CapacityReservationGroup = { + type: { + name: "Composite", + className: "CapacityReservationGroup", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, capacityReservations: { + serializedName: "properties.capacityReservations", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, virtualMachinesAssociated: { + serializedName: "properties.virtualMachinesAssociated", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "CapacityReservationGroupInstanceView", + }, + }, sharingProfile: { + serializedName: "properties.sharingProfile", + type: { + name: "Composite", + className: "ResourceSharingProfile", + }, + } }), + }, +}; +const CapacityReservation = { + type: { + name: "Composite", + className: "CapacityReservation", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, reservationId: { + serializedName: "properties.reservationId", + readOnly: true, + type: { + name: "String", + }, + }, platformFaultDomainCount: { + serializedName: "properties.platformFaultDomainCount", + readOnly: true, + type: { + name: "Number", + }, + }, virtualMachinesAssociated: { + serializedName: "properties.virtualMachinesAssociated", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, provisioningTime: { + serializedName: "properties.provisioningTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "CapacityReservationInstanceView", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const VirtualMachineRunCommand = { + type: { + name: "Composite", + className: "VirtualMachineRunCommand", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { source: { + serializedName: "properties.source", + type: { + name: "Composite", + className: "VirtualMachineRunCommandScriptSource", + }, + }, parameters: { + serializedName: "properties.parameters", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RunCommandInputParameter", + }, + }, + }, + }, protectedParameters: { + serializedName: "properties.protectedParameters", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RunCommandInputParameter", + }, + }, + }, + }, asyncExecution: { + defaultValue: false, + serializedName: "properties.asyncExecution", + type: { + name: "Boolean", + }, + }, runAsUser: { + serializedName: "properties.runAsUser", + type: { + name: "String", + }, + }, runAsPassword: { + serializedName: "properties.runAsPassword", + type: { + name: "String", + }, + }, timeoutInSeconds: { + serializedName: "properties.timeoutInSeconds", + type: { + name: "Number", + }, + }, outputBlobUri: { + serializedName: "properties.outputBlobUri", + type: { + name: "String", + }, + }, errorBlobUri: { + serializedName: "properties.errorBlobUri", + type: { + name: "String", + }, + }, outputBlobManagedIdentity: { + serializedName: "properties.outputBlobManagedIdentity", + type: { + name: "Composite", + className: "RunCommandManagedIdentity", + }, + }, errorBlobManagedIdentity: { + serializedName: "properties.errorBlobManagedIdentity", + type: { + name: "Composite", + className: "RunCommandManagedIdentity", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "VirtualMachineRunCommandInstanceView", + }, + }, treatFailureAsDeploymentFailure: { + defaultValue: false, + serializedName: "properties.treatFailureAsDeploymentFailure", + type: { + name: "Boolean", + }, + } }), + }, +}; +const Disk = { + type: { + name: "Composite", + className: "Disk", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { managedBy: { + serializedName: "managedBy", + readOnly: true, + type: { + name: "String", + }, + }, managedByExtended: { + serializedName: "managedByExtended", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "DiskSku", + }, + }, zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, extendedLocation: { + serializedName: "extendedLocation", + type: { + name: "Composite", + className: "ExtendedLocation", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + }, osType: { + serializedName: "properties.osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + }, purchasePlan: { + serializedName: "properties.purchasePlan", + type: { + name: "Composite", + className: "DiskPurchasePlan", + }, + }, supportedCapabilities: { + serializedName: "properties.supportedCapabilities", + type: { + name: "Composite", + className: "SupportedCapabilities", + }, + }, creationData: { + serializedName: "properties.creationData", + type: { + name: "Composite", + className: "CreationData", + }, + }, diskSizeGB: { + serializedName: "properties.diskSizeGB", + type: { + name: "Number", + }, + }, diskSizeBytes: { + serializedName: "properties.diskSizeBytes", + readOnly: true, + type: { + name: "Number", + }, + }, uniqueId: { + serializedName: "properties.uniqueId", + readOnly: true, + type: { + name: "String", + }, + }, encryptionSettingsCollection: { + serializedName: "properties.encryptionSettingsCollection", + type: { + name: "Composite", + className: "EncryptionSettingsCollection", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, diskIopsReadWrite: { + serializedName: "properties.diskIOPSReadWrite", + type: { + name: "Number", + }, + }, diskMBpsReadWrite: { + serializedName: "properties.diskMBpsReadWrite", + type: { + name: "Number", + }, + }, diskIopsReadOnly: { + serializedName: "properties.diskIOPSReadOnly", + type: { + name: "Number", + }, + }, diskMBpsReadOnly: { + serializedName: "properties.diskMBpsReadOnly", + type: { + name: "Number", + }, + }, diskState: { + serializedName: "properties.diskState", + readOnly: true, + type: { + name: "String", + }, + }, encryption: { + serializedName: "properties.encryption", + type: { + name: "Composite", + className: "Encryption", + }, + }, maxShares: { + serializedName: "properties.maxShares", + type: { + name: "Number", + }, + }, shareInfo: { + serializedName: "properties.shareInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ShareInfoElement", + }, + }, + }, + }, networkAccessPolicy: { + serializedName: "properties.networkAccessPolicy", + type: { + name: "String", + }, + }, diskAccessId: { + serializedName: "properties.diskAccessId", + type: { + name: "String", + }, + }, burstingEnabledTime: { + serializedName: "properties.burstingEnabledTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, tier: { + serializedName: "properties.tier", + type: { + name: "String", + }, + }, burstingEnabled: { + serializedName: "properties.burstingEnabled", + type: { + name: "Boolean", + }, + }, propertyUpdatesInProgress: { + serializedName: "properties.propertyUpdatesInProgress", + type: { + name: "Composite", + className: "PropertyUpdatesInProgress", + }, + }, supportsHibernation: { + serializedName: "properties.supportsHibernation", + type: { + name: "Boolean", + }, + }, securityProfile: { + serializedName: "properties.securityProfile", + type: { + name: "Composite", + className: "DiskSecurityProfile", + }, + }, completionPercent: { + serializedName: "properties.completionPercent", + type: { + name: "Number", + }, + }, publicNetworkAccess: { + serializedName: "properties.publicNetworkAccess", + type: { + name: "String", + }, + }, dataAccessAuthMode: { + serializedName: "properties.dataAccessAuthMode", + type: { + name: "String", + }, + }, optimizedForFrequentAttach: { + serializedName: "properties.optimizedForFrequentAttach", + type: { + name: "Boolean", + }, + }, lastOwnershipUpdateTime: { + serializedName: "properties.LastOwnershipUpdateTime", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const DiskAccess = { + type: { + name: "Composite", + className: "DiskAccess", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { extendedLocation: { + serializedName: "extendedLocation", + type: { + name: "Composite", + className: "ExtendedLocation", + }, + }, privateEndpointConnections: { + serializedName: "properties.privateEndpointConnections", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PrivateEndpointConnection", + }, + }, + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const DiskEncryptionSet = { + type: { + name: "Composite", + className: "DiskEncryptionSet", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "EncryptionSetIdentity", + }, + }, encryptionType: { + serializedName: "properties.encryptionType", + type: { + name: "String", + }, + }, activeKey: { + serializedName: "properties.activeKey", + type: { + name: "Composite", + className: "KeyForDiskEncryptionSet", + }, + }, previousKeys: { + serializedName: "properties.previousKeys", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "KeyForDiskEncryptionSet", + }, + }, + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, rotationToLatestKeyVersionEnabled: { + serializedName: "properties.rotationToLatestKeyVersionEnabled", + type: { + name: "Boolean", + }, + }, lastKeyRotationTimestamp: { + serializedName: "properties.lastKeyRotationTimestamp", + readOnly: true, + type: { + name: "DateTime", + }, + }, autoKeyRotationError: { + serializedName: "properties.autoKeyRotationError", + type: { + name: "Composite", + className: "ApiError", + }, + }, federatedClientId: { + serializedName: "properties.federatedClientId", + type: { + name: "String", + }, + } }), + }, +}; +const Snapshot = { + type: { + name: "Composite", + className: "Snapshot", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { managedBy: { + serializedName: "managedBy", + readOnly: true, + type: { + name: "String", + }, + }, sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "SnapshotSku", + }, + }, extendedLocation: { + serializedName: "extendedLocation", + type: { + name: "Composite", + className: "ExtendedLocation", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + }, osType: { + serializedName: "properties.osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + }, purchasePlan: { + serializedName: "properties.purchasePlan", + type: { + name: "Composite", + className: "DiskPurchasePlan", + }, + }, supportedCapabilities: { + serializedName: "properties.supportedCapabilities", + type: { + name: "Composite", + className: "SupportedCapabilities", + }, + }, creationData: { + serializedName: "properties.creationData", + type: { + name: "Composite", + className: "CreationData", + }, + }, diskSizeGB: { + serializedName: "properties.diskSizeGB", + type: { + name: "Number", + }, + }, diskSizeBytes: { + serializedName: "properties.diskSizeBytes", + readOnly: true, + type: { + name: "Number", + }, + }, diskState: { + serializedName: "properties.diskState", + readOnly: true, + type: { + name: "String", + }, + }, uniqueId: { + serializedName: "properties.uniqueId", + readOnly: true, + type: { + name: "String", + }, + }, encryptionSettingsCollection: { + serializedName: "properties.encryptionSettingsCollection", + type: { + name: "Composite", + className: "EncryptionSettingsCollection", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, incremental: { + serializedName: "properties.incremental", + type: { + name: "Boolean", + }, + }, incrementalSnapshotFamilyId: { + serializedName: "properties.incrementalSnapshotFamilyId", + readOnly: true, + type: { + name: "String", + }, + }, encryption: { + serializedName: "properties.encryption", + type: { + name: "Composite", + className: "Encryption", + }, + }, networkAccessPolicy: { + serializedName: "properties.networkAccessPolicy", + type: { + name: "String", + }, + }, diskAccessId: { + serializedName: "properties.diskAccessId", + type: { + name: "String", + }, + }, securityProfile: { + serializedName: "properties.securityProfile", + type: { + name: "Composite", + className: "DiskSecurityProfile", + }, + }, supportsHibernation: { + serializedName: "properties.supportsHibernation", + type: { + name: "Boolean", + }, + }, publicNetworkAccess: { + serializedName: "properties.publicNetworkAccess", + type: { + name: "String", + }, + }, completionPercent: { + serializedName: "properties.completionPercent", + type: { + name: "Number", + }, + }, copyCompletionError: { + serializedName: "properties.copyCompletionError", + type: { + name: "Composite", + className: "CopyCompletionError", + }, + }, dataAccessAuthMode: { + serializedName: "properties.dataAccessAuthMode", + type: { + name: "String", + }, + } }), + }, +}; +const Gallery = { + type: { + name: "Composite", + className: "Gallery", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { description: { + serializedName: "properties.description", + type: { + name: "String", + }, + }, identifier: { + serializedName: "properties.identifier", + type: { + name: "Composite", + className: "GalleryIdentifier", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, sharingProfile: { + serializedName: "properties.sharingProfile", + type: { + name: "Composite", + className: "SharingProfile", + }, + }, softDeletePolicy: { + serializedName: "properties.softDeletePolicy", + type: { + name: "Composite", + className: "SoftDeletePolicy", + }, + }, sharingStatus: { + serializedName: "properties.sharingStatus", + type: { + name: "Composite", + className: "SharingStatus", + }, + } }), + }, +}; +const GalleryImage = { + type: { + name: "Composite", + className: "GalleryImage", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { description: { + serializedName: "properties.description", + type: { + name: "String", + }, + }, eula: { + serializedName: "properties.eula", + type: { + name: "String", + }, + }, privacyStatementUri: { + serializedName: "properties.privacyStatementUri", + type: { + name: "String", + }, + }, releaseNoteUri: { + serializedName: "properties.releaseNoteUri", + type: { + name: "String", + }, + }, osType: { + serializedName: "properties.osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, osState: { + serializedName: "properties.osState", + type: { + name: "Enum", + allowedValues: ["Generalized", "Specialized"], + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + }, endOfLifeDate: { + serializedName: "properties.endOfLifeDate", + type: { + name: "DateTime", + }, + }, identifier: { + serializedName: "properties.identifier", + type: { + name: "Composite", + className: "GalleryImageIdentifier", + }, + }, recommended: { + serializedName: "properties.recommended", + type: { + name: "Composite", + className: "RecommendedMachineConfiguration", + }, + }, disallowed: { + serializedName: "properties.disallowed", + type: { + name: "Composite", + className: "Disallowed", + }, + }, purchasePlan: { + serializedName: "properties.purchasePlan", + type: { + name: "Composite", + className: "ImagePurchasePlan", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, features: { + serializedName: "properties.features", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryImageFeature", + }, + }, + }, + }, architecture: { + serializedName: "properties.architecture", + type: { + name: "String", + }, + } }), + }, +}; +const GalleryImageVersion = { + type: { + name: "Composite", + className: "GalleryImageVersion", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { publishingProfile: { + serializedName: "properties.publishingProfile", + type: { + name: "Composite", + className: "GalleryImageVersionPublishingProfile", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "GalleryImageVersionStorageProfile", + }, + }, safetyProfile: { + serializedName: "properties.safetyProfile", + type: { + name: "Composite", + className: "GalleryImageVersionSafetyProfile", + }, + }, replicationStatus: { + serializedName: "properties.replicationStatus", + type: { + name: "Composite", + className: "ReplicationStatus", + }, + }, securityProfile: { + serializedName: "properties.securityProfile", + type: { + name: "Composite", + className: "ImageVersionSecurityProfile", + }, + } }), + }, +}; +const GalleryApplication = { + type: { + name: "Composite", + className: "GalleryApplication", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { description: { + serializedName: "properties.description", + type: { + name: "String", + }, + }, eula: { + serializedName: "properties.eula", + type: { + name: "String", + }, + }, privacyStatementUri: { + serializedName: "properties.privacyStatementUri", + type: { + name: "String", + }, + }, releaseNoteUri: { + serializedName: "properties.releaseNoteUri", + type: { + name: "String", + }, + }, endOfLifeDate: { + serializedName: "properties.endOfLifeDate", + type: { + name: "DateTime", + }, + }, supportedOSType: { + serializedName: "properties.supportedOSType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, customActions: { + serializedName: "properties.customActions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryApplicationCustomAction", + }, + }, + }, + } }), + }, +}; +const GalleryApplicationVersion = { + type: { + name: "Composite", + className: "GalleryApplicationVersion", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { publishingProfile: { + serializedName: "properties.publishingProfile", + type: { + name: "Composite", + className: "GalleryApplicationVersionPublishingProfile", + }, + }, safetyProfile: { + serializedName: "properties.safetyProfile", + type: { + name: "Composite", + className: "GalleryApplicationVersionSafetyProfile", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, replicationStatus: { + serializedName: "properties.replicationStatus", + type: { + name: "Composite", + className: "ReplicationStatus", + }, + } }), + }, +}; +const VirtualMachineScaleSetUpdate = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, plan: { + serializedName: "plan", + type: { + name: "Composite", + className: "Plan", + }, + }, identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "VirtualMachineScaleSetIdentity", + }, + }, zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, upgradePolicy: { + serializedName: "properties.upgradePolicy", + type: { + name: "Composite", + className: "UpgradePolicy", + }, + }, automaticRepairsPolicy: { + serializedName: "properties.automaticRepairsPolicy", + type: { + name: "Composite", + className: "AutomaticRepairsPolicy", + }, + }, virtualMachineProfile: { + serializedName: "properties.virtualMachineProfile", + type: { + name: "Composite", + className: "VirtualMachineScaleSetUpdateVMProfile", + }, + }, overprovision: { + serializedName: "properties.overprovision", + type: { + name: "Boolean", + }, + }, doNotRunExtensionsOnOverprovisionedVMs: { + serializedName: "properties.doNotRunExtensionsOnOverprovisionedVMs", + type: { + name: "Boolean", + }, + }, singlePlacementGroup: { + serializedName: "properties.singlePlacementGroup", + type: { + name: "Boolean", + }, + }, additionalCapabilities: { + serializedName: "properties.additionalCapabilities", + type: { + name: "Composite", + className: "AdditionalCapabilities", + }, + }, scaleInPolicy: { + serializedName: "properties.scaleInPolicy", + type: { + name: "Composite", + className: "ScaleInPolicy", + }, + }, proximityPlacementGroup: { + serializedName: "properties.proximityPlacementGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, priorityMixPolicy: { + serializedName: "properties.priorityMixPolicy", + type: { + name: "Composite", + className: "PriorityMixPolicy", + }, + }, spotRestorePolicy: { + serializedName: "properties.spotRestorePolicy", + type: { + name: "Composite", + className: "SpotRestorePolicy", + }, + }, resiliencyPolicy: { + serializedName: "properties.resiliencyPolicy", + type: { + name: "Composite", + className: "ResiliencyPolicy", + }, + }, zonalPlatformFaultDomainAlignMode: { + serializedName: "properties.zonalPlatformFaultDomainAlignMode", + type: { + name: "String", + }, + }, skuProfile: { + serializedName: "properties.skuProfile", + type: { + name: "Composite", + className: "SkuProfile", + }, + } }), + }, +}; +const VirtualMachineExtensionUpdate = { + type: { + name: "Composite", + className: "VirtualMachineExtensionUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { forceUpdateTag: { + serializedName: "properties.forceUpdateTag", + type: { + name: "String", + }, + }, publisher: { + serializedName: "properties.publisher", + type: { + name: "String", + }, + }, type: { + serializedName: "properties.type", + type: { + name: "String", + }, + }, typeHandlerVersion: { + serializedName: "properties.typeHandlerVersion", + type: { + name: "String", + }, + }, autoUpgradeMinorVersion: { + serializedName: "properties.autoUpgradeMinorVersion", + type: { + name: "Boolean", + }, + }, enableAutomaticUpgrade: { + serializedName: "properties.enableAutomaticUpgrade", + type: { + name: "Boolean", + }, + }, settings: { + serializedName: "properties.settings", + type: { + name: "any", + }, + }, protectedSettings: { + serializedName: "properties.protectedSettings", + type: { + name: "any", + }, + }, suppressFailures: { + serializedName: "properties.suppressFailures", + type: { + name: "Boolean", + }, + }, protectedSettingsFromKeyVault: { + serializedName: "properties.protectedSettingsFromKeyVault", + type: { + name: "Composite", + className: "KeyVaultSecretReference", + }, + } }), + }, +}; +const VirtualMachineUpdate = { + type: { + name: "Composite", + className: "VirtualMachineUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { plan: { + serializedName: "plan", + type: { + name: "Composite", + className: "Plan", + }, + }, identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "VirtualMachineIdentity", + }, + }, zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, hardwareProfile: { + serializedName: "properties.hardwareProfile", + type: { + name: "Composite", + className: "HardwareProfile", + }, + }, scheduledEventsPolicy: { + serializedName: "properties.scheduledEventsPolicy", + type: { + name: "Composite", + className: "ScheduledEventsPolicy", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "StorageProfile", + }, + }, additionalCapabilities: { + serializedName: "properties.additionalCapabilities", + type: { + name: "Composite", + className: "AdditionalCapabilities", + }, + }, osProfile: { + serializedName: "properties.osProfile", + type: { + name: "Composite", + className: "OSProfile", + }, + }, networkProfile: { + serializedName: "properties.networkProfile", + type: { + name: "Composite", + className: "NetworkProfile", + }, + }, securityProfile: { + serializedName: "properties.securityProfile", + type: { + name: "Composite", + className: "SecurityProfile", + }, + }, diagnosticsProfile: { + serializedName: "properties.diagnosticsProfile", + type: { + name: "Composite", + className: "DiagnosticsProfile", + }, + }, availabilitySet: { + serializedName: "properties.availabilitySet", + type: { + name: "Composite", + className: "SubResource", + }, + }, virtualMachineScaleSet: { + serializedName: "properties.virtualMachineScaleSet", + type: { + name: "Composite", + className: "SubResource", + }, + }, proximityPlacementGroup: { + serializedName: "properties.proximityPlacementGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, priority: { + serializedName: "properties.priority", + type: { + name: "String", + }, + }, evictionPolicy: { + serializedName: "properties.evictionPolicy", + type: { + name: "String", + }, + }, billingProfile: { + serializedName: "properties.billingProfile", + type: { + name: "Composite", + className: "BillingProfile", + }, + }, host: { + serializedName: "properties.host", + type: { + name: "Composite", + className: "SubResource", + }, + }, hostGroup: { + serializedName: "properties.hostGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "VirtualMachineInstanceView", + }, + }, licenseType: { + serializedName: "properties.licenseType", + type: { + name: "String", + }, + }, vmId: { + serializedName: "properties.vmId", + readOnly: true, + type: { + name: "String", + }, + }, extensionsTimeBudget: { + serializedName: "properties.extensionsTimeBudget", + type: { + name: "String", + }, + }, platformFaultDomain: { + serializedName: "properties.platformFaultDomain", + type: { + name: "Number", + }, + }, scheduledEventsProfile: { + serializedName: "properties.scheduledEventsProfile", + type: { + name: "Composite", + className: "ScheduledEventsProfile", + }, + }, userData: { + serializedName: "properties.userData", + type: { + name: "String", + }, + }, capacityReservation: { + serializedName: "properties.capacityReservation", + type: { + name: "Composite", + className: "CapacityReservationProfile", + }, + }, applicationProfile: { + serializedName: "properties.applicationProfile", + type: { + name: "Composite", + className: "ApplicationProfile", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const AvailabilitySetUpdate = { + type: { + name: "Composite", + className: "AvailabilitySetUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, platformUpdateDomainCount: { + serializedName: "properties.platformUpdateDomainCount", + type: { + name: "Number", + }, + }, platformFaultDomainCount: { + serializedName: "properties.platformFaultDomainCount", + type: { + name: "Number", + }, + }, virtualMachines: { + serializedName: "properties.virtualMachines", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResource", + }, + }, + }, + }, proximityPlacementGroup: { + serializedName: "properties.proximityPlacementGroup", + type: { + name: "Composite", + className: "SubResource", + }, + }, statuses: { + serializedName: "properties.statuses", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InstanceViewStatus", + }, + }, + }, + }, scheduledEventsPolicy: { + serializedName: "properties.scheduledEventsPolicy", + type: { + name: "Composite", + className: "ScheduledEventsPolicy", + }, + } }), + }, +}; +const ProximityPlacementGroupUpdate = { + type: { + name: "Composite", + className: "ProximityPlacementGroupUpdate", + modelProperties: Object.assign({}, UpdateResource.type.modelProperties), + }, +}; +const DedicatedHostGroupUpdate = { + type: { + name: "Composite", + className: "DedicatedHostGroupUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { zones: { + serializedName: "zones", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, platformFaultDomainCount: { + constraints: { + InclusiveMinimum: 1, + }, + serializedName: "properties.platformFaultDomainCount", + type: { + name: "Number", + }, + }, hosts: { + serializedName: "properties.hosts", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "DedicatedHostGroupInstanceView", + }, + }, supportAutomaticPlacement: { + serializedName: "properties.supportAutomaticPlacement", + type: { + name: "Boolean", + }, + }, additionalCapabilities: { + serializedName: "properties.additionalCapabilities", + type: { + name: "Composite", + className: "DedicatedHostGroupPropertiesAdditionalCapabilities", + }, + } }), + }, +}; +const DedicatedHostUpdate = { + type: { + name: "Composite", + className: "DedicatedHostUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, platformFaultDomain: { + constraints: { + InclusiveMinimum: 0, + }, + serializedName: "properties.platformFaultDomain", + type: { + name: "Number", + }, + }, autoReplaceOnFailure: { + serializedName: "properties.autoReplaceOnFailure", + type: { + name: "Boolean", + }, + }, hostId: { + serializedName: "properties.hostId", + readOnly: true, + type: { + name: "String", + }, + }, virtualMachines: { + serializedName: "properties.virtualMachines", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, licenseType: { + serializedName: "properties.licenseType", + type: { + name: "Enum", + allowedValues: [ + "None", + "Windows_Server_Hybrid", + "Windows_Server_Perpetual", + ], + }, + }, provisioningTime: { + serializedName: "properties.provisioningTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "DedicatedHostInstanceView", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const SshPublicKeyUpdateResource = { + type: { + name: "Composite", + className: "SshPublicKeyUpdateResource", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { publicKey: { + serializedName: "properties.publicKey", + type: { + name: "String", + }, + } }), + }, +}; +const ImageUpdate = { + type: { + name: "Composite", + className: "ImageUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { sourceVirtualMachine: { + serializedName: "properties.sourceVirtualMachine", + type: { + name: "Composite", + className: "SubResource", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "ImageStorageProfile", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + } }), + }, +}; +const RestorePointCollectionUpdate = { + type: { + name: "Composite", + className: "RestorePointCollectionUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { source: { + serializedName: "properties.source", + type: { + name: "Composite", + className: "RestorePointCollectionSourceProperties", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, restorePointCollectionId: { + serializedName: "properties.restorePointCollectionId", + readOnly: true, + type: { + name: "String", + }, + }, restorePoints: { + serializedName: "properties.restorePoints", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RestorePoint", + }, + }, + }, + } }), + }, +}; +const CapacityReservationGroupUpdate = { + type: { + name: "Composite", + className: "CapacityReservationGroupUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { capacityReservations: { + serializedName: "properties.capacityReservations", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, virtualMachinesAssociated: { + serializedName: "properties.virtualMachinesAssociated", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "CapacityReservationGroupInstanceView", + }, + }, sharingProfile: { + serializedName: "properties.sharingProfile", + type: { + name: "Composite", + className: "ResourceSharingProfile", + }, + } }), + }, +}; +const CapacityReservationUpdate = { + type: { + name: "Composite", + className: "CapacityReservationUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { sku: { + serializedName: "sku", + type: { + name: "Composite", + className: "Sku", + }, + }, reservationId: { + serializedName: "properties.reservationId", + readOnly: true, + type: { + name: "String", + }, + }, platformFaultDomainCount: { + serializedName: "properties.platformFaultDomainCount", + readOnly: true, + type: { + name: "Number", + }, + }, virtualMachinesAssociated: { + serializedName: "properties.virtualMachinesAssociated", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SubResourceReadOnly", + }, + }, + }, + }, provisioningTime: { + serializedName: "properties.provisioningTime", + readOnly: true, + type: { + name: "DateTime", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "CapacityReservationInstanceView", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + } }), + }, +}; +const VirtualMachineRunCommandUpdate = { + type: { + name: "Composite", + className: "VirtualMachineRunCommandUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResource.type.modelProperties), { source: { + serializedName: "properties.source", + type: { + name: "Composite", + className: "VirtualMachineRunCommandScriptSource", + }, + }, parameters: { + serializedName: "properties.parameters", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RunCommandInputParameter", + }, + }, + }, + }, protectedParameters: { + serializedName: "properties.protectedParameters", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RunCommandInputParameter", + }, + }, + }, + }, asyncExecution: { + defaultValue: false, + serializedName: "properties.asyncExecution", + type: { + name: "Boolean", + }, + }, runAsUser: { + serializedName: "properties.runAsUser", + type: { + name: "String", + }, + }, runAsPassword: { + serializedName: "properties.runAsPassword", + type: { + name: "String", + }, + }, timeoutInSeconds: { + serializedName: "properties.timeoutInSeconds", + type: { + name: "Number", + }, + }, outputBlobUri: { + serializedName: "properties.outputBlobUri", + type: { + name: "String", + }, + }, errorBlobUri: { + serializedName: "properties.errorBlobUri", + type: { + name: "String", + }, + }, outputBlobManagedIdentity: { + serializedName: "properties.outputBlobManagedIdentity", + type: { + name: "Composite", + className: "RunCommandManagedIdentity", + }, + }, errorBlobManagedIdentity: { + serializedName: "properties.errorBlobManagedIdentity", + type: { + name: "Composite", + className: "RunCommandManagedIdentity", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "VirtualMachineRunCommandInstanceView", + }, + }, treatFailureAsDeploymentFailure: { + defaultValue: false, + serializedName: "properties.treatFailureAsDeploymentFailure", + type: { + name: "Boolean", + }, + } }), + }, +}; +const VirtualMachineScaleSetVMReimageParameters = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMReimageParameters", + modelProperties: Object.assign(Object.assign({}, VirtualMachineReimageParameters.type.modelProperties), { forceUpdateOSDiskForEphemeral: { + serializedName: "forceUpdateOSDiskForEphemeral", + type: { + name: "Boolean", + }, + } }), + }, +}; +const VirtualMachineExtension = { + type: { + name: "Composite", + className: "VirtualMachineExtension", + modelProperties: Object.assign(Object.assign({}, ResourceWithOptionalLocation.type.modelProperties), { forceUpdateTag: { + serializedName: "properties.forceUpdateTag", + type: { + name: "String", + }, + }, publisher: { + serializedName: "properties.publisher", + type: { + name: "String", + }, + }, typePropertiesType: { + serializedName: "properties.type", + type: { + name: "String", + }, + }, typeHandlerVersion: { + serializedName: "properties.typeHandlerVersion", + type: { + name: "String", + }, + }, autoUpgradeMinorVersion: { + serializedName: "properties.autoUpgradeMinorVersion", + type: { + name: "Boolean", + }, + }, enableAutomaticUpgrade: { + serializedName: "properties.enableAutomaticUpgrade", + type: { + name: "Boolean", + }, + }, settings: { + serializedName: "properties.settings", + type: { + name: "any", + }, + }, protectedSettings: { + serializedName: "properties.protectedSettings", + type: { + name: "any", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "VirtualMachineExtensionInstanceView", + }, + }, suppressFailures: { + serializedName: "properties.suppressFailures", + type: { + name: "Boolean", + }, + }, protectedSettingsFromKeyVault: { + serializedName: "properties.protectedSettingsFromKeyVault", + type: { + name: "Composite", + className: "KeyVaultSecretReference", + }, + }, provisionAfterExtensions: { + serializedName: "properties.provisionAfterExtensions", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + } }), + }, +}; +const DedicatedHostInstanceViewWithName = { + type: { + name: "Composite", + className: "DedicatedHostInstanceViewWithName", + modelProperties: Object.assign(Object.assign({}, DedicatedHostInstanceView.type.modelProperties), { name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + } }), + }, +}; +const ImageOSDisk = { + type: { + name: "Composite", + className: "ImageOSDisk", + modelProperties: Object.assign(Object.assign({}, ImageDisk.type.modelProperties), { osType: { + serializedName: "osType", + required: true, + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, osState: { + serializedName: "osState", + required: true, + type: { + name: "Enum", + allowedValues: ["Generalized", "Specialized"], + }, + } }), + }, +}; +const ImageDataDisk = { + type: { + name: "Composite", + className: "ImageDataDisk", + modelProperties: Object.assign(Object.assign({}, ImageDisk.type.modelProperties), { lun: { + serializedName: "lun", + required: true, + type: { + name: "Number", + }, + } }), + }, +}; +const RestorePoint = { + type: { + name: "Composite", + className: "RestorePoint", + modelProperties: Object.assign(Object.assign({}, ProxyResource.type.modelProperties), { excludeDisks: { + serializedName: "properties.excludeDisks", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ApiEntityReference", + }, + }, + }, + }, sourceMetadata: { + serializedName: "properties.sourceMetadata", + type: { + name: "Composite", + className: "RestorePointSourceMetadata", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, consistencyMode: { + serializedName: "properties.consistencyMode", + type: { + name: "String", + }, + }, timeCreated: { + serializedName: "properties.timeCreated", + type: { + name: "DateTime", + }, + }, sourceRestorePoint: { + serializedName: "properties.sourceRestorePoint", + type: { + name: "Composite", + className: "ApiEntityReference", + }, + }, instanceView: { + serializedName: "properties.instanceView", + type: { + name: "Composite", + className: "RestorePointInstanceView", + }, + } }), + }, +}; +const CapacityReservationInstanceViewWithName = { + type: { + name: "Composite", + className: "CapacityReservationInstanceViewWithName", + modelProperties: Object.assign(Object.assign({}, CapacityReservationInstanceView.type.modelProperties), { name: { + serializedName: "name", + readOnly: true, + type: { + name: "String", + }, + } }), + }, +}; +const RequestRateByIntervalInput = { + type: { + name: "Composite", + className: "RequestRateByIntervalInput", + modelProperties: Object.assign(Object.assign({}, LogAnalyticsInputBase.type.modelProperties), { intervalLength: { + serializedName: "intervalLength", + required: true, + type: { + name: "Enum", + allowedValues: ["ThreeMins", "FiveMins", "ThirtyMins", "SixtyMins"], + }, + } }), + }, +}; +const ThrottledRequestsInput = { + type: { + name: "Composite", + className: "ThrottledRequestsInput", + modelProperties: Object.assign({}, LogAnalyticsInputBase.type.modelProperties), + }, +}; +const RunCommandDocument = { + type: { + name: "Composite", + className: "RunCommandDocument", + modelProperties: Object.assign(Object.assign({}, RunCommandDocumentBase.type.modelProperties), { script: { + serializedName: "script", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + }, parameters: { + serializedName: "parameters", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RunCommandParameterDefinition", + }, + }, + }, + } }), + }, +}; +const DiskRestorePoint = { + type: { + name: "Composite", + className: "DiskRestorePoint", + modelProperties: Object.assign(Object.assign({}, ProxyOnlyResource.type.modelProperties), { timeCreated: { + serializedName: "properties.timeCreated", + readOnly: true, + type: { + name: "DateTime", + }, + }, sourceResourceId: { + serializedName: "properties.sourceResourceId", + readOnly: true, + type: { + name: "String", + }, + }, osType: { + serializedName: "properties.osType", + readOnly: true, + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + }, purchasePlan: { + serializedName: "properties.purchasePlan", + type: { + name: "Composite", + className: "DiskPurchasePlan", + }, + }, supportedCapabilities: { + serializedName: "properties.supportedCapabilities", + type: { + name: "Composite", + className: "SupportedCapabilities", + }, + }, familyId: { + serializedName: "properties.familyId", + readOnly: true, + type: { + name: "String", + }, + }, sourceUniqueId: { + serializedName: "properties.sourceUniqueId", + readOnly: true, + type: { + name: "String", + }, + }, encryption: { + serializedName: "properties.encryption", + type: { + name: "Composite", + className: "Encryption", + }, + }, supportsHibernation: { + serializedName: "properties.supportsHibernation", + type: { + name: "Boolean", + }, + }, networkAccessPolicy: { + serializedName: "properties.networkAccessPolicy", + type: { + name: "String", + }, + }, publicNetworkAccess: { + serializedName: "properties.publicNetworkAccess", + type: { + name: "String", + }, + }, diskAccessId: { + serializedName: "properties.diskAccessId", + type: { + name: "String", + }, + }, completionPercent: { + serializedName: "properties.completionPercent", + type: { + name: "Number", + }, + }, replicationState: { + serializedName: "properties.replicationState", + readOnly: true, + type: { + name: "String", + }, + }, sourceResourceLocation: { + serializedName: "properties.sourceResourceLocation", + readOnly: true, + type: { + name: "String", + }, + }, securityProfile: { + serializedName: "properties.securityProfile", + type: { + name: "Composite", + className: "DiskSecurityProfile", + }, + }, logicalSectorSize: { + serializedName: "properties.logicalSectorSize", + readOnly: true, + type: { + name: "Number", + }, + } }), + }, +}; +const GalleryUpdate = { + type: { + name: "Composite", + className: "GalleryUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResourceDefinition.type.modelProperties), { description: { + serializedName: "properties.description", + type: { + name: "String", + }, + }, identifier: { + serializedName: "properties.identifier", + type: { + name: "Composite", + className: "GalleryIdentifier", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, sharingProfile: { + serializedName: "properties.sharingProfile", + type: { + name: "Composite", + className: "SharingProfile", + }, + }, softDeletePolicy: { + serializedName: "properties.softDeletePolicy", + type: { + name: "Composite", + className: "SoftDeletePolicy", + }, + }, sharingStatus: { + serializedName: "properties.sharingStatus", + type: { + name: "Composite", + className: "SharingStatus", + }, + } }), + }, +}; +const GalleryImageUpdate = { + type: { + name: "Composite", + className: "GalleryImageUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResourceDefinition.type.modelProperties), { description: { + serializedName: "properties.description", + type: { + name: "String", + }, + }, eula: { + serializedName: "properties.eula", + type: { + name: "String", + }, + }, privacyStatementUri: { + serializedName: "properties.privacyStatementUri", + type: { + name: "String", + }, + }, releaseNoteUri: { + serializedName: "properties.releaseNoteUri", + type: { + name: "String", + }, + }, osType: { + serializedName: "properties.osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, osState: { + serializedName: "properties.osState", + type: { + name: "Enum", + allowedValues: ["Generalized", "Specialized"], + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + }, endOfLifeDate: { + serializedName: "properties.endOfLifeDate", + type: { + name: "DateTime", + }, + }, identifier: { + serializedName: "properties.identifier", + type: { + name: "Composite", + className: "GalleryImageIdentifier", + }, + }, recommended: { + serializedName: "properties.recommended", + type: { + name: "Composite", + className: "RecommendedMachineConfiguration", + }, + }, disallowed: { + serializedName: "properties.disallowed", + type: { + name: "Composite", + className: "Disallowed", + }, + }, purchasePlan: { + serializedName: "properties.purchasePlan", + type: { + name: "Composite", + className: "ImagePurchasePlan", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, features: { + serializedName: "properties.features", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryImageFeature", + }, + }, + }, + }, architecture: { + serializedName: "properties.architecture", + type: { + name: "String", + }, + } }), + }, +}; +const GalleryImageVersionUpdate = { + type: { + name: "Composite", + className: "GalleryImageVersionUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResourceDefinition.type.modelProperties), { publishingProfile: { + serializedName: "properties.publishingProfile", + type: { + name: "Composite", + className: "GalleryImageVersionPublishingProfile", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "GalleryImageVersionStorageProfile", + }, + }, safetyProfile: { + serializedName: "properties.safetyProfile", + type: { + name: "Composite", + className: "GalleryImageVersionSafetyProfile", + }, + }, replicationStatus: { + serializedName: "properties.replicationStatus", + type: { + name: "Composite", + className: "ReplicationStatus", + }, + }, securityProfile: { + serializedName: "properties.securityProfile", + type: { + name: "Composite", + className: "ImageVersionSecurityProfile", + }, + } }), + }, +}; +const GalleryApplicationUpdate = { + type: { + name: "Composite", + className: "GalleryApplicationUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResourceDefinition.type.modelProperties), { description: { + serializedName: "properties.description", + type: { + name: "String", + }, + }, eula: { + serializedName: "properties.eula", + type: { + name: "String", + }, + }, privacyStatementUri: { + serializedName: "properties.privacyStatementUri", + type: { + name: "String", + }, + }, releaseNoteUri: { + serializedName: "properties.releaseNoteUri", + type: { + name: "String", + }, + }, endOfLifeDate: { + serializedName: "properties.endOfLifeDate", + type: { + name: "DateTime", + }, + }, supportedOSType: { + serializedName: "properties.supportedOSType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, customActions: { + serializedName: "properties.customActions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryApplicationCustomAction", + }, + }, + }, + } }), + }, +}; +const GalleryApplicationVersionUpdate = { + type: { + name: "Composite", + className: "GalleryApplicationVersionUpdate", + modelProperties: Object.assign(Object.assign({}, UpdateResourceDefinition.type.modelProperties), { publishingProfile: { + serializedName: "properties.publishingProfile", + type: { + name: "Composite", + className: "GalleryApplicationVersionPublishingProfile", + }, + }, safetyProfile: { + serializedName: "properties.safetyProfile", + type: { + name: "Composite", + className: "GalleryApplicationVersionSafetyProfile", + }, + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String", + }, + }, replicationStatus: { + serializedName: "properties.replicationStatus", + type: { + name: "Composite", + className: "ReplicationStatus", + }, + } }), + }, +}; +const GalleryImageVersionPublishingProfile = { + type: { + name: "Composite", + className: "GalleryImageVersionPublishingProfile", + modelProperties: Object.assign({}, GalleryArtifactPublishingProfileBase.type.modelProperties), + }, +}; +const GalleryApplicationVersionPublishingProfile = { + type: { + name: "Composite", + className: "GalleryApplicationVersionPublishingProfile", + modelProperties: Object.assign(Object.assign({}, GalleryArtifactPublishingProfileBase.type.modelProperties), { source: { + serializedName: "source", + type: { + name: "Composite", + className: "UserArtifactSource", + }, + }, manageActions: { + serializedName: "manageActions", + type: { + name: "Composite", + className: "UserArtifactManage", + }, + }, settings: { + serializedName: "settings", + type: { + name: "Composite", + className: "UserArtifactSettings", + }, + }, advancedSettings: { + serializedName: "advancedSettings", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, enableHealthCheck: { + serializedName: "enableHealthCheck", + type: { + name: "Boolean", + }, + }, customActions: { + serializedName: "customActions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryApplicationCustomAction", + }, + }, + }, + } }), + }, +}; +const OSDiskImageEncryption = { + type: { + name: "Composite", + className: "OSDiskImageEncryption", + modelProperties: Object.assign(Object.assign({}, DiskImageEncryption.type.modelProperties), { securityProfile: { + serializedName: "securityProfile", + type: { + name: "Composite", + className: "OSDiskImageSecurityProfile", + }, + } }), + }, +}; +const DataDiskImageEncryption = { + type: { + name: "Composite", + className: "DataDiskImageEncryption", + modelProperties: Object.assign(Object.assign({}, DiskImageEncryption.type.modelProperties), { lun: { + serializedName: "lun", + required: true, + type: { + name: "Number", + }, + } }), + }, +}; +const GalleryArtifactVersionFullSource = { + type: { + name: "Composite", + className: "GalleryArtifactVersionFullSource", + modelProperties: Object.assign(Object.assign({}, GalleryArtifactVersionSource.type.modelProperties), { communityGalleryImageId: { + serializedName: "communityGalleryImageId", + type: { + name: "String", + }, + }, virtualMachineId: { + serializedName: "virtualMachineId", + type: { + name: "String", + }, + } }), + }, +}; +const GalleryDiskImageSource = { + type: { + name: "Composite", + className: "GalleryDiskImageSource", + modelProperties: Object.assign(Object.assign({}, GalleryArtifactVersionSource.type.modelProperties), { uri: { + serializedName: "uri", + type: { + name: "String", + }, + }, storageAccountId: { + serializedName: "storageAccountId", + type: { + name: "String", + }, + } }), + }, +}; +const GalleryOSDiskImage = { + type: { + name: "Composite", + className: "GalleryOSDiskImage", + modelProperties: Object.assign({}, GalleryDiskImage.type.modelProperties), + }, +}; +const GalleryDataDiskImage = { + type: { + name: "Composite", + className: "GalleryDataDiskImage", + modelProperties: Object.assign(Object.assign({}, GalleryDiskImage.type.modelProperties), { lun: { + serializedName: "lun", + required: true, + type: { + name: "Number", + }, + } }), + }, +}; +const GalleryImageVersionSafetyProfile = { + type: { + name: "Composite", + className: "GalleryImageVersionSafetyProfile", + modelProperties: Object.assign(Object.assign({}, GalleryArtifactSafetyProfileBase.type.modelProperties), { reportedForPolicyViolation: { + serializedName: "reportedForPolicyViolation", + readOnly: true, + type: { + name: "Boolean", + }, + }, policyViolations: { + serializedName: "policyViolations", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyViolation", + }, + }, + }, + } }), + }, +}; +const GalleryApplicationVersionSafetyProfile = { + type: { + name: "Composite", + className: "GalleryApplicationVersionSafetyProfile", + modelProperties: Object.assign({}, GalleryArtifactSafetyProfileBase.type.modelProperties), + }, +}; +const PirSharedGalleryResource = { + type: { + name: "Composite", + className: "PirSharedGalleryResource", + modelProperties: Object.assign(Object.assign({}, PirResource.type.modelProperties), { uniqueId: { + serializedName: "identifier.uniqueId", + type: { + name: "String", + }, + } }), + }, +}; +const SharedGalleryOSDiskImage = { + type: { + name: "Composite", + className: "SharedGalleryOSDiskImage", + modelProperties: Object.assign({}, SharedGalleryDiskImage.type.modelProperties), + }, +}; +const SharedGalleryDataDiskImage = { + type: { + name: "Composite", + className: "SharedGalleryDataDiskImage", + modelProperties: Object.assign(Object.assign({}, SharedGalleryDiskImage.type.modelProperties), { lun: { + serializedName: "lun", + required: true, + type: { + name: "Number", + }, + } }), + }, +}; +const CommunityGallery = { + type: { + name: "Composite", + className: "CommunityGallery", + modelProperties: Object.assign(Object.assign({}, PirCommunityGalleryResource.type.modelProperties), { disclaimer: { + serializedName: "properties.disclaimer", + type: { + name: "String", + }, + }, artifactTags: { + serializedName: "properties.artifactTags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + }, communityMetadata: { + serializedName: "properties.communityMetadata", + type: { + name: "Composite", + className: "CommunityGalleryMetadata", + }, + } }), + }, +}; +const CommunityGalleryImage = { + type: { + name: "Composite", + className: "CommunityGalleryImage", + modelProperties: Object.assign(Object.assign({}, PirCommunityGalleryResource.type.modelProperties), { osType: { + serializedName: "properties.osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, osState: { + serializedName: "properties.osState", + type: { + name: "Enum", + allowedValues: ["Generalized", "Specialized"], + }, + }, endOfLifeDate: { + serializedName: "properties.endOfLifeDate", + type: { + name: "DateTime", + }, + }, identifier: { + serializedName: "properties.identifier", + type: { + name: "Composite", + className: "CommunityGalleryImageIdentifier", + }, + }, recommended: { + serializedName: "properties.recommended", + type: { + name: "Composite", + className: "RecommendedMachineConfiguration", + }, + }, disallowed: { + serializedName: "properties.disallowed", + type: { + name: "Composite", + className: "Disallowed", + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + }, features: { + serializedName: "properties.features", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryImageFeature", + }, + }, + }, + }, purchasePlan: { + serializedName: "properties.purchasePlan", + type: { + name: "Composite", + className: "ImagePurchasePlan", + }, + }, architecture: { + serializedName: "properties.architecture", + type: { + name: "String", + }, + }, privacyStatementUri: { + serializedName: "properties.privacyStatementUri", + type: { + name: "String", + }, + }, eula: { + serializedName: "properties.eula", + type: { + name: "String", + }, + }, disclaimer: { + serializedName: "properties.disclaimer", + type: { + name: "String", + }, + }, artifactTags: { + serializedName: "properties.artifactTags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + } }), + }, +}; +const CommunityGalleryImageVersion = { + type: { + name: "Composite", + className: "CommunityGalleryImageVersion", + modelProperties: Object.assign(Object.assign({}, PirCommunityGalleryResource.type.modelProperties), { publishedDate: { + serializedName: "properties.publishedDate", + type: { + name: "DateTime", + }, + }, endOfLifeDate: { + serializedName: "properties.endOfLifeDate", + type: { + name: "DateTime", + }, + }, excludeFromLatest: { + serializedName: "properties.excludeFromLatest", + type: { + name: "Boolean", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "SharedGalleryImageVersionStorageProfile", + }, + }, disclaimer: { + serializedName: "properties.disclaimer", + type: { + name: "String", + }, + }, artifactTags: { + serializedName: "properties.artifactTags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + } }), + }, +}; +const VirtualMachineImage = { + type: { + name: "Composite", + className: "VirtualMachineImage", + modelProperties: Object.assign(Object.assign({}, VirtualMachineImageResource.type.modelProperties), { plan: { + serializedName: "properties.plan", + type: { + name: "Composite", + className: "PurchasePlan", + }, + }, osDiskImage: { + serializedName: "properties.osDiskImage", + type: { + name: "Composite", + className: "OSDiskImage", + }, + }, dataDiskImages: { + serializedName: "properties.dataDiskImages", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DataDiskImage", + }, + }, + }, + }, automaticOSUpgradeProperties: { + serializedName: "properties.automaticOSUpgradeProperties", + type: { + name: "Composite", + className: "AutomaticOSUpgradeProperties", + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + }, disallowed: { + serializedName: "properties.disallowed", + type: { + name: "Composite", + className: "DisallowedConfiguration", + }, + }, features: { + serializedName: "properties.features", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageFeature", + }, + }, + }, + }, architecture: { + serializedName: "properties.architecture", + type: { + name: "String", + }, + }, imageDeprecationStatus: { + serializedName: "properties.imageDeprecationStatus", + type: { + name: "Composite", + className: "ImageDeprecationStatus", + }, + } }), + }, +}; +const VirtualMachineScaleSetReimageParameters = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetReimageParameters", + modelProperties: Object.assign(Object.assign({}, VirtualMachineScaleSetVMReimageParameters.type.modelProperties), { instanceIds: { + serializedName: "instanceIds", + type: { + name: "Sequence", + element: { + type: { + name: "String", + }, + }, + }, + } }), + }, +}; +const SharedGallery = { + type: { + name: "Composite", + className: "SharedGallery", + modelProperties: Object.assign(Object.assign({}, PirSharedGalleryResource.type.modelProperties), { artifactTags: { + serializedName: "properties.artifactTags", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + } }), + }, +}; +const SharedGalleryImage = { + type: { + name: "Composite", + className: "SharedGalleryImage", + modelProperties: Object.assign(Object.assign({}, PirSharedGalleryResource.type.modelProperties), { osType: { + serializedName: "properties.osType", + type: { + name: "Enum", + allowedValues: ["Windows", "Linux"], + }, + }, osState: { + serializedName: "properties.osState", + type: { + name: "Enum", + allowedValues: ["Generalized", "Specialized"], + }, + }, endOfLifeDate: { + serializedName: "properties.endOfLifeDate", + type: { + name: "DateTime", + }, + }, identifier: { + serializedName: "properties.identifier", + type: { + name: "Composite", + className: "GalleryImageIdentifier", + }, + }, recommended: { + serializedName: "properties.recommended", + type: { + name: "Composite", + className: "RecommendedMachineConfiguration", + }, + }, disallowed: { + serializedName: "properties.disallowed", + type: { + name: "Composite", + className: "Disallowed", + }, + }, hyperVGeneration: { + serializedName: "properties.hyperVGeneration", + type: { + name: "String", + }, + }, features: { + serializedName: "properties.features", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "GalleryImageFeature", + }, + }, + }, + }, purchasePlan: { + serializedName: "properties.purchasePlan", + type: { + name: "Composite", + className: "ImagePurchasePlan", + }, + }, architecture: { + serializedName: "properties.architecture", + type: { + name: "String", + }, + }, privacyStatementUri: { + serializedName: "properties.privacyStatementUri", + type: { + name: "String", + }, + }, eula: { + serializedName: "properties.eula", + type: { + name: "String", + }, + }, artifactTags: { + serializedName: "properties.artifactTags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + } }), + }, +}; +const SharedGalleryImageVersion = { + type: { + name: "Composite", + className: "SharedGalleryImageVersion", + modelProperties: Object.assign(Object.assign({}, PirSharedGalleryResource.type.modelProperties), { publishedDate: { + serializedName: "properties.publishedDate", + type: { + name: "DateTime", + }, + }, endOfLifeDate: { + serializedName: "properties.endOfLifeDate", + type: { + name: "DateTime", + }, + }, excludeFromLatest: { + serializedName: "properties.excludeFromLatest", + type: { + name: "Boolean", + }, + }, storageProfile: { + serializedName: "properties.storageProfile", + type: { + name: "Composite", + className: "SharedGalleryImageVersionStorageProfile", + }, + }, artifactTags: { + serializedName: "properties.artifactTags", + type: { + name: "Dictionary", + value: { type: { name: "String" } }, + }, + } }), + }, +}; +const VirtualMachineScaleSetsReapplyHeaders = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetsReapplyHeaders", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetsApproveRollingUpgradeHeaders = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetsApproveRollingUpgradeHeaders", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMsApproveRollingUpgradeHeaders = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMsApproveRollingUpgradeHeaders", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachineScaleSetVMsAttachDetachDataDisksHeaders = { + type: { + name: "Composite", + className: "VirtualMachineScaleSetVMsAttachDetachDataDisksHeaders", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String", + }, + }, + }, + }, +}; +const VirtualMachinesAttachDetachDataDisksHeaders = { + type: { + name: "Composite", + className: "VirtualMachinesAttachDetachDataDisksHeaders", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String", + }, + }, + }, + }, +}; +const DedicatedHostsRedeployHeaders = { + type: { + name: "Composite", + className: "DedicatedHostsRedeployHeaders", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String", + }, + }, + }, + }, +}; + +var Mappers = /*#__PURE__*/Object.freeze({ + __proto__: null, + AccessUri: AccessUri, + AdditionalCapabilities: AdditionalCapabilities, + AdditionalUnattendContent: AdditionalUnattendContent, + AlternativeOption: AlternativeOption, + ApiEntityReference: ApiEntityReference, + ApiError: ApiError, + ApiErrorBase: ApiErrorBase, + ApplicationProfile: ApplicationProfile, + AttachDetachDataDisksRequest: AttachDetachDataDisksRequest, + AutomaticOSUpgradePolicy: AutomaticOSUpgradePolicy, + AutomaticOSUpgradeProperties: AutomaticOSUpgradeProperties, + AutomaticRepairsPolicy: AutomaticRepairsPolicy, + AvailabilitySet: AvailabilitySet, + AvailabilitySetListResult: AvailabilitySetListResult, + AvailabilitySetUpdate: AvailabilitySetUpdate, + AvailablePatchSummary: AvailablePatchSummary, + BillingProfile: BillingProfile, + BootDiagnostics: BootDiagnostics, + BootDiagnosticsInstanceView: BootDiagnosticsInstanceView, + CapacityReservation: CapacityReservation, + CapacityReservationGroup: CapacityReservationGroup, + CapacityReservationGroupInstanceView: CapacityReservationGroupInstanceView, + CapacityReservationGroupListResult: CapacityReservationGroupListResult, + CapacityReservationGroupUpdate: CapacityReservationGroupUpdate, + CapacityReservationInstanceView: CapacityReservationInstanceView, + CapacityReservationInstanceViewWithName: CapacityReservationInstanceViewWithName, + CapacityReservationListResult: CapacityReservationListResult, + CapacityReservationProfile: CapacityReservationProfile, + CapacityReservationUpdate: CapacityReservationUpdate, + CapacityReservationUtilization: CapacityReservationUtilization, + CloudError: CloudError, + CloudService: CloudService, + CloudServiceExtensionProfile: CloudServiceExtensionProfile, + CloudServiceExtensionProperties: CloudServiceExtensionProperties, + CloudServiceInstanceView: CloudServiceInstanceView, + CloudServiceListResult: CloudServiceListResult, + CloudServiceNetworkProfile: CloudServiceNetworkProfile, + CloudServiceOsProfile: CloudServiceOsProfile, + CloudServiceProperties: CloudServiceProperties, + CloudServiceRole: CloudServiceRole, + CloudServiceRoleListResult: CloudServiceRoleListResult, + CloudServiceRoleProfile: CloudServiceRoleProfile, + CloudServiceRoleProfileProperties: CloudServiceRoleProfileProperties, + CloudServiceRoleProperties: CloudServiceRoleProperties, + CloudServiceRoleSku: CloudServiceRoleSku, + CloudServiceUpdate: CloudServiceUpdate, + CloudServiceVaultAndSecretReference: CloudServiceVaultAndSecretReference, + CloudServiceVaultCertificate: CloudServiceVaultCertificate, + CloudServiceVaultSecretGroup: CloudServiceVaultSecretGroup, + CommunityGallery: CommunityGallery, + CommunityGalleryImage: CommunityGalleryImage, + CommunityGalleryImageIdentifier: CommunityGalleryImageIdentifier, + CommunityGalleryImageList: CommunityGalleryImageList, + CommunityGalleryImageVersion: CommunityGalleryImageVersion, + CommunityGalleryImageVersionList: CommunityGalleryImageVersionList, + CommunityGalleryInfo: CommunityGalleryInfo, + CommunityGalleryMetadata: CommunityGalleryMetadata, + ComputeOperationListResult: ComputeOperationListResult, + ComputeOperationValue: ComputeOperationValue, + CopyCompletionError: CopyCompletionError, + CreationData: CreationData, + DataDisk: DataDisk, + DataDiskImage: DataDiskImage, + DataDiskImageEncryption: DataDiskImageEncryption, + DataDisksToAttach: DataDisksToAttach, + DataDisksToDetach: DataDisksToDetach, + DedicatedHost: DedicatedHost, + DedicatedHostAllocatableVM: DedicatedHostAllocatableVM, + DedicatedHostAvailableCapacity: DedicatedHostAvailableCapacity, + DedicatedHostGroup: DedicatedHostGroup, + DedicatedHostGroupInstanceView: DedicatedHostGroupInstanceView, + DedicatedHostGroupListResult: DedicatedHostGroupListResult, + DedicatedHostGroupPropertiesAdditionalCapabilities: DedicatedHostGroupPropertiesAdditionalCapabilities, + DedicatedHostGroupUpdate: DedicatedHostGroupUpdate, + DedicatedHostInstanceView: DedicatedHostInstanceView, + DedicatedHostInstanceViewWithName: DedicatedHostInstanceViewWithName, + DedicatedHostListResult: DedicatedHostListResult, + DedicatedHostSizeListResult: DedicatedHostSizeListResult, + DedicatedHostUpdate: DedicatedHostUpdate, + DedicatedHostsRedeployHeaders: DedicatedHostsRedeployHeaders, + DiagnosticsProfile: DiagnosticsProfile, + DiffDiskSettings: DiffDiskSettings, + Disallowed: Disallowed, + DisallowedConfiguration: DisallowedConfiguration, + Disk: Disk, + DiskAccess: DiskAccess, + DiskAccessList: DiskAccessList, + DiskAccessUpdate: DiskAccessUpdate, + DiskEncryptionSet: DiskEncryptionSet, + DiskEncryptionSetList: DiskEncryptionSetList, + DiskEncryptionSetParameters: DiskEncryptionSetParameters, + DiskEncryptionSetUpdate: DiskEncryptionSetUpdate, + DiskEncryptionSettings: DiskEncryptionSettings, + DiskImageEncryption: DiskImageEncryption, + DiskInstanceView: DiskInstanceView, + DiskList: DiskList, + DiskPurchasePlan: DiskPurchasePlan, + DiskRestorePoint: DiskRestorePoint, + DiskRestorePointAttributes: DiskRestorePointAttributes, + DiskRestorePointInstanceView: DiskRestorePointInstanceView, + DiskRestorePointList: DiskRestorePointList, + DiskRestorePointReplicationStatus: DiskRestorePointReplicationStatus, + DiskSecurityProfile: DiskSecurityProfile, + DiskSku: DiskSku, + DiskUpdate: DiskUpdate, + Encryption: Encryption, + EncryptionIdentity: EncryptionIdentity, + EncryptionImages: EncryptionImages, + EncryptionSetIdentity: EncryptionSetIdentity, + EncryptionSettingsCollection: EncryptionSettingsCollection, + EncryptionSettingsElement: EncryptionSettingsElement, + EventGridAndResourceGraph: EventGridAndResourceGraph, + ExtendedLocation: ExtendedLocation, + Extension: Extension, + Gallery: Gallery, + GalleryApplication: GalleryApplication, + GalleryApplicationCustomAction: GalleryApplicationCustomAction, + GalleryApplicationCustomActionParameter: GalleryApplicationCustomActionParameter, + GalleryApplicationList: GalleryApplicationList, + GalleryApplicationUpdate: GalleryApplicationUpdate, + GalleryApplicationVersion: GalleryApplicationVersion, + GalleryApplicationVersionList: GalleryApplicationVersionList, + GalleryApplicationVersionPublishingProfile: GalleryApplicationVersionPublishingProfile, + GalleryApplicationVersionSafetyProfile: GalleryApplicationVersionSafetyProfile, + GalleryApplicationVersionUpdate: GalleryApplicationVersionUpdate, + GalleryArtifactPublishingProfileBase: GalleryArtifactPublishingProfileBase, + GalleryArtifactSafetyProfileBase: GalleryArtifactSafetyProfileBase, + GalleryArtifactSource: GalleryArtifactSource, + GalleryArtifactVersionFullSource: GalleryArtifactVersionFullSource, + GalleryArtifactVersionSource: GalleryArtifactVersionSource, + GalleryDataDiskImage: GalleryDataDiskImage, + GalleryDiskImage: GalleryDiskImage, + GalleryDiskImageSource: GalleryDiskImageSource, + GalleryExtendedLocation: GalleryExtendedLocation, + GalleryIdentifier: GalleryIdentifier, + GalleryImage: GalleryImage, + GalleryImageFeature: GalleryImageFeature, + GalleryImageIdentifier: GalleryImageIdentifier, + GalleryImageList: GalleryImageList, + GalleryImageUpdate: GalleryImageUpdate, + GalleryImageVersion: GalleryImageVersion, + GalleryImageVersionList: GalleryImageVersionList, + GalleryImageVersionPublishingProfile: GalleryImageVersionPublishingProfile, + GalleryImageVersionSafetyProfile: GalleryImageVersionSafetyProfile, + GalleryImageVersionStorageProfile: GalleryImageVersionStorageProfile, + GalleryImageVersionUefiSettings: GalleryImageVersionUefiSettings, + GalleryImageVersionUpdate: GalleryImageVersionUpdate, + GalleryList: GalleryList, + GalleryOSDiskImage: GalleryOSDiskImage, + GalleryTargetExtendedLocation: GalleryTargetExtendedLocation, + GalleryUpdate: GalleryUpdate, + GrantAccessData: GrantAccessData, + HardwareProfile: HardwareProfile, + Image: Image, + ImageDataDisk: ImageDataDisk, + ImageDeprecationStatus: ImageDeprecationStatus, + ImageDisk: ImageDisk, + ImageDiskReference: ImageDiskReference, + ImageListResult: ImageListResult, + ImageOSDisk: ImageOSDisk, + ImagePurchasePlan: ImagePurchasePlan, + ImageReference: ImageReference, + ImageStorageProfile: ImageStorageProfile, + ImageUpdate: ImageUpdate, + ImageVersionSecurityProfile: ImageVersionSecurityProfile, + InnerError: InnerError, + InstanceSku: InstanceSku, + InstanceViewStatus: InstanceViewStatus, + InstanceViewStatusesSummary: InstanceViewStatusesSummary, + KeyForDiskEncryptionSet: KeyForDiskEncryptionSet, + KeyVaultAndKeyReference: KeyVaultAndKeyReference, + KeyVaultAndSecretReference: KeyVaultAndSecretReference, + KeyVaultKeyReference: KeyVaultKeyReference, + KeyVaultSecretReference: KeyVaultSecretReference, + LastPatchInstallationSummary: LastPatchInstallationSummary, + LatestGalleryImageVersion: LatestGalleryImageVersion, + LinuxConfiguration: LinuxConfiguration, + LinuxParameters: LinuxParameters, + LinuxPatchSettings: LinuxPatchSettings, + LinuxVMGuestPatchAutomaticByPlatformSettings: LinuxVMGuestPatchAutomaticByPlatformSettings, + ListUsagesResult: ListUsagesResult, + LoadBalancerConfiguration: LoadBalancerConfiguration, + LoadBalancerConfigurationProperties: LoadBalancerConfigurationProperties, + LoadBalancerFrontendIpConfiguration: LoadBalancerFrontendIpConfiguration, + LoadBalancerFrontendIpConfigurationProperties: LoadBalancerFrontendIpConfigurationProperties, + LogAnalyticsInputBase: LogAnalyticsInputBase, + LogAnalyticsOperationResult: LogAnalyticsOperationResult, + LogAnalyticsOutput: LogAnalyticsOutput, + MaintenanceRedeployStatus: MaintenanceRedeployStatus, + ManagedArtifact: ManagedArtifact, + ManagedDiskParameters: ManagedDiskParameters, + NetworkInterfaceReference: NetworkInterfaceReference, + NetworkProfile: NetworkProfile, + OSDisk: OSDisk, + OSDiskImage: OSDiskImage, + OSDiskImageEncryption: OSDiskImageEncryption, + OSDiskImageSecurityProfile: OSDiskImageSecurityProfile, + OSFamily: OSFamily, + OSFamilyListResult: OSFamilyListResult, + OSFamilyProperties: OSFamilyProperties, + OSImageNotificationProfile: OSImageNotificationProfile, + OSProfile: OSProfile, + OSProfileProvisioningData: OSProfileProvisioningData, + OSVersion: OSVersion, + OSVersionListResult: OSVersionListResult, + OSVersionProperties: OSVersionProperties, + OSVersionPropertiesBase: OSVersionPropertiesBase, + OrchestrationServiceStateInput: OrchestrationServiceStateInput, + OrchestrationServiceSummary: OrchestrationServiceSummary, + PatchInstallationDetail: PatchInstallationDetail, + PatchSettings: PatchSettings, + PirCommunityGalleryResource: PirCommunityGalleryResource, + PirResource: PirResource, + PirSharedGalleryResource: PirSharedGalleryResource, + Plan: Plan, + PolicyViolation: PolicyViolation, + PriorityMixPolicy: PriorityMixPolicy, + PrivateEndpoint: PrivateEndpoint, + PrivateEndpointConnection: PrivateEndpointConnection, + PrivateEndpointConnectionListResult: PrivateEndpointConnectionListResult, + PrivateLinkResource: PrivateLinkResource, + PrivateLinkResourceListResult: PrivateLinkResourceListResult, + PrivateLinkServiceConnectionState: PrivateLinkServiceConnectionState, + PropertyUpdatesInProgress: PropertyUpdatesInProgress, + ProximityPlacementGroup: ProximityPlacementGroup, + ProximityPlacementGroupListResult: ProximityPlacementGroupListResult, + ProximityPlacementGroupPropertiesIntent: ProximityPlacementGroupPropertiesIntent, + ProximityPlacementGroupUpdate: ProximityPlacementGroupUpdate, + ProxyAgentSettings: ProxyAgentSettings, + ProxyOnlyResource: ProxyOnlyResource, + ProxyResource: ProxyResource, + PublicIPAddressSku: PublicIPAddressSku, + PurchasePlan: PurchasePlan, + RecommendedMachineConfiguration: RecommendedMachineConfiguration, + RecoveryWalkResponse: RecoveryWalkResponse, + RegionalReplicationStatus: RegionalReplicationStatus, + RegionalSharingStatus: RegionalSharingStatus, + ReplicationStatus: ReplicationStatus, + RequestRateByIntervalInput: RequestRateByIntervalInput, + ResiliencyPolicy: ResiliencyPolicy, + ResilientVMCreationPolicy: ResilientVMCreationPolicy, + ResilientVMDeletionPolicy: ResilientVMDeletionPolicy, + Resource: Resource, + ResourceInstanceViewStatus: ResourceInstanceViewStatus, + ResourceRange: ResourceRange, + ResourceSharingProfile: ResourceSharingProfile, + ResourceSku: ResourceSku, + ResourceSkuCapabilities: ResourceSkuCapabilities, + ResourceSkuCapacity: ResourceSkuCapacity, + ResourceSkuCosts: ResourceSkuCosts, + ResourceSkuLocationInfo: ResourceSkuLocationInfo, + ResourceSkuRestrictionInfo: ResourceSkuRestrictionInfo, + ResourceSkuRestrictions: ResourceSkuRestrictions, + ResourceSkuZoneDetails: ResourceSkuZoneDetails, + ResourceSkusResult: ResourceSkusResult, + ResourceUriList: ResourceUriList, + ResourceWithOptionalLocation: ResourceWithOptionalLocation, + RestorePoint: RestorePoint, + RestorePointCollection: RestorePointCollection, + RestorePointCollectionListResult: RestorePointCollectionListResult, + RestorePointCollectionSourceProperties: RestorePointCollectionSourceProperties, + RestorePointCollectionUpdate: RestorePointCollectionUpdate, + RestorePointEncryption: RestorePointEncryption, + RestorePointInstanceView: RestorePointInstanceView, + RestorePointSourceMetadata: RestorePointSourceMetadata, + RestorePointSourceVMDataDisk: RestorePointSourceVMDataDisk, + RestorePointSourceVMStorageProfile: RestorePointSourceVMStorageProfile, + RestorePointSourceVmosDisk: RestorePointSourceVmosDisk, + RetrieveBootDiagnosticsDataResult: RetrieveBootDiagnosticsDataResult, + RoleInstance: RoleInstance, + RoleInstanceListResult: RoleInstanceListResult, + RoleInstanceNetworkProfile: RoleInstanceNetworkProfile, + RoleInstanceProperties: RoleInstanceProperties, + RoleInstanceView: RoleInstanceView, + RoleInstances: RoleInstances, + RollbackStatusInfo: RollbackStatusInfo, + RollingUpgradePolicy: RollingUpgradePolicy, + RollingUpgradeProgressInfo: RollingUpgradeProgressInfo, + RollingUpgradeRunningStatus: RollingUpgradeRunningStatus, + RollingUpgradeStatusInfo: RollingUpgradeStatusInfo, + RunCommandDocument: RunCommandDocument, + RunCommandDocumentBase: RunCommandDocumentBase, + RunCommandInput: RunCommandInput, + RunCommandInputParameter: RunCommandInputParameter, + RunCommandListResult: RunCommandListResult, + RunCommandManagedIdentity: RunCommandManagedIdentity, + RunCommandParameterDefinition: RunCommandParameterDefinition, + RunCommandResult: RunCommandResult, + ScaleInPolicy: ScaleInPolicy, + ScheduledEventsAdditionalPublishingTargets: ScheduledEventsAdditionalPublishingTargets, + ScheduledEventsPolicy: ScheduledEventsPolicy, + ScheduledEventsProfile: ScheduledEventsProfile, + SecurityPostureReference: SecurityPostureReference, + SecurityPostureReferenceUpdate: SecurityPostureReferenceUpdate, + SecurityProfile: SecurityProfile, + ServiceArtifactReference: ServiceArtifactReference, + ShareInfoElement: ShareInfoElement, + SharedGallery: SharedGallery, + SharedGalleryDataDiskImage: SharedGalleryDataDiskImage, + SharedGalleryDiskImage: SharedGalleryDiskImage, + SharedGalleryImage: SharedGalleryImage, + SharedGalleryImageList: SharedGalleryImageList, + SharedGalleryImageVersion: SharedGalleryImageVersion, + SharedGalleryImageVersionList: SharedGalleryImageVersionList, + SharedGalleryImageVersionStorageProfile: SharedGalleryImageVersionStorageProfile, + SharedGalleryList: SharedGalleryList, + SharedGalleryOSDiskImage: SharedGalleryOSDiskImage, + SharingProfile: SharingProfile, + SharingProfileGroup: SharingProfileGroup, + SharingStatus: SharingStatus, + SharingUpdate: SharingUpdate, + Sku: Sku, + SkuProfile: SkuProfile, + SkuProfileVMSize: SkuProfileVMSize, + Snapshot: Snapshot, + SnapshotList: SnapshotList, + SnapshotSku: SnapshotSku, + SnapshotUpdate: SnapshotUpdate, + SoftDeletePolicy: SoftDeletePolicy, + SourceVault: SourceVault, + SpotRestorePolicy: SpotRestorePolicy, + SshConfiguration: SshConfiguration, + SshGenerateKeyPairInputParameters: SshGenerateKeyPairInputParameters, + SshPublicKey: SshPublicKey, + SshPublicKeyGenerateKeyPairResult: SshPublicKeyGenerateKeyPairResult, + SshPublicKeyResource: SshPublicKeyResource, + SshPublicKeyUpdateResource: SshPublicKeyUpdateResource, + SshPublicKeysGroupListResult: SshPublicKeysGroupListResult, + StatusCodeCount: StatusCodeCount, + StorageProfile: StorageProfile, + SubResource: SubResource, + SubResourceReadOnly: SubResourceReadOnly, + SubResourceWithColocationStatus: SubResourceWithColocationStatus, + SupportedCapabilities: SupportedCapabilities, + SystemData: SystemData, + TargetRegion: TargetRegion, + TerminateNotificationProfile: TerminateNotificationProfile, + ThrottledRequestsInput: ThrottledRequestsInput, + UefiKey: UefiKey, + UefiKeySignatures: UefiKeySignatures, + UefiSettings: UefiSettings, + UpdateDomain: UpdateDomain, + UpdateDomainListResult: UpdateDomainListResult, + UpdateResource: UpdateResource, + UpdateResourceDefinition: UpdateResourceDefinition, + UpgradeOperationHistoricalStatusInfo: UpgradeOperationHistoricalStatusInfo, + UpgradeOperationHistoricalStatusInfoProperties: UpgradeOperationHistoricalStatusInfoProperties, + UpgradeOperationHistoryStatus: UpgradeOperationHistoryStatus, + UpgradePolicy: UpgradePolicy, + Usage: Usage, + UsageName: UsageName, + UserArtifactManage: UserArtifactManage, + UserArtifactSettings: UserArtifactSettings, + UserArtifactSource: UserArtifactSource, + UserAssignedIdentitiesValue: UserAssignedIdentitiesValue, + UserInitiatedReboot: UserInitiatedReboot, + UserInitiatedRedeploy: UserInitiatedRedeploy, + VMDiskSecurityProfile: VMDiskSecurityProfile, + VMGalleryApplication: VMGalleryApplication, + VMScaleSetConvertToSinglePlacementGroupInput: VMScaleSetConvertToSinglePlacementGroupInput, + VMSizeProperties: VMSizeProperties, + VaultCertificate: VaultCertificate, + VaultSecretGroup: VaultSecretGroup, + VirtualHardDisk: VirtualHardDisk, + VirtualMachine: VirtualMachine, + VirtualMachineAgentInstanceView: VirtualMachineAgentInstanceView, + VirtualMachineAssessPatchesResult: VirtualMachineAssessPatchesResult, + VirtualMachineCaptureParameters: VirtualMachineCaptureParameters, + VirtualMachineCaptureResult: VirtualMachineCaptureResult, + VirtualMachineExtension: VirtualMachineExtension, + VirtualMachineExtensionHandlerInstanceView: VirtualMachineExtensionHandlerInstanceView, + VirtualMachineExtensionImage: VirtualMachineExtensionImage, + VirtualMachineExtensionInstanceView: VirtualMachineExtensionInstanceView, + VirtualMachineExtensionUpdate: VirtualMachineExtensionUpdate, + VirtualMachineExtensionsListResult: VirtualMachineExtensionsListResult, + VirtualMachineHealthStatus: VirtualMachineHealthStatus, + VirtualMachineIdentity: VirtualMachineIdentity, + VirtualMachineImage: VirtualMachineImage, + VirtualMachineImageFeature: VirtualMachineImageFeature, + VirtualMachineImageResource: VirtualMachineImageResource, + VirtualMachineInstallPatchesParameters: VirtualMachineInstallPatchesParameters, + VirtualMachineInstallPatchesResult: VirtualMachineInstallPatchesResult, + VirtualMachineInstanceView: VirtualMachineInstanceView, + VirtualMachineIpTag: VirtualMachineIpTag, + VirtualMachineListResult: VirtualMachineListResult, + VirtualMachineNetworkInterfaceConfiguration: VirtualMachineNetworkInterfaceConfiguration, + VirtualMachineNetworkInterfaceDnsSettingsConfiguration: VirtualMachineNetworkInterfaceDnsSettingsConfiguration, + VirtualMachineNetworkInterfaceIPConfiguration: VirtualMachineNetworkInterfaceIPConfiguration, + VirtualMachinePatchStatus: VirtualMachinePatchStatus, + VirtualMachinePublicIPAddressConfiguration: VirtualMachinePublicIPAddressConfiguration, + VirtualMachinePublicIPAddressDnsSettingsConfiguration: VirtualMachinePublicIPAddressDnsSettingsConfiguration, + VirtualMachineReimageParameters: VirtualMachineReimageParameters, + VirtualMachineRunCommand: VirtualMachineRunCommand, + VirtualMachineRunCommandInstanceView: VirtualMachineRunCommandInstanceView, + VirtualMachineRunCommandScriptSource: VirtualMachineRunCommandScriptSource, + VirtualMachineRunCommandUpdate: VirtualMachineRunCommandUpdate, + VirtualMachineRunCommandsListResult: VirtualMachineRunCommandsListResult, + VirtualMachineScaleSet: VirtualMachineScaleSet, + VirtualMachineScaleSetDataDisk: VirtualMachineScaleSetDataDisk, + VirtualMachineScaleSetExtension: VirtualMachineScaleSetExtension, + VirtualMachineScaleSetExtensionListResult: VirtualMachineScaleSetExtensionListResult, + VirtualMachineScaleSetExtensionProfile: VirtualMachineScaleSetExtensionProfile, + VirtualMachineScaleSetExtensionUpdate: VirtualMachineScaleSetExtensionUpdate, + VirtualMachineScaleSetHardwareProfile: VirtualMachineScaleSetHardwareProfile, + VirtualMachineScaleSetIPConfiguration: VirtualMachineScaleSetIPConfiguration, + VirtualMachineScaleSetIdentity: VirtualMachineScaleSetIdentity, + VirtualMachineScaleSetInstanceView: VirtualMachineScaleSetInstanceView, + VirtualMachineScaleSetInstanceViewStatusesSummary: VirtualMachineScaleSetInstanceViewStatusesSummary, + VirtualMachineScaleSetIpTag: VirtualMachineScaleSetIpTag, + VirtualMachineScaleSetListOSUpgradeHistory: VirtualMachineScaleSetListOSUpgradeHistory, + VirtualMachineScaleSetListResult: VirtualMachineScaleSetListResult, + VirtualMachineScaleSetListSkusResult: VirtualMachineScaleSetListSkusResult, + VirtualMachineScaleSetListWithLinkResult: VirtualMachineScaleSetListWithLinkResult, + VirtualMachineScaleSetManagedDiskParameters: VirtualMachineScaleSetManagedDiskParameters, + VirtualMachineScaleSetNetworkConfiguration: VirtualMachineScaleSetNetworkConfiguration, + VirtualMachineScaleSetNetworkConfigurationDnsSettings: VirtualMachineScaleSetNetworkConfigurationDnsSettings, + VirtualMachineScaleSetNetworkProfile: VirtualMachineScaleSetNetworkProfile, + VirtualMachineScaleSetOSDisk: VirtualMachineScaleSetOSDisk, + VirtualMachineScaleSetOSProfile: VirtualMachineScaleSetOSProfile, + VirtualMachineScaleSetPublicIPAddressConfiguration: VirtualMachineScaleSetPublicIPAddressConfiguration, + VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings: VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings, + VirtualMachineScaleSetReimageParameters: VirtualMachineScaleSetReimageParameters, + VirtualMachineScaleSetSku: VirtualMachineScaleSetSku, + VirtualMachineScaleSetSkuCapacity: VirtualMachineScaleSetSkuCapacity, + VirtualMachineScaleSetStorageProfile: VirtualMachineScaleSetStorageProfile, + VirtualMachineScaleSetUpdate: VirtualMachineScaleSetUpdate, + VirtualMachineScaleSetUpdateIPConfiguration: VirtualMachineScaleSetUpdateIPConfiguration, + VirtualMachineScaleSetUpdateNetworkConfiguration: VirtualMachineScaleSetUpdateNetworkConfiguration, + VirtualMachineScaleSetUpdateNetworkProfile: VirtualMachineScaleSetUpdateNetworkProfile, + VirtualMachineScaleSetUpdateOSDisk: VirtualMachineScaleSetUpdateOSDisk, + VirtualMachineScaleSetUpdateOSProfile: VirtualMachineScaleSetUpdateOSProfile, + VirtualMachineScaleSetUpdatePublicIPAddressConfiguration: VirtualMachineScaleSetUpdatePublicIPAddressConfiguration, + VirtualMachineScaleSetUpdateStorageProfile: VirtualMachineScaleSetUpdateStorageProfile, + VirtualMachineScaleSetUpdateVMProfile: VirtualMachineScaleSetUpdateVMProfile, + VirtualMachineScaleSetVM: VirtualMachineScaleSetVM, + VirtualMachineScaleSetVMExtension: VirtualMachineScaleSetVMExtension, + VirtualMachineScaleSetVMExtensionUpdate: VirtualMachineScaleSetVMExtensionUpdate, + VirtualMachineScaleSetVMExtensionsListResult: VirtualMachineScaleSetVMExtensionsListResult, + VirtualMachineScaleSetVMExtensionsSummary: VirtualMachineScaleSetVMExtensionsSummary, + VirtualMachineScaleSetVMInstanceIDs: VirtualMachineScaleSetVMInstanceIDs, + VirtualMachineScaleSetVMInstanceRequiredIDs: VirtualMachineScaleSetVMInstanceRequiredIDs, + VirtualMachineScaleSetVMInstanceView: VirtualMachineScaleSetVMInstanceView, + VirtualMachineScaleSetVMListResult: VirtualMachineScaleSetVMListResult, + VirtualMachineScaleSetVMNetworkProfileConfiguration: VirtualMachineScaleSetVMNetworkProfileConfiguration, + VirtualMachineScaleSetVMProfile: VirtualMachineScaleSetVMProfile, + VirtualMachineScaleSetVMProtectionPolicy: VirtualMachineScaleSetVMProtectionPolicy, + VirtualMachineScaleSetVMReimageParameters: VirtualMachineScaleSetVMReimageParameters, + VirtualMachineScaleSetVMsApproveRollingUpgradeHeaders: VirtualMachineScaleSetVMsApproveRollingUpgradeHeaders, + VirtualMachineScaleSetVMsAttachDetachDataDisksHeaders: VirtualMachineScaleSetVMsAttachDetachDataDisksHeaders, + VirtualMachineScaleSetsApproveRollingUpgradeHeaders: VirtualMachineScaleSetsApproveRollingUpgradeHeaders, + VirtualMachineScaleSetsReapplyHeaders: VirtualMachineScaleSetsReapplyHeaders, + VirtualMachineSize: VirtualMachineSize, + VirtualMachineSizeListResult: VirtualMachineSizeListResult, + VirtualMachineSoftwarePatchProperties: VirtualMachineSoftwarePatchProperties, + VirtualMachineStatusCodeCount: VirtualMachineStatusCodeCount, + VirtualMachineUpdate: VirtualMachineUpdate, + VirtualMachinesAttachDetachDataDisksHeaders: VirtualMachinesAttachDetachDataDisksHeaders, + VmImagesInEdgeZoneListResult: VmImagesInEdgeZoneListResult, + WinRMConfiguration: WinRMConfiguration, + WinRMListener: WinRMListener, + WindowsConfiguration: WindowsConfiguration, + WindowsParameters: WindowsParameters, + WindowsVMGuestPatchAutomaticByPlatformSettings: WindowsVMGuestPatchAutomaticByPlatformSettings +}); + +/* + * 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. + */ +const accept = { + parameterPath: "accept", + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Accept", + type: { + name: "String", + }, + }, +}; +const $host = { + parameterPath: "$host", + mapper: { + serializedName: "$host", + required: true, + type: { + name: "String", + }, + }, + skipEncoding: true, +}; +const apiVersion = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2024-07-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String", + }, + }, +}; +const location = { + parameterPath: "location", + mapper: { + constraints: { + Pattern: new RegExp("^[-\\w\\._]+$"), + }, + serializedName: "location", + required: true, + type: { + name: "String", + }, + }, +}; +const subscriptionId = { + parameterPath: "subscriptionId", + mapper: { + serializedName: "subscriptionId", + required: true, + type: { + name: "String", + }, + }, +}; +const nextLink = { + parameterPath: "nextLink", + mapper: { + serializedName: "nextLink", + required: true, + type: { + name: "String", + }, + }, + skipEncoding: true, +}; +const contentType = { + parameterPath: ["options", "contentType"], + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Content-Type", + type: { + name: "String", + }, + }, +}; +const parameters = { + parameterPath: "parameters", + mapper: VirtualMachineScaleSet, +}; +const resourceGroupName = { + parameterPath: "resourceGroupName", + mapper: { + serializedName: "resourceGroupName", + required: true, + type: { + name: "String", + }, + }, +}; +const vmScaleSetName = { + parameterPath: "vmScaleSetName", + mapper: { + serializedName: "vmScaleSetName", + required: true, + type: { + name: "String", + }, + }, +}; +const ifMatch = { + parameterPath: ["options", "ifMatch"], + mapper: { + serializedName: "If-Match", + type: { + name: "String", + }, + }, +}; +const ifNoneMatch = { + parameterPath: ["options", "ifNoneMatch"], + mapper: { + serializedName: "If-None-Match", + type: { + name: "String", + }, + }, +}; +const parameters1 = { + parameterPath: "parameters", + mapper: VirtualMachineScaleSetUpdate, +}; +const forceDeletion = { + parameterPath: ["options", "forceDeletion"], + mapper: { + serializedName: "forceDeletion", + type: { + name: "Boolean", + }, + }, +}; +const expand = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const vmInstanceIDs = { + parameterPath: ["options", "vmInstanceIDs"], + mapper: VirtualMachineScaleSetVMInstanceIDs, +}; +const hibernate = { + parameterPath: ["options", "hibernate"], + mapper: { + serializedName: "hibernate", + type: { + name: "Boolean", + }, + }, +}; +const vmInstanceIDs1 = { + parameterPath: "vmInstanceIDs", + mapper: VirtualMachineScaleSetVMInstanceRequiredIDs, +}; +const skipShutdown = { + parameterPath: ["options", "skipShutdown"], + mapper: { + defaultValue: false, + serializedName: "skipShutdown", + type: { + name: "Boolean", + }, + }, +}; +const vmScaleSetReimageInput = { + parameterPath: ["options", "vmScaleSetReimageInput"], + mapper: VirtualMachineScaleSetReimageParameters, +}; +const platformUpdateDomain = { + parameterPath: "platformUpdateDomain", + mapper: { + serializedName: "platformUpdateDomain", + required: true, + type: { + name: "Number", + }, + }, +}; +const zone = { + parameterPath: ["options", "zone"], + mapper: { + serializedName: "zone", + type: { + name: "String", + }, + }, +}; +const placementGroupId = { + parameterPath: ["options", "placementGroupId"], + mapper: { + serializedName: "placementGroupId", + type: { + name: "String", + }, + }, +}; +const parameters2 = { + parameterPath: "parameters", + mapper: VMScaleSetConvertToSinglePlacementGroupInput, +}; +const parameters3 = { + parameterPath: "parameters", + mapper: OrchestrationServiceStateInput, +}; +const extensionParameters = { + parameterPath: "extensionParameters", + mapper: VirtualMachineScaleSetExtension, +}; +const vmssExtensionName = { + parameterPath: "vmssExtensionName", + mapper: { + serializedName: "vmssExtensionName", + required: true, + type: { + name: "String", + }, + }, +}; +const extensionParameters1 = { + parameterPath: "extensionParameters", + mapper: VirtualMachineScaleSetExtensionUpdate, +}; +const expand1 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const extensionParameters2 = { + parameterPath: "extensionParameters", + mapper: VirtualMachineScaleSetVMExtension, +}; +const instanceId = { + parameterPath: "instanceId", + mapper: { + serializedName: "instanceId", + required: true, + type: { + name: "String", + }, + }, +}; +const vmExtensionName = { + parameterPath: "vmExtensionName", + mapper: { + serializedName: "vmExtensionName", + required: true, + type: { + name: "String", + }, + }, +}; +const extensionParameters3 = { + parameterPath: "extensionParameters", + mapper: VirtualMachineScaleSetVMExtensionUpdate, +}; +const vmScaleSetVMReimageInput = { + parameterPath: ["options", "vmScaleSetVMReimageInput"], + mapper: VirtualMachineScaleSetVMReimageParameters, +}; +const parameters4 = { + parameterPath: "parameters", + mapper: VirtualMachineScaleSetVM, +}; +const expand2 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "Enum", + allowedValues: ["instanceView", "userData"], + }, + }, +}; +const virtualMachineScaleSetName = { + parameterPath: "virtualMachineScaleSetName", + mapper: { + serializedName: "virtualMachineScaleSetName", + required: true, + type: { + name: "String", + }, + }, +}; +const filter = { + parameterPath: ["options", "filter"], + mapper: { + serializedName: "$filter", + type: { + name: "String", + }, + }, +}; +const select = { + parameterPath: ["options", "select"], + mapper: { + serializedName: "$select", + type: { + name: "String", + }, + }, +}; +const sasUriExpirationTimeInMinutes = { + parameterPath: ["options", "sasUriExpirationTimeInMinutes"], + mapper: { + serializedName: "sasUriExpirationTimeInMinutes", + type: { + name: "Number", + }, + }, +}; +const parameters5 = { + parameterPath: "parameters", + mapper: AttachDetachDataDisksRequest, +}; +const parameters6 = { + parameterPath: "parameters", + mapper: RunCommandInput, +}; +const accept1 = { + parameterPath: "accept", + mapper: { + defaultValue: "application/json, text/json", + isConstant: true, + serializedName: "Accept", + type: { + name: "String", + }, + }, +}; +const extensionParameters4 = { + parameterPath: "extensionParameters", + mapper: VirtualMachineExtension, +}; +const vmName = { + parameterPath: "vmName", + mapper: { + serializedName: "vmName", + required: true, + type: { + name: "String", + }, + }, +}; +const extensionParameters5 = { + parameterPath: "extensionParameters", + mapper: VirtualMachineExtensionUpdate, +}; +const parameters7 = { + parameterPath: "parameters", + mapper: VirtualMachineCaptureParameters, +}; +const parameters8 = { + parameterPath: "parameters", + mapper: VirtualMachine, +}; +const parameters9 = { + parameterPath: "parameters", + mapper: VirtualMachineUpdate, +}; +const expand3 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const statusOnly = { + parameterPath: ["options", "statusOnly"], + mapper: { + serializedName: "statusOnly", + type: { + name: "String", + }, + }, +}; +const expand4 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const parameters10 = { + parameterPath: ["options", "parameters"], + mapper: VirtualMachineReimageParameters, +}; +const installPatchesInput = { + parameterPath: "installPatchesInput", + mapper: VirtualMachineInstallPatchesParameters, +}; +const location1 = { + parameterPath: "location", + mapper: { + serializedName: "location", + required: true, + type: { + name: "String", + }, + }, +}; +const publisherName = { + parameterPath: "publisherName", + mapper: { + serializedName: "publisherName", + required: true, + type: { + name: "String", + }, + }, +}; +const offer = { + parameterPath: "offer", + mapper: { + serializedName: "offer", + required: true, + type: { + name: "String", + }, + }, +}; +const skus = { + parameterPath: "skus", + mapper: { + serializedName: "skus", + required: true, + type: { + name: "String", + }, + }, +}; +const version = { + parameterPath: "version", + mapper: { + serializedName: "version", + required: true, + type: { + name: "String", + }, + }, +}; +const top = { + parameterPath: ["options", "top"], + mapper: { + serializedName: "$top", + type: { + name: "Number", + }, + }, +}; +const orderby = { + parameterPath: ["options", "orderby"], + mapper: { + serializedName: "$orderby", + type: { + name: "String", + }, + }, +}; +const edgeZone = { + parameterPath: "edgeZone", + mapper: { + serializedName: "edgeZone", + required: true, + type: { + name: "String", + }, + }, +}; +const typeParam = { + parameterPath: "typeParam", + mapper: { + serializedName: "type", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters11 = { + parameterPath: "parameters", + mapper: AvailabilitySet, +}; +const availabilitySetName = { + parameterPath: "availabilitySetName", + mapper: { + serializedName: "availabilitySetName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters12 = { + parameterPath: "parameters", + mapper: AvailabilitySetUpdate, +}; +const parameters13 = { + parameterPath: "parameters", + mapper: ProximityPlacementGroup, +}; +const proximityPlacementGroupName = { + parameterPath: "proximityPlacementGroupName", + mapper: { + serializedName: "proximityPlacementGroupName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters14 = { + parameterPath: "parameters", + mapper: ProximityPlacementGroupUpdate, +}; +const includeColocationStatus = { + parameterPath: ["options", "includeColocationStatus"], + mapper: { + serializedName: "includeColocationStatus", + type: { + name: "String", + }, + }, +}; +const parameters15 = { + parameterPath: "parameters", + mapper: DedicatedHostGroup, +}; +const hostGroupName = { + parameterPath: "hostGroupName", + mapper: { + serializedName: "hostGroupName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters16 = { + parameterPath: "parameters", + mapper: DedicatedHostGroupUpdate, +}; +const parameters17 = { + parameterPath: "parameters", + mapper: DedicatedHost, +}; +const hostName = { + parameterPath: "hostName", + mapper: { + serializedName: "hostName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters18 = { + parameterPath: "parameters", + mapper: DedicatedHostUpdate, +}; +const hostGroupName1 = { + parameterPath: "hostGroupName", + mapper: { + constraints: { + Pattern: new RegExp("^[-\\w\\._]+$"), + }, + serializedName: "hostGroupName", + required: true, + type: { + name: "String", + }, + }, +}; +const hostName1 = { + parameterPath: "hostName", + mapper: { + constraints: { + Pattern: new RegExp("^[-\\w\\._]+$"), + }, + serializedName: "hostName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters19 = { + parameterPath: "parameters", + mapper: SshPublicKeyResource, +}; +const sshPublicKeyName = { + parameterPath: "sshPublicKeyName", + mapper: { + serializedName: "sshPublicKeyName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters20 = { + parameterPath: "parameters", + mapper: SshPublicKeyUpdateResource, +}; +const parameters21 = { + parameterPath: ["options", "parameters"], + mapper: SshGenerateKeyPairInputParameters, +}; +const parameters22 = { + parameterPath: "parameters", + mapper: Image, +}; +const imageName = { + parameterPath: "imageName", + mapper: { + serializedName: "imageName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters23 = { + parameterPath: "parameters", + mapper: ImageUpdate, +}; +const parameters24 = { + parameterPath: "parameters", + mapper: RestorePointCollection, +}; +const restorePointCollectionName = { + parameterPath: "restorePointCollectionName", + mapper: { + serializedName: "restorePointCollectionName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters25 = { + parameterPath: "parameters", + mapper: RestorePointCollectionUpdate, +}; +const expand5 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const parameters26 = { + parameterPath: "parameters", + mapper: RestorePoint, +}; +const restorePointName = { + parameterPath: "restorePointName", + mapper: { + serializedName: "restorePointName", + required: true, + type: { + name: "String", + }, + }, +}; +const expand6 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const parameters27 = { + parameterPath: "parameters", + mapper: CapacityReservationGroup, +}; +const capacityReservationGroupName = { + parameterPath: "capacityReservationGroupName", + mapper: { + serializedName: "capacityReservationGroupName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters28 = { + parameterPath: "parameters", + mapper: CapacityReservationGroupUpdate, +}; +const expand7 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const expand8 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const resourceIdsOnly = { + parameterPath: ["options", "resourceIdsOnly"], + mapper: { + serializedName: "resourceIdsOnly", + type: { + name: "String", + }, + }, +}; +const parameters29 = { + parameterPath: "parameters", + mapper: CapacityReservation, +}; +const capacityReservationName = { + parameterPath: "capacityReservationName", + mapper: { + serializedName: "capacityReservationName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters30 = { + parameterPath: "parameters", + mapper: CapacityReservationUpdate, +}; +const expand9 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const parameters31 = { + parameterPath: "parameters", + mapper: RequestRateByIntervalInput, +}; +const parameters32 = { + parameterPath: "parameters", + mapper: ThrottledRequestsInput, +}; +const commandId = { + parameterPath: "commandId", + mapper: { + serializedName: "commandId", + required: true, + type: { + name: "String", + }, + }, +}; +const runCommand = { + parameterPath: "runCommand", + mapper: VirtualMachineRunCommand, +}; +const runCommandName = { + parameterPath: "runCommandName", + mapper: { + serializedName: "runCommandName", + required: true, + type: { + name: "String", + }, + }, +}; +const runCommand1 = { + parameterPath: "runCommand", + mapper: VirtualMachineRunCommandUpdate, +}; +const disk = { + parameterPath: "disk", + mapper: Disk, +}; +const diskName = { + parameterPath: "diskName", + mapper: { + serializedName: "diskName", + required: true, + type: { + name: "String", + }, + }, +}; +const apiVersion1 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2024-03-02", + isConstant: true, + serializedName: "api-version", + type: { + name: "String", + }, + }, +}; +const disk1 = { + parameterPath: "disk", + mapper: DiskUpdate, +}; +const grantAccessData = { + parameterPath: "grantAccessData", + mapper: GrantAccessData, +}; +const diskAccess = { + parameterPath: "diskAccess", + mapper: DiskAccess, +}; +const diskAccessName = { + parameterPath: "diskAccessName", + mapper: { + serializedName: "diskAccessName", + required: true, + type: { + name: "String", + }, + }, +}; +const diskAccess1 = { + parameterPath: "diskAccess", + mapper: DiskAccessUpdate, +}; +const privateEndpointConnection = { + parameterPath: "privateEndpointConnection", + mapper: PrivateEndpointConnection, +}; +const privateEndpointConnectionName = { + parameterPath: "privateEndpointConnectionName", + mapper: { + serializedName: "privateEndpointConnectionName", + required: true, + type: { + name: "String", + }, + }, +}; +const diskEncryptionSet = { + parameterPath: "diskEncryptionSet", + mapper: DiskEncryptionSet, +}; +const diskEncryptionSetName = { + parameterPath: "diskEncryptionSetName", + mapper: { + serializedName: "diskEncryptionSetName", + required: true, + type: { + name: "String", + }, + }, +}; +const diskEncryptionSet1 = { + parameterPath: "diskEncryptionSet", + mapper: DiskEncryptionSetUpdate, +}; +const vmRestorePointName = { + parameterPath: "vmRestorePointName", + mapper: { + serializedName: "vmRestorePointName", + required: true, + type: { + name: "String", + }, + }, +}; +const diskRestorePointName = { + parameterPath: "diskRestorePointName", + mapper: { + serializedName: "diskRestorePointName", + required: true, + type: { + name: "String", + }, + }, +}; +const snapshot = { + parameterPath: "snapshot", + mapper: Snapshot, +}; +const snapshotName = { + parameterPath: "snapshotName", + mapper: { + serializedName: "snapshotName", + required: true, + type: { + name: "String", + }, + }, +}; +const snapshot1 = { + parameterPath: "snapshot", + mapper: SnapshotUpdate, +}; +const apiVersion2 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-07-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String", + }, + }, +}; +const includeExtendedLocations = { + parameterPath: ["options", "includeExtendedLocations"], + mapper: { + serializedName: "includeExtendedLocations", + type: { + name: "String", + }, + }, +}; +const gallery = { + parameterPath: "gallery", + mapper: Gallery, +}; +const galleryName = { + parameterPath: "galleryName", + mapper: { + serializedName: "galleryName", + required: true, + type: { + name: "String", + }, + }, +}; +const apiVersion3 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2023-07-03", + isConstant: true, + serializedName: "api-version", + type: { + name: "String", + }, + }, +}; +const gallery1 = { + parameterPath: "gallery", + mapper: GalleryUpdate, +}; +const select1 = { + parameterPath: ["options", "select"], + mapper: { + serializedName: "$select", + type: { + name: "String", + }, + }, +}; +const expand10 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const galleryImage = { + parameterPath: "galleryImage", + mapper: GalleryImage, +}; +const galleryImageName = { + parameterPath: "galleryImageName", + mapper: { + serializedName: "galleryImageName", + required: true, + type: { + name: "String", + }, + }, +}; +const galleryImage1 = { + parameterPath: "galleryImage", + mapper: GalleryImageUpdate, +}; +const galleryImageVersion = { + parameterPath: "galleryImageVersion", + mapper: GalleryImageVersion, +}; +const galleryImageVersionName = { + parameterPath: "galleryImageVersionName", + mapper: { + serializedName: "galleryImageVersionName", + required: true, + type: { + name: "String", + }, + }, +}; +const galleryImageVersion1 = { + parameterPath: "galleryImageVersion", + mapper: GalleryImageVersionUpdate, +}; +const expand11 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String", + }, + }, +}; +const galleryApplication = { + parameterPath: "galleryApplication", + mapper: GalleryApplication, +}; +const galleryApplicationName = { + parameterPath: "galleryApplicationName", + mapper: { + serializedName: "galleryApplicationName", + required: true, + type: { + name: "String", + }, + }, +}; +const galleryApplication1 = { + parameterPath: "galleryApplication", + mapper: GalleryApplicationUpdate, +}; +const galleryApplicationVersion = { + parameterPath: "galleryApplicationVersion", + mapper: GalleryApplicationVersion, +}; +const galleryApplicationVersionName = { + parameterPath: "galleryApplicationVersionName", + mapper: { + serializedName: "galleryApplicationVersionName", + required: true, + type: { + name: "String", + }, + }, +}; +const galleryApplicationVersion1 = { + parameterPath: "galleryApplicationVersion", + mapper: GalleryApplicationVersionUpdate, +}; +const sharingUpdate = { + parameterPath: "sharingUpdate", + mapper: SharingUpdate, +}; +const sharedTo = { + parameterPath: ["options", "sharedTo"], + mapper: { + serializedName: "sharedTo", + type: { + name: "String", + }, + }, +}; +const galleryUniqueName = { + parameterPath: "galleryUniqueName", + mapper: { + serializedName: "galleryUniqueName", + required: true, + type: { + name: "String", + }, + }, +}; +const publicGalleryName = { + parameterPath: "publicGalleryName", + mapper: { + serializedName: "publicGalleryName", + required: true, + type: { + name: "String", + }, + }, +}; +const roleInstanceName = { + parameterPath: "roleInstanceName", + mapper: { + serializedName: "roleInstanceName", + required: true, + type: { + name: "String", + }, + }, +}; +const cloudServiceName = { + parameterPath: "cloudServiceName", + mapper: { + serializedName: "cloudServiceName", + required: true, + type: { + name: "String", + }, + }, +}; +const apiVersion4 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2022-09-04", + isConstant: true, + serializedName: "api-version", + type: { + name: "String", + }, + }, +}; +const accept2 = { + parameterPath: "accept", + mapper: { + defaultValue: "application/x-rdp", + isConstant: true, + serializedName: "Accept", + type: { + name: "String", + }, + }, +}; +const roleName = { + parameterPath: "roleName", + mapper: { + serializedName: "roleName", + required: true, + type: { + name: "String", + }, + }, +}; +const parameters33 = { + parameterPath: ["options", "parameters"], + mapper: CloudService, +}; +const parameters34 = { + parameterPath: ["options", "parameters"], + mapper: CloudServiceUpdate, +}; +const parameters35 = { + parameterPath: ["options", "parameters"], + mapper: RoleInstances, +}; +const parameters36 = { + parameterPath: ["options", "parameters"], + mapper: UpdateDomain, +}; +const updateDomain = { + parameterPath: "updateDomain", + mapper: { + serializedName: "updateDomain", + required: true, + type: { + name: "Number", + }, + }, +}; +const osVersionName = { + parameterPath: "osVersionName", + mapper: { + serializedName: "osVersionName", + required: true, + type: { + name: "String", + }, + }, +}; +const osFamilyName = { + parameterPath: "osFamilyName", + mapper: { + serializedName: "osFamilyName", + required: true, + type: { + name: "String", + }, + }, +}; + +/* + * 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 containing Operations operations. */ +class OperationsImpl { + /** + * Initialize a new instance of the class Operations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of compute operations. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + }, + }; + } + listPagingPage(options, _settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list of compute operations. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$t); + } +} +// Operation Specifications +const serializer$M = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$t = { + path: "/providers/Microsoft.Compute/operations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ComputeOperationListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$M, +}; + +/* + * 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 containing UsageOperations operations. */ +class UsageOperationsImpl { + /** + * Initialize a new instance of the class UsageOperations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets, for the specified location, the current compute resource usage information as well as the + * limits for compute resources under the subscription. + * @param location The location for which resource usage is queried. + * @param options The options parameters. + */ + list(location, options) { + const iter = this.listPagingAll(location, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(location, options, settings); + }, + }; + } + listPagingPage(location, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(location, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(location, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(location, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(location, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets, for the specified location, the current compute resource usage information as well as the + * limits for compute resources under the subscription. + * @param location The location for which resource usage is queried. + * @param options The options parameters. + */ + _list(location, options) { + return this.client.sendOperationRequest({ location, options }, listOperationSpec$s); + } + /** + * ListNext + * @param location The location for which resource usage is queried. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(location, nextLink, options) { + return this.client.sendOperationRequest({ location, nextLink, options }, listNextOperationSpec$n); + } +} +// Operation Specifications +const serializer$L = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$s = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ListUsagesResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + location, + subscriptionId, + ], + headerParameters: [accept], + serializer: serializer$L, +}; +const listNextOperationSpec$n = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ListUsagesResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + location, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$L, +}; + +/* + * 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 containing VirtualMachineSizes operations. */ +class VirtualMachineSizesImpl { + /** + * Initialize a new instance of the class VirtualMachineSizes class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * This API is deprecated. Use [Resources + * Skus](https://docs.microsoft.com/rest/api/compute/resourceskus/list) + * @param location The location upon which virtual-machine-sizes is queried. + * @param options The options parameters. + */ + list(location, options) { + const iter = this.listPagingAll(location, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(location, options, settings); + }, + }; + } + listPagingPage(location, options, _settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + result = yield tslib.__await(this._list(location, options)); + yield yield tslib.__await(result.value || []); + }); + } + listPagingAll(location, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(location, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * This API is deprecated. Use [Resources + * Skus](https://docs.microsoft.com/rest/api/compute/resourceskus/list) + * @param location The location upon which virtual-machine-sizes is queried. + * @param options The options parameters. + */ + _list(location, options) { + return this.client.sendOperationRequest({ location, options }, listOperationSpec$r); + } +} +// Operation Specifications +const serializer$K = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$r = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineSizeListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + location, + subscriptionId, + ], + headerParameters: [accept], + serializer: serializer$K, +}; + +/* + * 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. + */ +function createLroSpec(inputs) { + const { args, spec, sendOperationFn } = inputs; + return { + requestMethod: spec.httpMethod, + requestPath: spec.path, + sendInitialRequest: () => sendOperationFn(args, spec), + sendPollRequest: (path, options) => { + const restSpec = tslib.__rest(spec, ["requestBody"]); + return sendOperationFn(args, Object.assign(Object.assign({}, restSpec), { httpMethod: "GET", path, abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal })); + }, + }; +} + +/* + * 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 containing VirtualMachineScaleSets operations. */ +class VirtualMachineScaleSetsImpl { + /** + * Initialize a new instance of the class VirtualMachineScaleSets class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets all the VM scale sets under the specified subscription for the specified location. + * @param location The location for which VM scale sets under the subscription are queried. + * @param options The options parameters. + */ + listByLocation(location, options) { + const iter = this.listByLocationPagingAll(location, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByLocationPagingPage(location, options, settings); + }, + }; + } + listByLocationPagingPage(location, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByLocationPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByLocation(location, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByLocationNext(location, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByLocationPagingAll(location, options) { + return tslib.__asyncGenerator(this, arguments, function* listByLocationPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByLocationPagingPage(location, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list of all VM scale sets under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + list(resourceGroupName, options) { + const iter = this.listPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets a list of all VM Scale Sets in the subscription, regardless of the associated resource group. + * Use nextLink property in the response to get the next page of VM Scale Sets. Do this till nextLink + * is null to fetch all the VM Scale Sets. + * @param options The options parameters. + */ + listAll(options) { + const iter = this.listAllPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listAllPagingPage(options, settings); + }, + }; + } + listAllPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listAll(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listAllNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listAllPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listAllPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Gets a list of SKUs available for your VM scale set, including the minimum and maximum VM instances + * allowed for each SKU. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + listSkus(resourceGroupName, vmScaleSetName, options) { + const iter = this.listSkusPagingAll(resourceGroupName, vmScaleSetName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listSkusPagingPage(resourceGroupName, vmScaleSetName, options, settings); + }, + }; + } + listSkusPagingPage(resourceGroupName, vmScaleSetName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listSkusPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listSkus(resourceGroupName, vmScaleSetName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listSkusNext(resourceGroupName, vmScaleSetName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listSkusPagingAll(resourceGroupName, vmScaleSetName, options) { + return tslib.__asyncGenerator(this, arguments, function* listSkusPagingAll_1() { + var _a, e_4, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listSkusPagingPage(resourceGroupName, vmScaleSetName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * Gets list of OS upgrades on a VM scale set instance. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + listOSUpgradeHistory(resourceGroupName, vmScaleSetName, options) { + const iter = this.getOSUpgradeHistoryPagingAll(resourceGroupName, vmScaleSetName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.getOSUpgradeHistoryPagingPage(resourceGroupName, vmScaleSetName, options, settings); + }, + }; + } + getOSUpgradeHistoryPagingPage(resourceGroupName, vmScaleSetName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* getOSUpgradeHistoryPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._getOSUpgradeHistory(resourceGroupName, vmScaleSetName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._getOSUpgradeHistoryNext(resourceGroupName, vmScaleSetName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + getOSUpgradeHistoryPagingAll(resourceGroupName, vmScaleSetName, options) { + return tslib.__asyncGenerator(this, arguments, function* getOSUpgradeHistoryPagingAll_1() { + var _a, e_5, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.getOSUpgradeHistoryPagingPage(resourceGroupName, vmScaleSetName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_5) throw e_5.error; } + } + }); + } + /** + * Gets all the VM scale sets under the specified subscription for the specified location. + * @param location The location for which VM scale sets under the subscription are queried. + * @param options The options parameters. + */ + _listByLocation(location, options) { + return this.client.sendOperationRequest({ location, options }, listByLocationOperationSpec$1); + } + /** + * Create or update a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set to create or update. + * @param parameters The scale set object. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, vmScaleSetName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, parameters, options }, + spec: createOrUpdateOperationSpec$o, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set to create or update. + * @param parameters The scale set object. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, vmScaleSetName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, vmScaleSetName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Update a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set to create or update. + * @param parameters The scale set object. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, vmScaleSetName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, parameters, options }, + spec: updateOperationSpec$r, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set to create or update. + * @param parameters The scale set object. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, vmScaleSetName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, vmScaleSetName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Deletes a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: deleteOperationSpec$s, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Display information about a virtual machine scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + get(resourceGroupName, vmScaleSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, options }, getOperationSpec$D); + } + /** + * Deallocates specific virtual machines in a VM scale set. Shuts down the virtual machines and + * releases the compute resources. You are not billed for the compute resources that this virtual + * machine scale set deallocates. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginDeallocate(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: deallocateOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deallocates specific virtual machines in a VM scale set. Shuts down the virtual machines and + * releases the compute resources. You are not billed for the compute resources that this virtual + * machine scale set deallocates. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginDeallocateAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDeallocate(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Deletes virtual machines in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param vmInstanceIDs A list of virtual machine instance IDs from the VM scale set. + * @param options The options parameters. + */ + beginDeleteInstances(resourceGroupName, vmScaleSetName, vmInstanceIDs, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, vmInstanceIDs, options }, + spec: deleteInstancesOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes virtual machines in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param vmInstanceIDs A list of virtual machine instance IDs from the VM scale set. + * @param options The options parameters. + */ + beginDeleteInstancesAndWait(resourceGroupName, vmScaleSetName, vmInstanceIDs, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDeleteInstances(resourceGroupName, vmScaleSetName, vmInstanceIDs, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets the status of a VM scale set instance. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + getInstanceView(resourceGroupName, vmScaleSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, options }, getInstanceViewOperationSpec$3); + } + /** + * Gets a list of all VM scale sets under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _list(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listOperationSpec$q); + } + /** + * Gets a list of all VM Scale Sets in the subscription, regardless of the associated resource group. + * Use nextLink property in the response to get the next page of VM Scale Sets. Do this till nextLink + * is null to fetch all the VM Scale Sets. + * @param options The options parameters. + */ + _listAll(options) { + return this.client.sendOperationRequest({ options }, listAllOperationSpec$3); + } + /** + * Gets a list of SKUs available for your VM scale set, including the minimum and maximum VM instances + * allowed for each SKU. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + _listSkus(resourceGroupName, vmScaleSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, options }, listSkusOperationSpec$2); + } + /** + * Gets list of OS upgrades on a VM scale set instance. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + _getOSUpgradeHistory(resourceGroupName, vmScaleSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, options }, getOSUpgradeHistoryOperationSpec); + } + /** + * Power off (stop) one or more virtual machines in a VM scale set. Note that resources are still + * attached and you are getting charged for the resources. Instead, use deallocate to release resources + * and avoid charges. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginPowerOff(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: powerOffOperationSpec$3, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Power off (stop) one or more virtual machines in a VM scale set. Note that resources are still + * attached and you are getting charged for the resources. Instead, use deallocate to release resources + * and avoid charges. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginPowerOffAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginPowerOff(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Restarts one or more virtual machines in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginRestart(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: restartOperationSpec$5, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Restarts one or more virtual machines in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginRestartAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRestart(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Starts one or more virtual machines in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginStart(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: startOperationSpec$3, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Starts one or more virtual machines in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginStartAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginStart(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Reapplies the Virtual Machine Scale Set Virtual Machine Profile to the Virtual Machine Instances + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginReapply(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: reapplyOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Reapplies the Virtual Machine Scale Set Virtual Machine Profile to the Virtual Machine Instances + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginReapplyAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReapply(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Shuts down all the virtual machines in the virtual machine scale set, moves them to a new node, and + * powers them back on. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginRedeploy(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: redeployOperationSpec$3, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Shuts down all the virtual machines in the virtual machine scale set, moves them to a new node, and + * powers them back on. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginRedeployAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRedeploy(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Perform maintenance on one or more virtual machines in a VM scale set. Operation on instances which + * are not eligible for perform maintenance will be failed. Please refer to best practices for more + * details: + * https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-maintenance-notifications + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginPerformMaintenance(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: performMaintenanceOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Perform maintenance on one or more virtual machines in a VM scale set. Operation on instances which + * are not eligible for perform maintenance will be failed. Please refer to best practices for more + * details: + * https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-maintenance-notifications + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginPerformMaintenanceAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginPerformMaintenance(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Upgrades one or more virtual machines to the latest SKU set in the VM scale set model. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param vmInstanceIDs A list of virtual machine instance IDs from the VM scale set. + * @param options The options parameters. + */ + beginUpdateInstances(resourceGroupName, vmScaleSetName, vmInstanceIDs, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, vmInstanceIDs, options }, + spec: updateInstancesOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Upgrades one or more virtual machines to the latest SKU set in the VM scale set model. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param vmInstanceIDs A list of virtual machine instance IDs from the VM scale set. + * @param options The options parameters. + */ + beginUpdateInstancesAndWait(resourceGroupName, vmScaleSetName, vmInstanceIDs, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdateInstances(resourceGroupName, vmScaleSetName, vmInstanceIDs, options); + return poller.pollUntilDone(); + }); + } + /** + * Reimages (upgrade the operating system) one or more virtual machines in a VM scale set which don't + * have a ephemeral OS disk, for virtual machines who have a ephemeral OS disk the virtual machine is + * reset to initial state. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginReimage(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: reimageOperationSpec$4, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Reimages (upgrade the operating system) one or more virtual machines in a VM scale set which don't + * have a ephemeral OS disk, for virtual machines who have a ephemeral OS disk the virtual machine is + * reset to initial state. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginReimageAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReimage(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Reimages all the disks ( including data disks ) in the virtual machines in a VM scale set. This + * operation is only supported for managed disks. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginReimageAll(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: reimageAllOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Reimages all the disks ( including data disks ) in the virtual machines in a VM scale set. This + * operation is only supported for managed disks. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginReimageAllAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReimageAll(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Approve upgrade on deferred rolling upgrades for OS disks in the virtual machines in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginApproveRollingUpgrade(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: approveRollingUpgradeOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Approve upgrade on deferred rolling upgrades for OS disks in the virtual machines in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginApproveRollingUpgradeAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginApproveRollingUpgrade(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Manual platform update domain walk to update virtual machines in a service fabric virtual machine + * scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param platformUpdateDomain The platform update domain for which a manual recovery walk is requested + * @param options The options parameters. + */ + forceRecoveryServiceFabricPlatformUpdateDomainWalk(resourceGroupName, vmScaleSetName, platformUpdateDomain, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, platformUpdateDomain, options }, forceRecoveryServiceFabricPlatformUpdateDomainWalkOperationSpec); + } + /** + * Converts SinglePlacementGroup property to false for a existing virtual machine scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the virtual machine scale set to create or update. + * @param parameters The input object for ConvertToSinglePlacementGroup API. + * @param options The options parameters. + */ + convertToSinglePlacementGroup(resourceGroupName, vmScaleSetName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, parameters, options }, convertToSinglePlacementGroupOperationSpec); + } + /** + * Changes ServiceState property for a given service + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the virtual machine scale set to create or update. + * @param parameters The input object for SetOrchestrationServiceState API. + * @param options The options parameters. + */ + beginSetOrchestrationServiceState(resourceGroupName, vmScaleSetName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, parameters, options }, + spec: setOrchestrationServiceStateOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Changes ServiceState property for a given service + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the virtual machine scale set to create or update. + * @param parameters The input object for SetOrchestrationServiceState API. + * @param options The options parameters. + */ + beginSetOrchestrationServiceStateAndWait(resourceGroupName, vmScaleSetName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginSetOrchestrationServiceState(resourceGroupName, vmScaleSetName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * ListByLocationNext + * @param location The location for which VM scale sets under the subscription are queried. + * @param nextLink The nextLink from the previous successful call to the ListByLocation method. + * @param options The options parameters. + */ + _listByLocationNext(location, nextLink, options) { + return this.client.sendOperationRequest({ location, nextLink, options }, listByLocationNextOperationSpec$1); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listNextOperationSpec$m); + } + /** + * ListAllNext + * @param nextLink The nextLink from the previous successful call to the ListAll method. + * @param options The options parameters. + */ + _listAllNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listAllNextOperationSpec$3); + } + /** + * ListSkusNext + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param nextLink The nextLink from the previous successful call to the ListSkus method. + * @param options The options parameters. + */ + _listSkusNext(resourceGroupName, vmScaleSetName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, nextLink, options }, listSkusNextOperationSpec); + } + /** + * GetOSUpgradeHistoryNext + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param nextLink The nextLink from the previous successful call to the GetOSUpgradeHistory method. + * @param options The options parameters. + */ + _getOSUpgradeHistoryNext(resourceGroupName, vmScaleSetName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, nextLink, options }, getOSUpgradeHistoryNextOperationSpec); + } +} +// Operation Specifications +const serializer$J = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listByLocationOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachineScaleSets", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + location, + subscriptionId, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const createOrUpdateOperationSpec$o = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSet, + }, + 201: { + bodyMapper: VirtualMachineScaleSet, + }, + 202: { + bodyMapper: VirtualMachineScaleSet, + }, + 204: { + bodyMapper: VirtualMachineScaleSet, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [ + accept, + contentType, + ifMatch, + ifNoneMatch, + ], + mediaType: "json", + serializer: serializer$J, +}; +const updateOperationSpec$r = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSet, + }, + 201: { + bodyMapper: VirtualMachineScaleSet, + }, + 202: { + bodyMapper: VirtualMachineScaleSet, + }, + 204: { + bodyMapper: VirtualMachineScaleSet, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters1, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [ + accept, + contentType, + ifMatch, + ifNoneMatch, + ], + mediaType: "json", + serializer: serializer$J, +}; +const deleteOperationSpec$s = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, forceDeletion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const getOperationSpec$D = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSet, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const deallocateOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs, + queryParameters: [apiVersion, hibernate], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const deleteInstancesOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs1, + queryParameters: [apiVersion, forceDeletion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const getInstanceViewOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetInstanceView, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const listOperationSpec$q = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const listAllOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachineScaleSets", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListWithLinkResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$J, +}; +const listSkusOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListSkusResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const getOSUpgradeHistoryOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListOSUpgradeHistory, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const powerOffOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs, + queryParameters: [apiVersion, skipShutdown], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const restartOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const startOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const reapplyOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reapply", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const redeployOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const performMaintenanceOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const updateInstancesOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs1, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const reimageOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmScaleSetReimageInput, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const reimageAllOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const approveRollingUpgradeOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/approveRollingUpgrade", + httpMethod: "POST", + responses: { + 200: { + headersMapper: VirtualMachineScaleSetsApproveRollingUpgradeHeaders, + }, + 201: { + headersMapper: VirtualMachineScaleSetsApproveRollingUpgradeHeaders, + }, + 202: { + headersMapper: VirtualMachineScaleSetsApproveRollingUpgradeHeaders, + }, + 204: { + headersMapper: VirtualMachineScaleSetsApproveRollingUpgradeHeaders, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmInstanceIDs, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const forceRecoveryServiceFabricPlatformUpdateDomainWalkOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RecoveryWalkResponse, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + platformUpdateDomain, + zone, + placementGroupId, + ], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const convertToSinglePlacementGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/convertToSinglePlacementGroup", + httpMethod: "POST", + responses: { + 200: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters2, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const setOrchestrationServiceStateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/setOrchestrationServiceState", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters3, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$J, +}; +const listByLocationNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + location, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const listNextOperationSpec$m = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const listAllNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListWithLinkResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const listSkusNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListSkusResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; +const getOSUpgradeHistoryNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetListOSUpgradeHistory, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$J, +}; + +/* + * 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 containing VirtualMachineScaleSetExtensions operations. */ +class VirtualMachineScaleSetExtensionsImpl { + /** + * Initialize a new instance of the class VirtualMachineScaleSetExtensions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of all extensions in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set containing the extension. + * @param options The options parameters. + */ + list(resourceGroupName, vmScaleSetName, options) { + const iter = this.listPagingAll(resourceGroupName, vmScaleSetName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, vmScaleSetName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, vmScaleSetName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, vmScaleSetName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, vmScaleSetName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, vmScaleSetName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, vmScaleSetName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * The operation to create or update an extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set where the extension should be create or updated. + * @param vmssExtensionName The name of the VM scale set extension. + * @param extensionParameters Parameters supplied to the Create VM scale set Extension operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, vmScaleSetName, vmssExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + vmssExtensionName, + extensionParameters, + options, + }, + spec: createOrUpdateOperationSpec$n, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to create or update an extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set where the extension should be create or updated. + * @param vmssExtensionName The name of the VM scale set extension. + * @param extensionParameters Parameters supplied to the Create VM scale set Extension operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, vmScaleSetName, vmssExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, vmScaleSetName, vmssExtensionName, extensionParameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to update an extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set where the extension should be updated. + * @param vmssExtensionName The name of the VM scale set extension. + * @param extensionParameters Parameters supplied to the Update VM scale set Extension operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, vmScaleSetName, vmssExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + vmssExtensionName, + extensionParameters, + options, + }, + spec: updateOperationSpec$q, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to update an extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set where the extension should be updated. + * @param vmssExtensionName The name of the VM scale set extension. + * @param extensionParameters Parameters supplied to the Update VM scale set Extension operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, vmScaleSetName, vmssExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, vmScaleSetName, vmssExtensionName, extensionParameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to delete the extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set where the extension should be deleted. + * @param vmssExtensionName The name of the VM scale set extension. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, vmScaleSetName, vmssExtensionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, vmssExtensionName, options }, + spec: deleteOperationSpec$r, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete the extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set where the extension should be deleted. + * @param vmssExtensionName The name of the VM scale set extension. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, vmScaleSetName, vmssExtensionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, vmScaleSetName, vmssExtensionName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to get the extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set containing the extension. + * @param vmssExtensionName The name of the VM scale set extension. + * @param options The options parameters. + */ + get(resourceGroupName, vmScaleSetName, vmssExtensionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, vmssExtensionName, options }, getOperationSpec$C); + } + /** + * Gets a list of all extensions in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set containing the extension. + * @param options The options parameters. + */ + _list(resourceGroupName, vmScaleSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, options }, listOperationSpec$p); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set containing the extension. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, vmScaleSetName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, nextLink, options }, listNextOperationSpec$l); + } +} +// Operation Specifications +const serializer$I = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$n = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + 201: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + 202: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + 204: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: extensionParameters, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + vmssExtensionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$I, +}; +const updateOperationSpec$q = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + 201: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + 202: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + 204: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: extensionParameters1, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + vmssExtensionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$I, +}; +const deleteOperationSpec$r = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + vmssExtensionName, + ], + headerParameters: [accept], + serializer: serializer$I, +}; +const getOperationSpec$C = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + vmssExtensionName, + ], + headerParameters: [accept], + serializer: serializer$I, +}; +const listOperationSpec$p = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetExtensionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$I, +}; +const listNextOperationSpec$l = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetExtensionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$I, +}; + +/* + * 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 containing VirtualMachineScaleSetRollingUpgrades operations. */ +class VirtualMachineScaleSetRollingUpgradesImpl { + /** + * Initialize a new instance of the class VirtualMachineScaleSetRollingUpgrades class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Cancels the current virtual machine scale set rolling upgrade. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginCancel(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: cancelOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Cancels the current virtual machine scale set rolling upgrade. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginCancelAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCancel(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Starts a rolling upgrade to move all virtual machine scale set instances to the latest available + * Platform Image OS version. Instances which are already running the latest available OS version are + * not affected. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginStartOSUpgrade(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: startOSUpgradeOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Starts a rolling upgrade to move all virtual machine scale set instances to the latest available + * Platform Image OS version. Instances which are already running the latest available OS version are + * not affected. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginStartOSUpgradeAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginStartOSUpgrade(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Starts a rolling upgrade to move all extensions for all virtual machine scale set instances to the + * latest available extension version. Instances which are already running the latest extension + * versions are not affected. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginStartExtensionUpgrade(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, options }, + spec: startExtensionUpgradeOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Starts a rolling upgrade to move all extensions for all virtual machine scale set instances to the + * latest available extension version. Instances which are already running the latest extension + * versions are not affected. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + beginStartExtensionUpgradeAndWait(resourceGroupName, vmScaleSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginStartExtensionUpgrade(resourceGroupName, vmScaleSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets the status of the latest virtual machine scale set rolling upgrade. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + getLatest(resourceGroupName, vmScaleSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, options }, getLatestOperationSpec); + } +} +// Operation Specifications +const serializer$H = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const cancelOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$H, +}; +const startOSUpgradeOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$H, +}; +const startExtensionUpgradeOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensionRollingUpgrade", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$H, +}; +const getLatestOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RollingUpgradeStatusInfo, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$H, +}; + +/* + * 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 containing VirtualMachineScaleSetVMExtensions operations. */ +class VirtualMachineScaleSetVMExtensionsImpl { + /** + * Initialize a new instance of the class VirtualMachineScaleSetVMExtensions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * The operation to create or update the VMSS VM extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param vmExtensionName The name of the virtual machine extension. + * @param extensionParameters Parameters supplied to the Create Virtual Machine Extension operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + vmExtensionName, + extensionParameters, + options, + }, + spec: createOrUpdateOperationSpec$m, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to create or update the VMSS VM extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param vmExtensionName The name of the virtual machine extension. + * @param extensionParameters Parameters supplied to the Create Virtual Machine Extension operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, extensionParameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to update the VMSS VM extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param vmExtensionName The name of the virtual machine extension. + * @param extensionParameters Parameters supplied to the Update Virtual Machine Extension operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + vmExtensionName, + extensionParameters, + options, + }, + spec: updateOperationSpec$p, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to update the VMSS VM extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param vmExtensionName The name of the virtual machine extension. + * @param extensionParameters Parameters supplied to the Update Virtual Machine Extension operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, extensionParameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to delete the VMSS VM extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param vmExtensionName The name of the virtual machine extension. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + vmExtensionName, + options, + }, + spec: deleteOperationSpec$q, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete the VMSS VM extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param vmExtensionName The name of the virtual machine extension. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to get the VMSS VM extension. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param vmExtensionName The name of the virtual machine extension. + * @param options The options parameters. + */ + get(resourceGroupName, vmScaleSetName, instanceId, vmExtensionName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + vmScaleSetName, + instanceId, + vmExtensionName, + options, + }, getOperationSpec$B); + } + /** + * The operation to get all extensions of an instance in Virtual Machine Scaleset. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + list(resourceGroupName, vmScaleSetName, instanceId, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, instanceId, options }, listOperationSpec$o); + } +} +// Operation Specifications +const serializer$G = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$m = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + 201: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + 202: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + 204: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: extensionParameters2, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + vmExtensionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$G, +}; +const updateOperationSpec$p = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + 201: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + 202: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + 204: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: extensionParameters3, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + vmExtensionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$G, +}; +const deleteOperationSpec$q = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + vmExtensionName, + ], + headerParameters: [accept], + serializer: serializer$G, +}; +const getOperationSpec$B = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVMExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + vmExtensionName, + ], + headerParameters: [accept], + serializer: serializer$G, +}; +const listOperationSpec$o = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVMExtensionsListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$G, +}; + +/* + * 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 containing VirtualMachineScaleSetVMs operations. */ +class VirtualMachineScaleSetVMsImpl { + /** + * Initialize a new instance of the class VirtualMachineScaleSetVMs class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of all virtual machines in a VM scale sets. + * @param resourceGroupName The name of the resource group. + * @param virtualMachineScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + list(resourceGroupName, virtualMachineScaleSetName, options) { + const iter = this.listPagingAll(resourceGroupName, virtualMachineScaleSetName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, virtualMachineScaleSetName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, virtualMachineScaleSetName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, virtualMachineScaleSetName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, virtualMachineScaleSetName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, virtualMachineScaleSetName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, virtualMachineScaleSetName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Reimages (upgrade the operating system) a specific virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginReimage(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: reimageOperationSpec$3, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Reimages (upgrade the operating system) a specific virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginReimageAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReimage(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * Allows you to re-image all the disks ( including data disks ) in the a VM scale set instance. This + * operation is only supported for managed disks. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginReimageAll(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: reimageAllOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Allows you to re-image all the disks ( including data disks ) in the a VM scale set instance. This + * operation is only supported for managed disks. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginReimageAllAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReimageAll(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * Approve upgrade on deferred rolling upgrade for OS disk on a VM scale set instance. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginApproveRollingUpgrade(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: approveRollingUpgradeOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Approve upgrade on deferred rolling upgrade for OS disk on a VM scale set instance. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginApproveRollingUpgradeAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginApproveRollingUpgrade(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * Deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and + * releases the compute resources it uses. You are not billed for the compute resources of this virtual + * machine once it is deallocated. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginDeallocate(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: deallocateOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and + * releases the compute resources it uses. You are not billed for the compute resources of this virtual + * machine once it is deallocated. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginDeallocateAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDeallocate(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * Updates a virtual machine of a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set where the extension should be create or updated. + * @param instanceId The instance ID of the virtual machine. + * @param parameters Parameters supplied to the Update Virtual Machine Scale Sets VM operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, vmScaleSetName, instanceId, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + parameters, + options, + }, + spec: updateOperationSpec$o, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Updates a virtual machine of a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set where the extension should be create or updated. + * @param instanceId The instance ID of the virtual machine. + * @param parameters Parameters supplied to the Update Virtual Machine Scale Sets VM operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, vmScaleSetName, instanceId, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, vmScaleSetName, instanceId, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Deletes a virtual machine from a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: deleteOperationSpec$p, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a virtual machine from a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets a virtual machine from a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + get(resourceGroupName, vmScaleSetName, instanceId, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, instanceId, options }, getOperationSpec$A); + } + /** + * Gets the status of a virtual machine from a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + getInstanceView(resourceGroupName, vmScaleSetName, instanceId, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, instanceId, options }, getInstanceViewOperationSpec$2); + } + /** + * Gets a list of all virtual machines in a VM scale sets. + * @param resourceGroupName The name of the resource group. + * @param virtualMachineScaleSetName The name of the VM scale set. + * @param options The options parameters. + */ + _list(resourceGroupName, virtualMachineScaleSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, virtualMachineScaleSetName, options }, listOperationSpec$n); + } + /** + * Power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you + * are getting charged for the resources. Instead, use deallocate to release resources and avoid + * charges. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginPowerOff(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: powerOffOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you + * are getting charged for the resources. Instead, use deallocate to release resources and avoid + * charges. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginPowerOffAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginPowerOff(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * Restarts a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginRestart(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: restartOperationSpec$4, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Restarts a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginRestartAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRestart(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * Starts a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginStart(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: startOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Starts a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginStartAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginStart(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * Shuts down the virtual machine in the virtual machine scale set, moves it to a new node, and powers + * it back on. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginRedeploy(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: redeployOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Shuts down the virtual machine in the virtual machine scale set, moves it to a new node, and powers + * it back on. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginRedeployAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRedeploy(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to retrieve SAS URIs of boot diagnostic logs for a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + retrieveBootDiagnosticsData(resourceGroupName, vmScaleSetName, instanceId, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, instanceId, options }, retrieveBootDiagnosticsDataOperationSpec$1); + } + /** + * Performs maintenance on a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginPerformMaintenance(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmScaleSetName, instanceId, options }, + spec: performMaintenanceOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Performs maintenance on a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + beginPerformMaintenanceAndWait(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginPerformMaintenance(resourceGroupName, vmScaleSetName, instanceId, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to simulate the eviction of spot virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + simulateEviction(resourceGroupName, vmScaleSetName, instanceId, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, instanceId, options }, simulateEvictionOperationSpec$1); + } + /** + * Attach and detach data disks to/from a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param parameters Parameters supplied to the attach and detach data disks operation on a Virtual + * Machine Scale Sets VM. + * @param options The options parameters. + */ + beginAttachDetachDataDisks(resourceGroupName, vmScaleSetName, instanceId, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + parameters, + options, + }, + spec: attachDetachDataDisksOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Attach and detach data disks to/from a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param parameters Parameters supplied to the attach and detach data disks operation on a Virtual + * Machine Scale Sets VM. + * @param options The options parameters. + */ + beginAttachDetachDataDisksAndWait(resourceGroupName, vmScaleSetName, instanceId, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginAttachDetachDataDisks(resourceGroupName, vmScaleSetName, instanceId, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Run command on a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param parameters Parameters supplied to the Run command operation. + * @param options The options parameters. + */ + beginRunCommand(resourceGroupName, vmScaleSetName, instanceId, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + parameters, + options, + }, + spec: runCommandOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Run command on a virtual machine in a VM scale set. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param parameters Parameters supplied to the Run command operation. + * @param options The options parameters. + */ + beginRunCommandAndWait(resourceGroupName, vmScaleSetName, instanceId, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRunCommand(resourceGroupName, vmScaleSetName, instanceId, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group. + * @param virtualMachineScaleSetName The name of the VM scale set. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, virtualMachineScaleSetName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, virtualMachineScaleSetName, nextLink, options }, listNextOperationSpec$k); + } +} +// Operation Specifications +const serializer$F = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const reimageOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/reimage", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: vmScaleSetVMReimageInput, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$F, +}; +const reimageAllOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/reimageall", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const approveRollingUpgradeOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/approveRollingUpgrade", + httpMethod: "POST", + responses: { + 200: { + headersMapper: VirtualMachineScaleSetVMsApproveRollingUpgradeHeaders, + }, + 201: { + headersMapper: VirtualMachineScaleSetVMsApproveRollingUpgradeHeaders, + }, + 202: { + headersMapper: VirtualMachineScaleSetVMsApproveRollingUpgradeHeaders, + }, + 204: { + headersMapper: VirtualMachineScaleSetVMsApproveRollingUpgradeHeaders, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const deallocateOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/deallocate", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const updateOperationSpec$o = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVM, + }, + 201: { + bodyMapper: VirtualMachineScaleSetVM, + }, + 202: { + bodyMapper: VirtualMachineScaleSetVM, + }, + 204: { + bodyMapper: VirtualMachineScaleSetVM, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters4, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [ + accept, + contentType, + ifMatch, + ifNoneMatch, + ], + mediaType: "json", + serializer: serializer$F, +}; +const deleteOperationSpec$p = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, forceDeletion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const getOperationSpec$A = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVM, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand2], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const getInstanceViewOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/instanceView", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVMInstanceView, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const listOperationSpec$n = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVMListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + expand1, + filter, + select, + ], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + virtualMachineScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const powerOffOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, skipShutdown], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const restartOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const startOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const redeployOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const retrieveBootDiagnosticsDataOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/retrieveBootDiagnosticsData", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RetrieveBootDiagnosticsDataResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + sasUriExpirationTimeInMinutes, + ], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const performMaintenanceOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const simulateEvictionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept], + serializer: serializer$F, +}; +const attachDetachDataDisksOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/attachDetachDataDisks", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: StorageProfile, + }, + 201: { + bodyMapper: StorageProfile, + }, + 202: { + bodyMapper: StorageProfile, + }, + 204: { + bodyMapper: StorageProfile, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters5, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$F, +}; +const runCommandOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RunCommandResult, + }, + 201: { + bodyMapper: RunCommandResult, + }, + 202: { + bodyMapper: RunCommandResult, + }, + 204: { + bodyMapper: RunCommandResult, + }, + }, + requestBody: parameters6, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [contentType, accept1], + mediaType: "json", + serializer: serializer$F, +}; +const listNextOperationSpec$k = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineScaleSetVMListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + virtualMachineScaleSetName, + ], + headerParameters: [accept], + serializer: serializer$F, +}; + +/* + * 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 containing VirtualMachineExtensions operations. */ +class VirtualMachineExtensionsImpl { + /** + * Initialize a new instance of the class VirtualMachineExtensions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * The operation to create or update the extension. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the extension should be created or updated. + * @param vmExtensionName The name of the virtual machine extension. + * @param extensionParameters Parameters supplied to the Create Virtual Machine Extension operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, vmName, vmExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmName, + vmExtensionName, + extensionParameters, + options, + }, + spec: createOrUpdateOperationSpec$l, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to create or update the extension. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the extension should be created or updated. + * @param vmExtensionName The name of the virtual machine extension. + * @param extensionParameters Parameters supplied to the Create Virtual Machine Extension operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, vmName, vmExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, vmName, vmExtensionName, extensionParameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to update the extension. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the extension should be updated. + * @param vmExtensionName The name of the virtual machine extension. + * @param extensionParameters Parameters supplied to the Update Virtual Machine Extension operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, vmName, vmExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmName, + vmExtensionName, + extensionParameters, + options, + }, + spec: updateOperationSpec$n, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to update the extension. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the extension should be updated. + * @param vmExtensionName The name of the virtual machine extension. + * @param extensionParameters Parameters supplied to the Update Virtual Machine Extension operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, vmName, vmExtensionName, extensionParameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, vmName, vmExtensionName, extensionParameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to delete the extension. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the extension should be deleted. + * @param vmExtensionName The name of the virtual machine extension. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, vmName, vmExtensionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, vmExtensionName, options }, + spec: deleteOperationSpec$o, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete the extension. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the extension should be deleted. + * @param vmExtensionName The name of the virtual machine extension. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, vmName, vmExtensionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, vmName, vmExtensionName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to get the extension. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine containing the extension. + * @param vmExtensionName The name of the virtual machine extension. + * @param options The options parameters. + */ + get(resourceGroupName, vmName, vmExtensionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, vmExtensionName, options }, getOperationSpec$z); + } + /** + * The operation to get all extensions of a Virtual Machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine containing the extension. + * @param options The options parameters. + */ + list(resourceGroupName, vmName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, options }, listOperationSpec$m); + } +} +// Operation Specifications +const serializer$E = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$l = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: VirtualMachineExtension, + }, + 201: { + bodyMapper: VirtualMachineExtension, + }, + 202: { + bodyMapper: VirtualMachineExtension, + }, + 204: { + bodyMapper: VirtualMachineExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: extensionParameters4, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmExtensionName, + vmName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$E, +}; +const updateOperationSpec$n = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: VirtualMachineExtension, + }, + 201: { + bodyMapper: VirtualMachineExtension, + }, + 202: { + bodyMapper: VirtualMachineExtension, + }, + 204: { + bodyMapper: VirtualMachineExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: extensionParameters5, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmExtensionName, + vmName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$E, +}; +const deleteOperationSpec$o = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmExtensionName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$E, +}; +const getOperationSpec$z = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineExtension, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmExtensionName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$E, +}; +const listOperationSpec$m = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineExtensionsListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$E, +}; + +/* + * 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 containing VirtualMachines operations. */ +class VirtualMachinesImpl { + /** + * Initialize a new instance of the class VirtualMachines class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets all the virtual machines under the specified subscription for the specified location. + * @param location The location for which virtual machines under the subscription are queried. + * @param options The options parameters. + */ + listByLocation(location, options) { + const iter = this.listByLocationPagingAll(location, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByLocationPagingPage(location, options, settings); + }, + }; + } + listByLocationPagingPage(location, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByLocationPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByLocation(location, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByLocationNext(location, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByLocationPagingAll(location, options) { + return tslib.__asyncGenerator(this, arguments, function* listByLocationPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByLocationPagingPage(location, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all of the virtual machines in the specified resource group. Use the nextLink property in the + * response to get the next page of virtual machines. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + list(resourceGroupName, options) { + const iter = this.listPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Lists all of the virtual machines in the specified subscription. Use the nextLink property in the + * response to get the next page of virtual machines. + * @param options The options parameters. + */ + listAll(options) { + const iter = this.listAllPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listAllPagingPage(options, settings); + }, + }; + } + listAllPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listAll(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listAllNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listAllPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listAllPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Lists all available virtual machine sizes to which the specified virtual machine can be resized. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + listAvailableSizes(resourceGroupName, vmName, options) { + const iter = this.listAvailableSizesPagingAll(resourceGroupName, vmName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listAvailableSizesPagingPage(resourceGroupName, vmName, options, settings); + }, + }; + } + listAvailableSizesPagingPage(resourceGroupName, vmName, options, _settings) { + return tslib.__asyncGenerator(this, arguments, function* listAvailableSizesPagingPage_1() { + let result; + result = yield tslib.__await(this._listAvailableSizes(resourceGroupName, vmName, options)); + yield yield tslib.__await(result.value || []); + }); + } + listAvailableSizesPagingAll(resourceGroupName, vmName, options) { + return tslib.__asyncGenerator(this, arguments, function* listAvailableSizesPagingAll_1() { + var _a, e_4, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listAvailableSizesPagingPage(resourceGroupName, vmName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * Gets all the virtual machines under the specified subscription for the specified location. + * @param location The location for which virtual machines under the subscription are queried. + * @param options The options parameters. + */ + _listByLocation(location, options) { + return this.client.sendOperationRequest({ location, options }, listByLocationOperationSpec); + } + /** + * Captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to + * create similar VMs. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the Capture Virtual Machine operation. + * @param options The options parameters. + */ + beginCapture(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, parameters, options }, + spec: captureOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to + * create similar VMs. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the Capture Virtual Machine operation. + * @param options The options parameters. + */ + beginCaptureAndWait(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCapture(resourceGroupName, vmName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to create or update a virtual machine. Please note some properties can be set only + * during virtual machine creation. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the Create Virtual Machine operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, parameters, options }, + spec: createOrUpdateOperationSpec$k, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to create or update a virtual machine. Please note some properties can be set only + * during virtual machine creation. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the Create Virtual Machine operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, vmName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to update a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the Update Virtual Machine operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, parameters, options }, + spec: updateOperationSpec$m, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to update a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the Update Virtual Machine operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, vmName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to delete a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: deleteOperationSpec$n, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * Retrieves information about the model view or the instance view of a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + get(resourceGroupName, vmName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, options }, getOperationSpec$y); + } + /** + * Retrieves information about the run-time state of a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + instanceView(resourceGroupName, vmName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, options }, instanceViewOperationSpec); + } + /** + * Converts virtual machine disks from blob-based to managed disks. Virtual machine must be + * stop-deallocated before invoking this operation. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginConvertToManagedDisks(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: convertToManagedDisksOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Converts virtual machine disks from blob-based to managed disks. Virtual machine must be + * stop-deallocated before invoking this operation. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginConvertToManagedDisksAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginConvertToManagedDisks(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * Shuts down the virtual machine and releases the compute resources. You are not billed for the + * compute resources that this virtual machine uses. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginDeallocate(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: deallocateOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Shuts down the virtual machine and releases the compute resources. You are not billed for the + * compute resources that this virtual machine uses. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginDeallocateAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDeallocate(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * Sets the OS state of the virtual machine to generalized. It is recommended to sysprep the virtual + * machine before performing this operation. For Windows, please refer to [Create a managed image of a + * generalized VM in + * Azure](https://docs.microsoft.com/azure/virtual-machines/windows/capture-image-resource). For Linux, + * please refer to [How to create an image of a virtual machine or + * VHD](https://docs.microsoft.com/azure/virtual-machines/linux/capture-image). + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + generalize(resourceGroupName, vmName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, options }, generalizeOperationSpec); + } + /** + * Lists all of the virtual machines in the specified resource group. Use the nextLink property in the + * response to get the next page of virtual machines. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _list(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listOperationSpec$l); + } + /** + * Lists all of the virtual machines in the specified subscription. Use the nextLink property in the + * response to get the next page of virtual machines. + * @param options The options parameters. + */ + _listAll(options) { + return this.client.sendOperationRequest({ options }, listAllOperationSpec$2); + } + /** + * Lists all available virtual machine sizes to which the specified virtual machine can be resized. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + _listAvailableSizes(resourceGroupName, vmName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, options }, listAvailableSizesOperationSpec$2); + } + /** + * The operation to power off (stop) a virtual machine. The virtual machine can be restarted with the + * same provisioned resources. You are still charged for this virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginPowerOff(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: powerOffOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to power off (stop) a virtual machine. The virtual machine can be restarted with the + * same provisioned resources. You are still charged for this virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginPowerOffAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginPowerOff(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to reapply a virtual machine's state. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginReapply(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: reapplyOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to reapply a virtual machine's state. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginReapplyAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReapply(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to restart a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginRestart(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: restartOperationSpec$3, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to restart a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginRestartAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRestart(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to start a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginStart(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: startOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to start a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginStartAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginStart(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * Shuts down the virtual machine, moves it to a new node, and powers it back on. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginRedeploy(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: redeployOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Shuts down the virtual machine, moves it to a new node, and powers it back on. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginRedeployAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRedeploy(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * Reimages (upgrade the operating system) a virtual machine which don't have a ephemeral OS disk, for + * virtual machines who have a ephemeral OS disk the virtual machine is reset to initial state. NOTE: + * The retaining of old OS disk depends on the value of deleteOption of OS disk. If deleteOption is + * detach, the old OS disk will be preserved after reimage. If deleteOption is delete, the old OS disk + * will be deleted after reimage. The deleteOption of the OS disk should be updated accordingly before + * performing the reimage. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginReimage(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: reimageOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Reimages (upgrade the operating system) a virtual machine which don't have a ephemeral OS disk, for + * virtual machines who have a ephemeral OS disk the virtual machine is reset to initial state. NOTE: + * The retaining of old OS disk depends on the value of deleteOption of OS disk. If deleteOption is + * detach, the old OS disk will be preserved after reimage. If deleteOption is delete, the old OS disk + * will be deleted after reimage. The deleteOption of the OS disk should be updated accordingly before + * performing the reimage. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginReimageAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReimage(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to retrieve SAS URIs for a virtual machine's boot diagnostic logs. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + retrieveBootDiagnosticsData(resourceGroupName, vmName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, options }, retrieveBootDiagnosticsDataOperationSpec); + } + /** + * The operation to perform maintenance on a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginPerformMaintenance(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: performMaintenanceOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to perform maintenance on a virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginPerformMaintenanceAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginPerformMaintenance(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to simulate the eviction of spot virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + simulateEviction(resourceGroupName, vmName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, options }, simulateEvictionOperationSpec); + } + /** + * Assess patches on the VM. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginAssessPatches(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, options }, + spec: assessPatchesOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Assess patches on the VM. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param options The options parameters. + */ + beginAssessPatchesAndWait(resourceGroupName, vmName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginAssessPatches(resourceGroupName, vmName, options); + return poller.pollUntilDone(); + }); + } + /** + * Installs patches on the VM. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param installPatchesInput Input for InstallPatches as directly received by the API + * @param options The options parameters. + */ + beginInstallPatches(resourceGroupName, vmName, installPatchesInput, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, installPatchesInput, options }, + spec: installPatchesOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Installs patches on the VM. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param installPatchesInput Input for InstallPatches as directly received by the API + * @param options The options parameters. + */ + beginInstallPatchesAndWait(resourceGroupName, vmName, installPatchesInput, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginInstallPatches(resourceGroupName, vmName, installPatchesInput, options); + return poller.pollUntilDone(); + }); + } + /** + * Attach and detach data disks to/from the virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the attach and detach data disks operation on the virtual + * machine. + * @param options The options parameters. + */ + beginAttachDetachDataDisks(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, parameters, options }, + spec: attachDetachDataDisksOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Attach and detach data disks to/from the virtual machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the attach and detach data disks operation on the virtual + * machine. + * @param options The options parameters. + */ + beginAttachDetachDataDisksAndWait(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginAttachDetachDataDisks(resourceGroupName, vmName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Run command on the VM. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the Run command operation. + * @param options The options parameters. + */ + beginRunCommand(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, parameters, options }, + spec: runCommandOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Run command on the VM. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine. + * @param parameters Parameters supplied to the Run command operation. + * @param options The options parameters. + */ + beginRunCommandAndWait(resourceGroupName, vmName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRunCommand(resourceGroupName, vmName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * ListByLocationNext + * @param location The location for which virtual machines under the subscription are queried. + * @param nextLink The nextLink from the previous successful call to the ListByLocation method. + * @param options The options parameters. + */ + _listByLocationNext(location, nextLink, options) { + return this.client.sendOperationRequest({ location, nextLink, options }, listByLocationNextOperationSpec); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listNextOperationSpec$j); + } + /** + * ListAllNext + * @param nextLink The nextLink from the previous successful call to the ListAll method. + * @param options The options parameters. + */ + _listAllNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listAllNextOperationSpec$2); + } +} +// Operation Specifications +const serializer$D = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listByLocationOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + location, + subscriptionId, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const captureOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: VirtualMachineCaptureResult, + }, + 201: { + bodyMapper: VirtualMachineCaptureResult, + }, + 202: { + bodyMapper: VirtualMachineCaptureResult, + }, + 204: { + bodyMapper: VirtualMachineCaptureResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters7, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$D, +}; +const createOrUpdateOperationSpec$k = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: VirtualMachine, + }, + 201: { + bodyMapper: VirtualMachine, + }, + 202: { + bodyMapper: VirtualMachine, + }, + 204: { + bodyMapper: VirtualMachine, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters8, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [ + accept, + contentType, + ifMatch, + ifNoneMatch, + ], + mediaType: "json", + serializer: serializer$D, +}; +const updateOperationSpec$m = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: VirtualMachine, + }, + 201: { + bodyMapper: VirtualMachine, + }, + 202: { + bodyMapper: VirtualMachine, + }, + 204: { + bodyMapper: VirtualMachine, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters9, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [ + accept, + contentType, + ifMatch, + ifNoneMatch, + ], + mediaType: "json", + serializer: serializer$D, +}; +const deleteOperationSpec$n = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, forceDeletion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const getOperationSpec$y = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachine, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand2], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const instanceViewOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineInstanceView, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const convertToManagedDisksOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const deallocateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, hibernate], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const generalizeOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", + httpMethod: "POST", + responses: { + 200: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const listOperationSpec$l = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + filter, + expand3, + ], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const listAllOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + filter, + statusOnly, + expand4, + ], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$D, +}; +const listAvailableSizesOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineSizeListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const powerOffOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, skipShutdown], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const reapplyOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const restartOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const startOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const redeployOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const reimageOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters10, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$D, +}; +const retrieveBootDiagnosticsDataOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/retrieveBootDiagnosticsData", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RetrieveBootDiagnosticsDataResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + sasUriExpirationTimeInMinutes, + ], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const performMaintenanceOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const simulateEvictionOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const assessPatchesOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/assessPatches", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: VirtualMachineAssessPatchesResult, + }, + 201: { + bodyMapper: VirtualMachineAssessPatchesResult, + }, + 202: { + bodyMapper: VirtualMachineAssessPatchesResult, + }, + 204: { + bodyMapper: VirtualMachineAssessPatchesResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const installPatchesOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/installPatches", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: VirtualMachineInstallPatchesResult, + }, + 201: { + bodyMapper: VirtualMachineInstallPatchesResult, + }, + 202: { + bodyMapper: VirtualMachineInstallPatchesResult, + }, + 204: { + bodyMapper: VirtualMachineInstallPatchesResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: installPatchesInput, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$D, +}; +const attachDetachDataDisksOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/attachDetachDataDisks", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: StorageProfile, + }, + 201: { + bodyMapper: StorageProfile, + }, + 202: { + bodyMapper: StorageProfile, + }, + 204: { + bodyMapper: StorageProfile, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters5, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$D, +}; +const runCommandOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RunCommandResult, + }, + 201: { + bodyMapper: RunCommandResult, + }, + 202: { + bodyMapper: RunCommandResult, + }, + 204: { + bodyMapper: RunCommandResult, + }, + }, + requestBody: parameters6, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [contentType, accept1], + mediaType: "json", + serializer: serializer$D, +}; +const listByLocationNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + location, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const listNextOperationSpec$j = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$D, +}; +const listAllNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$D, +}; + +/* + * 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 containing VirtualMachineImages operations. */ +class VirtualMachineImagesImpl { + /** + * Initialize a new instance of the class VirtualMachineImages class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a virtual machine image. + * @param location The name of a supported Azure region. + * @param publisherName A valid image publisher. + * @param offer A valid image publisher offer. + * @param skus A valid image SKU. + * @param version A valid image SKU version. + * @param options The options parameters. + */ + get(location, publisherName, offer, skus, version, options) { + return this.client.sendOperationRequest({ location, publisherName, offer, skus, version, options }, getOperationSpec$x); + } + /** + * Gets a list of all virtual machine image versions for the specified location, publisher, offer, and + * SKU. + * @param location The name of a supported Azure region. + * @param publisherName A valid image publisher. + * @param offer A valid image publisher offer. + * @param skus A valid image SKU. + * @param options The options parameters. + */ + list(location, publisherName, offer, skus, options) { + return this.client.sendOperationRequest({ location, publisherName, offer, skus, options }, listOperationSpec$k); + } + /** + * Gets a list of virtual machine image offers for the specified location and publisher. + * @param location The name of a supported Azure region. + * @param publisherName A valid image publisher. + * @param options The options parameters. + */ + listOffers(location, publisherName, options) { + return this.client.sendOperationRequest({ location, publisherName, options }, listOffersOperationSpec$1); + } + /** + * Gets a list of virtual machine image publishers for the specified Azure location. + * @param location The name of a supported Azure region. + * @param options The options parameters. + */ + listPublishers(location, options) { + return this.client.sendOperationRequest({ location, options }, listPublishersOperationSpec$1); + } + /** + * Gets a list of virtual machine image SKUs for the specified location, publisher, and offer. + * @param location The name of a supported Azure region. + * @param publisherName A valid image publisher. + * @param offer A valid image publisher offer. + * @param options The options parameters. + */ + listSkus(location, publisherName, offer, options) { + return this.client.sendOperationRequest({ location, publisherName, offer, options }, listSkusOperationSpec$1); + } + /** + * Gets a list of all virtual machine image versions for the specified edge zone + * @param location The name of a supported Azure region. + * @param edgeZone The name of the edge zone. + * @param options The options parameters. + */ + listByEdgeZone(location, edgeZone, options) { + return this.client.sendOperationRequest({ location, edgeZone, options }, listByEdgeZoneOperationSpec); + } +} +// Operation Specifications +const serializer$C = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$x = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineImage, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + offer, + skus, + version, + ], + headerParameters: [accept], + serializer: serializer$C, +}; +const listOperationSpec$k = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + expand1, + top, + orderby, + ], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + offer, + skus, + ], + headerParameters: [accept], + serializer: serializer$C, +}; +const listOffersOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + ], + headerParameters: [accept], + serializer: serializer$C, +}; +const listPublishersOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + ], + headerParameters: [accept], + serializer: serializer$C, +}; +const listSkusOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + offer, + ], + headerParameters: [accept], + serializer: serializer$C, +}; +const listByEdgeZoneOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/vmimages", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VmImagesInEdgeZoneListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + edgeZone, + ], + headerParameters: [accept], + serializer: serializer$C, +}; + +/* + * 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 containing VirtualMachineImagesEdgeZone operations. */ +class VirtualMachineImagesEdgeZoneImpl { + /** + * Initialize a new instance of the class VirtualMachineImagesEdgeZone class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a virtual machine image in an edge zone. + * @param location The name of a supported Azure region. + * @param edgeZone The name of the edge zone. + * @param publisherName A valid image publisher. + * @param offer A valid image publisher offer. + * @param skus A valid image SKU. + * @param version A valid image SKU version. + * @param options The options parameters. + */ + get(location, edgeZone, publisherName, offer, skus, version, options) { + return this.client.sendOperationRequest({ location, edgeZone, publisherName, offer, skus, version, options }, getOperationSpec$w); + } + /** + * Gets a list of all virtual machine image versions for the specified location, edge zone, publisher, + * offer, and SKU. + * @param location The name of a supported Azure region. + * @param edgeZone The name of the edge zone. + * @param publisherName A valid image publisher. + * @param offer A valid image publisher offer. + * @param skus A valid image SKU. + * @param options The options parameters. + */ + list(location, edgeZone, publisherName, offer, skus, options) { + return this.client.sendOperationRequest({ location, edgeZone, publisherName, offer, skus, options }, listOperationSpec$j); + } + /** + * Gets a list of virtual machine image offers for the specified location, edge zone and publisher. + * @param location The name of a supported Azure region. + * @param edgeZone The name of the edge zone. + * @param publisherName A valid image publisher. + * @param options The options parameters. + */ + listOffers(location, edgeZone, publisherName, options) { + return this.client.sendOperationRequest({ location, edgeZone, publisherName, options }, listOffersOperationSpec); + } + /** + * Gets a list of virtual machine image publishers for the specified Azure location and edge zone. + * @param location The name of a supported Azure region. + * @param edgeZone The name of the edge zone. + * @param options The options parameters. + */ + listPublishers(location, edgeZone, options) { + return this.client.sendOperationRequest({ location, edgeZone, options }, listPublishersOperationSpec); + } + /** + * Gets a list of virtual machine image SKUs for the specified location, edge zone, publisher, and + * offer. + * @param location The name of a supported Azure region. + * @param edgeZone The name of the edge zone. + * @param publisherName A valid image publisher. + * @param offer A valid image publisher offer. + * @param options The options parameters. + */ + listSkus(location, edgeZone, publisherName, offer, options) { + return this.client.sendOperationRequest({ location, edgeZone, publisherName, offer, options }, listSkusOperationSpec); + } +} +// Operation Specifications +const serializer$B = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$w = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineImage, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + offer, + skus, + version, + edgeZone, + ], + headerParameters: [accept], + serializer: serializer$B, +}; +const listOperationSpec$j = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + expand1, + top, + orderby, + ], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + offer, + skus, + edgeZone, + ], + headerParameters: [accept], + serializer: serializer$B, +}; +const listOffersOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + edgeZone, + ], + headerParameters: [accept], + serializer: serializer$B, +}; +const listPublishersOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + edgeZone, + ], + headerParameters: [accept], + serializer: serializer$B, +}; +const listSkusOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineImageResource", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + offer, + edgeZone, + ], + headerParameters: [accept], + serializer: serializer$B, +}; + +/* + * 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 containing VirtualMachineExtensionImages operations. */ +class VirtualMachineExtensionImagesImpl { + /** + * Initialize a new instance of the class VirtualMachineExtensionImages class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a virtual machine extension image. + * @param location The name of a supported Azure region. + * @param publisherName + * @param typeParam + * @param version + * @param options The options parameters. + */ + get(location, publisherName, typeParam, version, options) { + return this.client.sendOperationRequest({ location, publisherName, typeParam, version, options }, getOperationSpec$v); + } + /** + * Gets a list of virtual machine extension image types. + * @param location The name of a supported Azure region. + * @param publisherName + * @param options The options parameters. + */ + listTypes(location, publisherName, options) { + return this.client.sendOperationRequest({ location, publisherName, options }, listTypesOperationSpec); + } + /** + * Gets a list of virtual machine extension image versions. + * @param location The name of a supported Azure region. + * @param publisherName + * @param typeParam + * @param options The options parameters. + */ + listVersions(location, publisherName, typeParam, options) { + return this.client.sendOperationRequest({ location, publisherName, typeParam, options }, listVersionsOperationSpec); + } +} +// Operation Specifications +const serializer$A = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$v = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineExtensionImage, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + version, + typeParam, + ], + headerParameters: [accept], + serializer: serializer$A, +}; +const listTypesOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineExtensionImage", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + ], + headerParameters: [accept], + serializer: serializer$A, +}; +const listVersionsOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VirtualMachineExtensionImage", + }, + }, + }, + }, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + filter, + top, + orderby, + ], + urlParameters: [ + $host, + subscriptionId, + location1, + publisherName, + typeParam, + ], + headerParameters: [accept], + serializer: serializer$A, +}; + +/* + * 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 containing AvailabilitySets operations. */ +class AvailabilitySetsImpl { + /** + * Initialize a new instance of the class AvailabilitySets class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all availability sets in a subscription. + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listBySubscriptionPagingPage(options, settings); + }, + }; + } + listBySubscriptionPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listBySubscription(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all availability sets in a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + list(resourceGroupName, options) { + const iter = this.listPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Lists all available virtual machine sizes that can be used to create a new virtual machine in an + * existing availability set. + * @param resourceGroupName The name of the resource group. + * @param availabilitySetName The name of the availability set. + * @param options The options parameters. + */ + listAvailableSizes(resourceGroupName, availabilitySetName, options) { + const iter = this.listAvailableSizesPagingAll(resourceGroupName, availabilitySetName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listAvailableSizesPagingPage(resourceGroupName, availabilitySetName, options, settings); + }, + }; + } + listAvailableSizesPagingPage(resourceGroupName, availabilitySetName, options, _settings) { + return tslib.__asyncGenerator(this, arguments, function* listAvailableSizesPagingPage_1() { + let result; + result = yield tslib.__await(this._listAvailableSizes(resourceGroupName, availabilitySetName, options)); + yield yield tslib.__await(result.value || []); + }); + } + listAvailableSizesPagingAll(resourceGroupName, availabilitySetName, options) { + return tslib.__asyncGenerator(this, arguments, function* listAvailableSizesPagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listAvailableSizesPagingPage(resourceGroupName, availabilitySetName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Create or update an availability set. + * @param resourceGroupName The name of the resource group. + * @param availabilitySetName The name of the availability set. + * @param parameters Parameters supplied to the Create Availability Set operation. + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, availabilitySetName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, availabilitySetName, parameters, options }, createOrUpdateOperationSpec$j); + } + /** + * Update an availability set. + * @param resourceGroupName The name of the resource group. + * @param availabilitySetName The name of the availability set. + * @param parameters Parameters supplied to the Update Availability Set operation. + * @param options The options parameters. + */ + update(resourceGroupName, availabilitySetName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, availabilitySetName, parameters, options }, updateOperationSpec$l); + } + /** + * Delete an availability set. + * @param resourceGroupName The name of the resource group. + * @param availabilitySetName The name of the availability set. + * @param options The options parameters. + */ + delete(resourceGroupName, availabilitySetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, availabilitySetName, options }, deleteOperationSpec$m); + } + /** + * Retrieves information about an availability set. + * @param resourceGroupName The name of the resource group. + * @param availabilitySetName The name of the availability set. + * @param options The options parameters. + */ + get(resourceGroupName, availabilitySetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, availabilitySetName, options }, getOperationSpec$u); + } + /** + * Lists all availability sets in a subscription. + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$4); + } + /** + * Lists all availability sets in a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _list(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listOperationSpec$i); + } + /** + * Lists all available virtual machine sizes that can be used to create a new virtual machine in an + * existing availability set. + * @param resourceGroupName The name of the resource group. + * @param availabilitySetName The name of the availability set. + * @param options The options parameters. + */ + _listAvailableSizes(resourceGroupName, availabilitySetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, availabilitySetName, options }, listAvailableSizesOperationSpec$1); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$4); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listNextOperationSpec$i); + } +} +// Operation Specifications +const serializer$z = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$j = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: AvailabilitySet, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters11, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + availabilitySetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$z, +}; +const updateOperationSpec$l = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: AvailabilitySet, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters12, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + availabilitySetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$z, +}; +const deleteOperationSpec$m = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + availabilitySetName, + ], + headerParameters: [accept], + serializer: serializer$z, +}; +const getOperationSpec$u = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AvailabilitySet, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + availabilitySetName, + ], + headerParameters: [accept], + serializer: serializer$z, +}; +const listBySubscriptionOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/availabilitySets", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AvailabilitySetListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$z, +}; +const listOperationSpec$i = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AvailabilitySetListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$z, +}; +const listAvailableSizesOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineSizeListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + availabilitySetName, + ], + headerParameters: [accept], + serializer: serializer$z, +}; +const listBySubscriptionNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AvailabilitySetListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$z, +}; +const listNextOperationSpec$i = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AvailabilitySetListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$z, +}; + +/* + * 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 containing ProximityPlacementGroups operations. */ +class ProximityPlacementGroupsImpl { + /** + * Initialize a new instance of the class ProximityPlacementGroups class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all proximity placement groups in a subscription. + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listBySubscriptionPagingPage(options, settings); + }, + }; + } + listBySubscriptionPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listBySubscription(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all proximity placement groups in a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Create or update a proximity placement group. + * @param resourceGroupName The name of the resource group. + * @param proximityPlacementGroupName The name of the proximity placement group. + * @param parameters Parameters supplied to the Create Proximity Placement Group operation. + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, proximityPlacementGroupName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, proximityPlacementGroupName, parameters, options }, createOrUpdateOperationSpec$i); + } + /** + * Update a proximity placement group. + * @param resourceGroupName The name of the resource group. + * @param proximityPlacementGroupName The name of the proximity placement group. + * @param parameters Parameters supplied to the Update Proximity Placement Group operation. + * @param options The options parameters. + */ + update(resourceGroupName, proximityPlacementGroupName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, proximityPlacementGroupName, parameters, options }, updateOperationSpec$k); + } + /** + * Delete a proximity placement group. + * @param resourceGroupName The name of the resource group. + * @param proximityPlacementGroupName The name of the proximity placement group. + * @param options The options parameters. + */ + delete(resourceGroupName, proximityPlacementGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, proximityPlacementGroupName, options }, deleteOperationSpec$l); + } + /** + * Retrieves information about a proximity placement group . + * @param resourceGroupName The name of the resource group. + * @param proximityPlacementGroupName The name of the proximity placement group. + * @param options The options parameters. + */ + get(resourceGroupName, proximityPlacementGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, proximityPlacementGroupName, options }, getOperationSpec$t); + } + /** + * Lists all proximity placement groups in a subscription. + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$3); + } + /** + * Lists all proximity placement groups in a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$9); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$3); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$9); + } +} +// Operation Specifications +const serializer$y = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$i = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: ProximityPlacementGroup, + }, + 201: { + bodyMapper: ProximityPlacementGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters13, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + proximityPlacementGroupName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$y, +}; +const updateOperationSpec$k = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: ProximityPlacementGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters14, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + proximityPlacementGroupName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$y, +}; +const deleteOperationSpec$l = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", + httpMethod: "DELETE", + responses: { + 200: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + proximityPlacementGroupName, + ], + headerParameters: [accept], + serializer: serializer$y, +}; +const getOperationSpec$t = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ProximityPlacementGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, includeColocationStatus], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + proximityPlacementGroupName, + ], + headerParameters: [accept], + serializer: serializer$y, +}; +const listBySubscriptionOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/proximityPlacementGroups", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ProximityPlacementGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$y, +}; +const listByResourceGroupOperationSpec$9 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ProximityPlacementGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$y, +}; +const listBySubscriptionNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ProximityPlacementGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$y, +}; +const listByResourceGroupNextOperationSpec$9 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ProximityPlacementGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$y, +}; + +/* + * 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 containing DedicatedHostGroups operations. */ +class DedicatedHostGroupsImpl { + /** + * Initialize a new instance of the class DedicatedHostGroups class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all of the dedicated host groups in the specified resource group. Use the nextLink property in + * the response to get the next page of dedicated host groups. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all of the dedicated host groups in the subscription. Use the nextLink property in the + * response to get the next page of dedicated host groups. + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listBySubscriptionPagingPage(options, settings); + }, + }; + } + listBySubscriptionPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listBySubscription(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Create or update a dedicated host group. For details of Dedicated Host and Dedicated Host Groups + * please see [Dedicated Host Documentation] (https://go.microsoft.com/fwlink/?linkid=2082596) + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param parameters Parameters supplied to the Create Dedicated Host Group. + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, hostGroupName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, hostGroupName, parameters, options }, createOrUpdateOperationSpec$h); + } + /** + * Update an dedicated host group. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param parameters Parameters supplied to the Update Dedicated Host Group operation. + * @param options The options parameters. + */ + update(resourceGroupName, hostGroupName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, hostGroupName, parameters, options }, updateOperationSpec$j); + } + /** + * Delete a dedicated host group. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param options The options parameters. + */ + delete(resourceGroupName, hostGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, hostGroupName, options }, deleteOperationSpec$k); + } + /** + * Retrieves information about a dedicated host group. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param options The options parameters. + */ + get(resourceGroupName, hostGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, hostGroupName, options }, getOperationSpec$s); + } + /** + * Lists all of the dedicated host groups in the specified resource group. Use the nextLink property in + * the response to get the next page of dedicated host groups. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$8); + } + /** + * Lists all of the dedicated host groups in the subscription. Use the nextLink property in the + * response to get the next page of dedicated host groups. + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$2); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$8); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$2); + } +} +// Operation Specifications +const serializer$x = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$h = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: DedicatedHostGroup, + }, + 201: { + bodyMapper: DedicatedHostGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters15, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$x, +}; +const updateOperationSpec$j = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: DedicatedHostGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters16, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$x, +}; +const deleteOperationSpec$k = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + ], + headerParameters: [accept], + serializer: serializer$x, +}; +const getOperationSpec$s = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHostGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand2], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + ], + headerParameters: [accept], + serializer: serializer$x, +}; +const listByResourceGroupOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHostGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$x, +}; +const listBySubscriptionOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/hostGroups", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHostGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$x, +}; +const listByResourceGroupNextOperationSpec$8 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHostGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$x, +}; +const listBySubscriptionNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHostGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$x, +}; + +/* + * 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 containing DedicatedHosts operations. */ +class DedicatedHostsImpl { + /** + * Initialize a new instance of the class DedicatedHosts class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all of the dedicated hosts in the specified dedicated host group. Use the nextLink property in + * the response to get the next page of dedicated hosts. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param options The options parameters. + */ + listByHostGroup(resourceGroupName, hostGroupName, options) { + const iter = this.listByHostGroupPagingAll(resourceGroupName, hostGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByHostGroupPagingPage(resourceGroupName, hostGroupName, options, settings); + }, + }; + } + listByHostGroupPagingPage(resourceGroupName, hostGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByHostGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByHostGroup(resourceGroupName, hostGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByHostGroupNext(resourceGroupName, hostGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByHostGroupPagingAll(resourceGroupName, hostGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHostGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByHostGroupPagingPage(resourceGroupName, hostGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all available dedicated host sizes to which the specified dedicated host can be resized. NOTE: + * The dedicated host sizes provided can be used to only scale up the existing dedicated host. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + listAvailableSizes(resourceGroupName, hostGroupName, hostName, options) { + const iter = this.listAvailableSizesPagingAll(resourceGroupName, hostGroupName, hostName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listAvailableSizesPagingPage(resourceGroupName, hostGroupName, hostName, options, settings); + }, + }; + } + listAvailableSizesPagingPage(resourceGroupName, hostGroupName, hostName, options, _settings) { + return tslib.__asyncGenerator(this, arguments, function* listAvailableSizesPagingPage_1() { + let result; + result = yield tslib.__await(this._listAvailableSizes(resourceGroupName, hostGroupName, hostName, options)); + yield yield tslib.__await(result.value || []); + }); + } + listAvailableSizesPagingAll(resourceGroupName, hostGroupName, hostName, options) { + return tslib.__asyncGenerator(this, arguments, function* listAvailableSizesPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listAvailableSizesPagingPage(resourceGroupName, hostGroupName, hostName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Create or update a dedicated host . + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host . + * @param parameters Parameters supplied to the Create Dedicated Host. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, hostGroupName, hostName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, hostGroupName, hostName, parameters, options }, + spec: createOrUpdateOperationSpec$g, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update a dedicated host . + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host . + * @param parameters Parameters supplied to the Create Dedicated Host. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, hostGroupName, hostName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, hostGroupName, hostName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Update a dedicated host . + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host . + * @param parameters Parameters supplied to the Update Dedicated Host operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, hostGroupName, hostName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, hostGroupName, hostName, parameters, options }, + spec: updateOperationSpec$i, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update a dedicated host . + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host . + * @param parameters Parameters supplied to the Update Dedicated Host operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, hostGroupName, hostName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, hostGroupName, hostName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Delete a dedicated host. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, hostGroupName, hostName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, hostGroupName, hostName, options }, + spec: deleteOperationSpec$j, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Delete a dedicated host. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, hostGroupName, hostName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, hostGroupName, hostName, options); + return poller.pollUntilDone(); + }); + } + /** + * Retrieves information about a dedicated host. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + get(resourceGroupName, hostGroupName, hostName, options) { + return this.client.sendOperationRequest({ resourceGroupName, hostGroupName, hostName, options }, getOperationSpec$r); + } + /** + * Lists all of the dedicated hosts in the specified dedicated host group. Use the nextLink property in + * the response to get the next page of dedicated hosts. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param options The options parameters. + */ + _listByHostGroup(resourceGroupName, hostGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, hostGroupName, options }, listByHostGroupOperationSpec); + } + /** + * Restart the dedicated host. The operation will complete successfully once the dedicated host has + * restarted and is running. To determine the health of VMs deployed on the dedicated host after the + * restart check the Resource Health Center in the Azure Portal. Please refer to + * https://docs.microsoft.com/azure/service-health/resource-health-overview for more details. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + beginRestart(resourceGroupName, hostGroupName, hostName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, hostGroupName, hostName, options }, + spec: restartOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Restart the dedicated host. The operation will complete successfully once the dedicated host has + * restarted and is running. To determine the health of VMs deployed on the dedicated host after the + * restart check the Resource Health Center in the Azure Portal. Please refer to + * https://docs.microsoft.com/azure/service-health/resource-health-overview for more details. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + beginRestartAndWait(resourceGroupName, hostGroupName, hostName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRestart(resourceGroupName, hostGroupName, hostName, options); + return poller.pollUntilDone(); + }); + } + /** + * Redeploy the dedicated host. The operation will complete successfully once the dedicated host has + * migrated to a new node and is running. To determine the health of VMs deployed on the dedicated host + * after the redeploy check the Resource Health Center in the Azure Portal. Please refer to + * https://docs.microsoft.com/azure/service-health/resource-health-overview for more details. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + beginRedeploy(resourceGroupName, hostGroupName, hostName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, hostGroupName, hostName, options }, + spec: redeployOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Redeploy the dedicated host. The operation will complete successfully once the dedicated host has + * migrated to a new node and is running. To determine the health of VMs deployed on the dedicated host + * after the redeploy check the Resource Health Center in the Azure Portal. Please refer to + * https://docs.microsoft.com/azure/service-health/resource-health-overview for more details. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + beginRedeployAndWait(resourceGroupName, hostGroupName, hostName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRedeploy(resourceGroupName, hostGroupName, hostName, options); + return poller.pollUntilDone(); + }); + } + /** + * Lists all available dedicated host sizes to which the specified dedicated host can be resized. NOTE: + * The dedicated host sizes provided can be used to only scale up the existing dedicated host. + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param hostName The name of the dedicated host. + * @param options The options parameters. + */ + _listAvailableSizes(resourceGroupName, hostGroupName, hostName, options) { + return this.client.sendOperationRequest({ resourceGroupName, hostGroupName, hostName, options }, listAvailableSizesOperationSpec); + } + /** + * ListByHostGroupNext + * @param resourceGroupName The name of the resource group. + * @param hostGroupName The name of the dedicated host group. + * @param nextLink The nextLink from the previous successful call to the ListByHostGroup method. + * @param options The options parameters. + */ + _listByHostGroupNext(resourceGroupName, hostGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, hostGroupName, nextLink, options }, listByHostGroupNextOperationSpec); + } +} +// Operation Specifications +const serializer$w = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$g = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: DedicatedHost, + }, + 201: { + bodyMapper: DedicatedHost, + }, + 202: { + bodyMapper: DedicatedHost, + }, + 204: { + bodyMapper: DedicatedHost, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters17, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + hostName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$w, +}; +const updateOperationSpec$i = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: DedicatedHost, + }, + 201: { + bodyMapper: DedicatedHost, + }, + 202: { + bodyMapper: DedicatedHost, + }, + 204: { + bodyMapper: DedicatedHost, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters18, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + hostName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$w, +}; +const deleteOperationSpec$j = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + hostName, + ], + headerParameters: [accept], + serializer: serializer$w, +}; +const getOperationSpec$r = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHost, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand2], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + hostName, + ], + headerParameters: [accept], + serializer: serializer$w, +}; +const listByHostGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHostListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + ], + headerParameters: [accept], + serializer: serializer$w, +}; +const restartOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}/restart", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName, + hostName, + ], + headerParameters: [accept], + serializer: serializer$w, +}; +const redeployOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}/redeploy", + httpMethod: "POST", + responses: { + 200: { + headersMapper: DedicatedHostsRedeployHeaders, + }, + 201: { + headersMapper: DedicatedHostsRedeployHeaders, + }, + 202: { + headersMapper: DedicatedHostsRedeployHeaders, + }, + 204: { + headersMapper: DedicatedHostsRedeployHeaders, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName1, + hostName1, + ], + headerParameters: [accept], + serializer: serializer$w, +}; +const listAvailableSizesOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}/hostSizes", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHostSizeListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + hostGroupName1, + hostName1, + ], + headerParameters: [accept], + serializer: serializer$w, +}; +const listByHostGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DedicatedHostListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + hostGroupName, + ], + headerParameters: [accept], + serializer: serializer$w, +}; + +/* + * 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 containing SshPublicKeys operations. */ +class SshPublicKeysImpl { + /** + * Initialize a new instance of the class SshPublicKeys class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all of the SSH public keys in the subscription. Use the nextLink property in the response to + * get the next page of SSH public keys. + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listBySubscriptionPagingPage(options, settings); + }, + }; + } + listBySubscriptionPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listBySubscription(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all of the SSH public keys in the specified resource group. Use the nextLink property in the + * response to get the next page of SSH public keys. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Lists all of the SSH public keys in the subscription. Use the nextLink property in the response to + * get the next page of SSH public keys. + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$1); + } + /** + * Lists all of the SSH public keys in the specified resource group. Use the nextLink property in the + * response to get the next page of SSH public keys. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$7); + } + /** + * Creates a new SSH public key resource. + * @param resourceGroupName The name of the resource group. + * @param sshPublicKeyName The name of the SSH public key. + * @param parameters Parameters supplied to create the SSH public key. + * @param options The options parameters. + */ + create(resourceGroupName, sshPublicKeyName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, sshPublicKeyName, parameters, options }, createOperationSpec$1); + } + /** + * Updates a new SSH public key resource. + * @param resourceGroupName The name of the resource group. + * @param sshPublicKeyName The name of the SSH public key. + * @param parameters Parameters supplied to update the SSH public key. + * @param options The options parameters. + */ + update(resourceGroupName, sshPublicKeyName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, sshPublicKeyName, parameters, options }, updateOperationSpec$h); + } + /** + * Delete an SSH public key. + * @param resourceGroupName The name of the resource group. + * @param sshPublicKeyName The name of the SSH public key. + * @param options The options parameters. + */ + delete(resourceGroupName, sshPublicKeyName, options) { + return this.client.sendOperationRequest({ resourceGroupName, sshPublicKeyName, options }, deleteOperationSpec$i); + } + /** + * Retrieves information about an SSH public key. + * @param resourceGroupName The name of the resource group. + * @param sshPublicKeyName The name of the SSH public key. + * @param options The options parameters. + */ + get(resourceGroupName, sshPublicKeyName, options) { + return this.client.sendOperationRequest({ resourceGroupName, sshPublicKeyName, options }, getOperationSpec$q); + } + /** + * Generates and returns a public/private key pair and populates the SSH public key resource with the + * public key. The length of the key will be 3072 bits. This operation can only be performed once per + * SSH public key resource. + * @param resourceGroupName The name of the resource group. + * @param sshPublicKeyName The name of the SSH public key. + * @param options The options parameters. + */ + generateKeyPair(resourceGroupName, sshPublicKeyName, options) { + return this.client.sendOperationRequest({ resourceGroupName, sshPublicKeyName, options }, generateKeyPairOperationSpec); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$1); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$7); + } +} +// Operation Specifications +const serializer$v = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listBySubscriptionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/sshPublicKeys", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SshPublicKeysGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$v, +}; +const listByResourceGroupOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SshPublicKeysGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$v, +}; +const createOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: SshPublicKeyResource, + }, + 201: { + bodyMapper: SshPublicKeyResource, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters19, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + sshPublicKeyName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$v, +}; +const updateOperationSpec$h = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: SshPublicKeyResource, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters20, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + sshPublicKeyName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$v, +}; +const deleteOperationSpec$i = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + sshPublicKeyName, + ], + headerParameters: [accept], + serializer: serializer$v, +}; +const getOperationSpec$q = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SshPublicKeyResource, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + sshPublicKeyName, + ], + headerParameters: [accept], + serializer: serializer$v, +}; +const generateKeyPairOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}/generateKeyPair", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SshPublicKeyGenerateKeyPairResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters21, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + sshPublicKeyName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$v, +}; +const listBySubscriptionNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SshPublicKeysGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$v, +}; +const listByResourceGroupNextOperationSpec$7 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SshPublicKeysGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$v, +}; + +/* + * 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 containing Images operations. */ +class ImagesImpl { + /** + * Initialize a new instance of the class Images class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the list of images under a resource group. Use nextLink property in the response to get the + * next page of Images. Do this till nextLink is null to fetch all the Images. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets the list of Images in the subscription. Use nextLink property in the response to get the next + * page of Images. Do this till nextLink is null to fetch all the Images. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + }, + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Create or update an image. + * @param resourceGroupName The name of the resource group. + * @param imageName The name of the image. + * @param parameters Parameters supplied to the Create Image operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, imageName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, imageName, parameters, options }, + spec: createOrUpdateOperationSpec$f, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update an image. + * @param resourceGroupName The name of the resource group. + * @param imageName The name of the image. + * @param parameters Parameters supplied to the Create Image operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, imageName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, imageName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Update an image. + * @param resourceGroupName The name of the resource group. + * @param imageName The name of the image. + * @param parameters Parameters supplied to the Update Image operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, imageName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, imageName, parameters, options }, + spec: updateOperationSpec$g, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update an image. + * @param resourceGroupName The name of the resource group. + * @param imageName The name of the image. + * @param parameters Parameters supplied to the Update Image operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, imageName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, imageName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Deletes an Image. + * @param resourceGroupName The name of the resource group. + * @param imageName The name of the image. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, imageName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, imageName, options }, + spec: deleteOperationSpec$h, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes an Image. + * @param resourceGroupName The name of the resource group. + * @param imageName The name of the image. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, imageName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, imageName, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets an image. + * @param resourceGroupName The name of the resource group. + * @param imageName The name of the image. + * @param options The options parameters. + */ + get(resourceGroupName, imageName, options) { + return this.client.sendOperationRequest({ resourceGroupName, imageName, options }, getOperationSpec$p); + } + /** + * Gets the list of images under a resource group. Use nextLink property in the response to get the + * next page of Images. Do this till nextLink is null to fetch all the Images. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$6); + } + /** + * Gets the list of Images in the subscription. Use nextLink property in the response to get the next + * page of Images. Do this till nextLink is null to fetch all the Images. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$h); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$6); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$h); + } +} +// Operation Specifications +const serializer$u = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$f = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Image, + }, + 201: { + bodyMapper: Image, + }, + 202: { + bodyMapper: Image, + }, + 204: { + bodyMapper: Image, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters22, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + imageName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$u, +}; +const updateOperationSpec$g = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: Image, + }, + 201: { + bodyMapper: Image, + }, + 202: { + bodyMapper: Image, + }, + 204: { + bodyMapper: Image, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters23, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + imageName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$u, +}; +const deleteOperationSpec$h = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + imageName, + ], + headerParameters: [accept], + serializer: serializer$u, +}; +const getOperationSpec$p = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Image, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + imageName, + ], + headerParameters: [accept], + serializer: serializer$u, +}; +const listByResourceGroupOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ImageListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$u, +}; +const listOperationSpec$h = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/images", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ImageListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$u, +}; +const listByResourceGroupNextOperationSpec$6 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ImageListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$u, +}; +const listNextOperationSpec$h = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ImageListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$u, +}; + +/* + * 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 containing RestorePointCollections operations. */ +class RestorePointCollectionsImpl { + /** + * Initialize a new instance of the class RestorePointCollections class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the list of restore point collections in a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + list(resourceGroupName, options) { + const iter = this.listPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets the list of restore point collections in the subscription. Use nextLink property in the + * response to get the next page of restore point collections. Do this till nextLink is not null to + * fetch all the restore point collections. + * @param options The options parameters. + */ + listAll(options) { + const iter = this.listAllPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listAllPagingPage(options, settings); + }, + }; + } + listAllPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listAll(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listAllNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listAllPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listAllPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * The operation to create or update the restore point collection. Please refer to + * https://aka.ms/RestorePoints for more details. When updating a restore point collection, only tags + * may be modified. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection. + * @param parameters Parameters supplied to the Create or Update restore point collection operation. + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, restorePointCollectionName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, restorePointCollectionName, parameters, options }, createOrUpdateOperationSpec$e); + } + /** + * The operation to update the restore point collection. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection. + * @param parameters Parameters supplied to the Update restore point collection operation. + * @param options The options parameters. + */ + update(resourceGroupName, restorePointCollectionName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, restorePointCollectionName, parameters, options }, updateOperationSpec$f); + } + /** + * The operation to delete the restore point collection. This operation will also delete all the + * contained restore points. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the Restore Point Collection. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, restorePointCollectionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, restorePointCollectionName, options }, + spec: deleteOperationSpec$g, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete the restore point collection. This operation will also delete all the + * contained restore points. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the Restore Point Collection. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, restorePointCollectionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, restorePointCollectionName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to get the restore point collection. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection. + * @param options The options parameters. + */ + get(resourceGroupName, restorePointCollectionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, restorePointCollectionName, options }, getOperationSpec$o); + } + /** + * Gets the list of restore point collections in a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _list(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listOperationSpec$g); + } + /** + * Gets the list of restore point collections in the subscription. Use nextLink property in the + * response to get the next page of restore point collections. Do this till nextLink is not null to + * fetch all the restore point collections. + * @param options The options parameters. + */ + _listAll(options) { + return this.client.sendOperationRequest({ options }, listAllOperationSpec$1); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listNextOperationSpec$g); + } + /** + * ListAllNext + * @param nextLink The nextLink from the previous successful call to the ListAll method. + * @param options The options parameters. + */ + _listAllNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listAllNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$t = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$e = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: RestorePointCollection, + }, + 201: { + bodyMapper: RestorePointCollection, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters24, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$t, +}; +const updateOperationSpec$f = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: RestorePointCollection, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters25, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$t, +}; +const deleteOperationSpec$g = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + ], + headerParameters: [accept], + serializer: serializer$t, +}; +const getOperationSpec$o = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RestorePointCollection, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + ], + headerParameters: [accept], + serializer: serializer$t, +}; +const listOperationSpec$g = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RestorePointCollectionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$t, +}; +const listAllOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/restorePointCollections", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RestorePointCollectionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$t, +}; +const listNextOperationSpec$g = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RestorePointCollectionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$t, +}; +const listAllNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RestorePointCollectionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$t, +}; + +/* + * 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 containing RestorePoints operations. */ +class RestorePointsImpl { + /** + * Initialize a new instance of the class RestorePoints class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * The operation to create the restore point. Updating properties of an existing restore point is not + * allowed + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection. + * @param restorePointName The name of the restore point. + * @param parameters Parameters supplied to the Create restore point operation. + * @param options The options parameters. + */ + beginCreate(resourceGroupName, restorePointCollectionName, restorePointName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + restorePointCollectionName, + restorePointName, + parameters, + options, + }, + spec: createOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to create the restore point. Updating properties of an existing restore point is not + * allowed + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection. + * @param restorePointName The name of the restore point. + * @param parameters Parameters supplied to the Create restore point operation. + * @param options The options parameters. + */ + beginCreateAndWait(resourceGroupName, restorePointCollectionName, restorePointName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreate(resourceGroupName, restorePointCollectionName, restorePointName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to delete the restore point. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the Restore Point Collection. + * @param restorePointName The name of the restore point. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, restorePointCollectionName, restorePointName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + restorePointCollectionName, + restorePointName, + options, + }, + spec: deleteOperationSpec$f, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete the restore point. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the Restore Point Collection. + * @param restorePointName The name of the restore point. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, restorePointCollectionName, restorePointName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, restorePointCollectionName, restorePointName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to get the restore point. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection. + * @param restorePointName The name of the restore point. + * @param options The options parameters. + */ + get(resourceGroupName, restorePointCollectionName, restorePointName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + restorePointCollectionName, + restorePointName, + options, + }, getOperationSpec$n); + } +} +// Operation Specifications +const serializer$s = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: RestorePoint, + }, + 201: { + bodyMapper: RestorePoint, + }, + 202: { + bodyMapper: RestorePoint, + }, + 204: { + bodyMapper: RestorePoint, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters26, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + restorePointName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$s, +}; +const deleteOperationSpec$f = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + restorePointName, + ], + headerParameters: [accept], + serializer: serializer$s, +}; +const getOperationSpec$n = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RestorePoint, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand6], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + restorePointName, + ], + headerParameters: [accept], + serializer: serializer$s, +}; + +/* + * 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 containing CapacityReservationGroups operations. */ +class CapacityReservationGroupsImpl { + /** + * Initialize a new instance of the class CapacityReservationGroups class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all of the capacity reservation groups in the specified resource group. Use the nextLink + * property in the response to get the next page of capacity reservation groups. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all of the capacity reservation groups in the subscription. Use the nextLink property in the + * response to get the next page of capacity reservation groups. + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listBySubscriptionPagingPage(options, settings); + }, + }; + } + listBySubscriptionPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listBySubscription(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * The operation to create or update a capacity reservation group. When updating a capacity reservation + * group, only tags and sharing profile may be modified. Please refer to + * https://aka.ms/CapacityReservation for more details. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param parameters Parameters supplied to the Create capacity reservation Group. + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, capacityReservationGroupName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, capacityReservationGroupName, parameters, options }, createOrUpdateOperationSpec$d); + } + /** + * The operation to update a capacity reservation group. When updating a capacity reservation group, + * only tags and sharing profile may be modified. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param parameters Parameters supplied to the Update capacity reservation Group operation. + * @param options The options parameters. + */ + update(resourceGroupName, capacityReservationGroupName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, capacityReservationGroupName, parameters, options }, updateOperationSpec$e); + } + /** + * The operation to delete a capacity reservation group. This operation is allowed only if all the + * associated resources are disassociated from the reservation group and all capacity reservations + * under the reservation group have also been deleted. Please refer to + * https://aka.ms/CapacityReservation for more details. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param options The options parameters. + */ + delete(resourceGroupName, capacityReservationGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, capacityReservationGroupName, options }, deleteOperationSpec$e); + } + /** + * The operation that retrieves information about a capacity reservation group. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param options The options parameters. + */ + get(resourceGroupName, capacityReservationGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, capacityReservationGroupName, options }, getOperationSpec$m); + } + /** + * Lists all of the capacity reservation groups in the specified resource group. Use the nextLink + * property in the response to get the next page of capacity reservation groups. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$5); + } + /** + * Lists all of the capacity reservation groups in the subscription. Use the nextLink property in the + * response to get the next page of capacity reservation groups. + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$5); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec); + } +} +// Operation Specifications +const serializer$r = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$d = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: CapacityReservationGroup, + }, + 201: { + bodyMapper: CapacityReservationGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters27, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$r, +}; +const updateOperationSpec$e = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: CapacityReservationGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters28, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$r, +}; +const deleteOperationSpec$e = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + ], + headerParameters: [accept], + serializer: serializer$r, +}; +const getOperationSpec$m = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CapacityReservationGroup, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand7], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + ], + headerParameters: [accept], + serializer: serializer$r, +}; +const listByResourceGroupOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CapacityReservationGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand8], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$r, +}; +const listBySubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/capacityReservationGroups", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CapacityReservationGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion, + expand8, + resourceIdsOnly, + ], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$r, +}; +const listByResourceGroupNextOperationSpec$5 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CapacityReservationGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$r, +}; +const listBySubscriptionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CapacityReservationGroupListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$r, +}; + +/* + * 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 containing CapacityReservations operations. */ +class CapacityReservationsImpl { + /** + * Initialize a new instance of the class CapacityReservations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all of the capacity reservations in the specified capacity reservation group. Use the nextLink + * property in the response to get the next page of capacity reservations. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param options The options parameters. + */ + listByCapacityReservationGroup(resourceGroupName, capacityReservationGroupName, options) { + const iter = this.listByCapacityReservationGroupPagingAll(resourceGroupName, capacityReservationGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByCapacityReservationGroupPagingPage(resourceGroupName, capacityReservationGroupName, options, settings); + }, + }; + } + listByCapacityReservationGroupPagingPage(resourceGroupName, capacityReservationGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByCapacityReservationGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByCapacityReservationGroup(resourceGroupName, capacityReservationGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByCapacityReservationGroupNext(resourceGroupName, capacityReservationGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByCapacityReservationGroupPagingAll(resourceGroupName, capacityReservationGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByCapacityReservationGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByCapacityReservationGroupPagingPage(resourceGroupName, capacityReservationGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * The operation to create or update a capacity reservation. Please note some properties can be set + * only during capacity reservation creation. Please refer to https://aka.ms/CapacityReservation for + * more details. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param capacityReservationName The name of the capacity reservation. + * @param parameters Parameters supplied to the Create capacity reservation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + capacityReservationGroupName, + capacityReservationName, + parameters, + options, + }, + spec: createOrUpdateOperationSpec$c, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to create or update a capacity reservation. Please note some properties can be set + * only during capacity reservation creation. Please refer to https://aka.ms/CapacityReservation for + * more details. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param capacityReservationName The name of the capacity reservation. + * @param parameters Parameters supplied to the Create capacity reservation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to update a capacity reservation. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param capacityReservationName The name of the capacity reservation. + * @param parameters Parameters supplied to the Update capacity reservation operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + capacityReservationGroupName, + capacityReservationName, + parameters, + options, + }, + spec: updateOperationSpec$d, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to update a capacity reservation. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param capacityReservationName The name of the capacity reservation. + * @param parameters Parameters supplied to the Update capacity reservation operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to delete a capacity reservation. This operation is allowed only when all the + * associated resources are disassociated from the capacity reservation. Please refer to + * https://aka.ms/CapacityReservation for more details. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param capacityReservationName The name of the capacity reservation. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, capacityReservationGroupName, capacityReservationName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + capacityReservationGroupName, + capacityReservationName, + options, + }, + spec: deleteOperationSpec$d, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete a capacity reservation. This operation is allowed only when all the + * associated resources are disassociated from the capacity reservation. Please refer to + * https://aka.ms/CapacityReservation for more details. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param capacityReservationName The name of the capacity reservation. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, capacityReservationGroupName, capacityReservationName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, capacityReservationGroupName, capacityReservationName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation that retrieves information about the capacity reservation. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param capacityReservationName The name of the capacity reservation. + * @param options The options parameters. + */ + get(resourceGroupName, capacityReservationGroupName, capacityReservationName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + capacityReservationGroupName, + capacityReservationName, + options, + }, getOperationSpec$l); + } + /** + * Lists all of the capacity reservations in the specified capacity reservation group. Use the nextLink + * property in the response to get the next page of capacity reservations. + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param options The options parameters. + */ + _listByCapacityReservationGroup(resourceGroupName, capacityReservationGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, capacityReservationGroupName, options }, listByCapacityReservationGroupOperationSpec); + } + /** + * ListByCapacityReservationGroupNext + * @param resourceGroupName The name of the resource group. + * @param capacityReservationGroupName The name of the capacity reservation group. + * @param nextLink The nextLink from the previous successful call to the ListByCapacityReservationGroup + * method. + * @param options The options parameters. + */ + _listByCapacityReservationGroupNext(resourceGroupName, capacityReservationGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, capacityReservationGroupName, nextLink, options }, listByCapacityReservationGroupNextOperationSpec); + } +} +// Operation Specifications +const serializer$q = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$c = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: CapacityReservation, + }, + 201: { + bodyMapper: CapacityReservation, + }, + 202: { + bodyMapper: CapacityReservation, + }, + 204: { + bodyMapper: CapacityReservation, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters29, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + capacityReservationName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$q, +}; +const updateOperationSpec$d = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: CapacityReservation, + }, + 201: { + bodyMapper: CapacityReservation, + }, + 202: { + bodyMapper: CapacityReservation, + }, + 204: { + bodyMapper: CapacityReservation, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters30, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + capacityReservationName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$q, +}; +const deleteOperationSpec$d = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + capacityReservationName, + ], + headerParameters: [accept], + serializer: serializer$q, +}; +const getOperationSpec$l = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CapacityReservation, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + capacityReservationName, + ], + headerParameters: [accept], + serializer: serializer$q, +}; +const listByCapacityReservationGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CapacityReservationListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + capacityReservationGroupName, + ], + headerParameters: [accept], + serializer: serializer$q, +}; +const listByCapacityReservationGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CapacityReservationListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + capacityReservationGroupName, + ], + headerParameters: [accept], + serializer: serializer$q, +}; + +/* + * 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 containing LogAnalytics operations. */ +class LogAnalyticsImpl { + /** + * Initialize a new instance of the class LogAnalytics class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Export logs that show Api requests made by this subscription in the given time window to show + * throttling activities. + * @param location The location upon which virtual-machine-sizes is queried. + * @param parameters Parameters supplied to the LogAnalytics getRequestRateByInterval Api. + * @param options The options parameters. + */ + beginExportRequestRateByInterval(location, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { location, parameters, options }, + spec: exportRequestRateByIntervalOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "azure-async-operation", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Export logs that show Api requests made by this subscription in the given time window to show + * throttling activities. + * @param location The location upon which virtual-machine-sizes is queried. + * @param parameters Parameters supplied to the LogAnalytics getRequestRateByInterval Api. + * @param options The options parameters. + */ + beginExportRequestRateByIntervalAndWait(location, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginExportRequestRateByInterval(location, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Export logs that show total throttled Api requests for this subscription in the given time window. + * @param location The location upon which virtual-machine-sizes is queried. + * @param parameters Parameters supplied to the LogAnalytics getThrottledRequests Api. + * @param options The options parameters. + */ + beginExportThrottledRequests(location, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { location, parameters, options }, + spec: exportThrottledRequestsOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "azure-async-operation", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Export logs that show total throttled Api requests for this subscription in the given time window. + * @param location The location upon which virtual-machine-sizes is queried. + * @param parameters Parameters supplied to the LogAnalytics getThrottledRequests Api. + * @param options The options parameters. + */ + beginExportThrottledRequestsAndWait(location, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginExportThrottledRequests(location, parameters, options); + return poller.pollUntilDone(); + }); + } +} +// Operation Specifications +const serializer$p = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const exportRequestRateByIntervalOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: LogAnalyticsOperationResult, + }, + 201: { + bodyMapper: LogAnalyticsOperationResult, + }, + 202: { + bodyMapper: LogAnalyticsOperationResult, + }, + 204: { + bodyMapper: LogAnalyticsOperationResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters31, + queryParameters: [apiVersion], + urlParameters: [ + $host, + location, + subscriptionId, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$p, +}; +const exportThrottledRequestsOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: LogAnalyticsOperationResult, + }, + 201: { + bodyMapper: LogAnalyticsOperationResult, + }, + 202: { + bodyMapper: LogAnalyticsOperationResult, + }, + 204: { + bodyMapper: LogAnalyticsOperationResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters32, + queryParameters: [apiVersion], + urlParameters: [ + $host, + location, + subscriptionId, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$p, +}; + +/* + * 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 containing VirtualMachineRunCommands operations. */ +class VirtualMachineRunCommandsImpl { + /** + * Initialize a new instance of the class VirtualMachineRunCommands class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all available run commands for a subscription in a location. + * @param location The location upon which run commands is queried. + * @param options The options parameters. + */ + list(location, options) { + const iter = this.listPagingAll(location, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(location, options, settings); + }, + }; + } + listPagingPage(location, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(location, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(location, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(location, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(location, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * The operation to get all run commands of a Virtual Machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine containing the run command. + * @param options The options parameters. + */ + listByVirtualMachine(resourceGroupName, vmName, options) { + const iter = this.listByVirtualMachinePagingAll(resourceGroupName, vmName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByVirtualMachinePagingPage(resourceGroupName, vmName, options, settings); + }, + }; + } + listByVirtualMachinePagingPage(resourceGroupName, vmName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByVirtualMachinePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByVirtualMachine(resourceGroupName, vmName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByVirtualMachineNext(resourceGroupName, vmName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByVirtualMachinePagingAll(resourceGroupName, vmName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByVirtualMachinePagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByVirtualMachinePagingPage(resourceGroupName, vmName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Lists all available run commands for a subscription in a location. + * @param location The location upon which run commands is queried. + * @param options The options parameters. + */ + _list(location, options) { + return this.client.sendOperationRequest({ location, options }, listOperationSpec$f); + } + /** + * Gets specific run command for a subscription in a location. + * @param location The location upon which run commands is queried. + * @param commandId The command id. + * @param options The options parameters. + */ + get(location, commandId, options) { + return this.client.sendOperationRequest({ location, commandId, options }, getOperationSpec$k); + } + /** + * The operation to create or update the run command. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the run command should be created or updated. + * @param runCommandName The name of the virtual machine run command. + * @param runCommand Parameters supplied to the Create Virtual Machine RunCommand operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, vmName, runCommandName, runCommand, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, runCommandName, runCommand, options }, + spec: createOrUpdateOperationSpec$b, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to create or update the run command. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the run command should be created or updated. + * @param runCommandName The name of the virtual machine run command. + * @param runCommand Parameters supplied to the Create Virtual Machine RunCommand operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, vmName, runCommandName, runCommand, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, vmName, runCommandName, runCommand, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to update the run command. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the run command should be updated. + * @param runCommandName The name of the virtual machine run command. + * @param runCommand Parameters supplied to the Update Virtual Machine RunCommand operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, vmName, runCommandName, runCommand, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, runCommandName, runCommand, options }, + spec: updateOperationSpec$c, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to update the run command. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the run command should be updated. + * @param runCommandName The name of the virtual machine run command. + * @param runCommand Parameters supplied to the Update Virtual Machine RunCommand operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, vmName, runCommandName, runCommand, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, vmName, runCommandName, runCommand, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to delete the run command. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the run command should be deleted. + * @param runCommandName The name of the virtual machine run command. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, vmName, runCommandName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, vmName, runCommandName, options }, + spec: deleteOperationSpec$c, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete the run command. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine where the run command should be deleted. + * @param runCommandName The name of the virtual machine run command. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, vmName, runCommandName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, vmName, runCommandName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to get the run command. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine containing the run command. + * @param runCommandName The name of the virtual machine run command. + * @param options The options parameters. + */ + getByVirtualMachine(resourceGroupName, vmName, runCommandName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, runCommandName, options }, getByVirtualMachineOperationSpec); + } + /** + * The operation to get all run commands of a Virtual Machine. + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine containing the run command. + * @param options The options parameters. + */ + _listByVirtualMachine(resourceGroupName, vmName, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, options }, listByVirtualMachineOperationSpec); + } + /** + * ListNext + * @param location The location upon which run commands is queried. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(location, nextLink, options) { + return this.client.sendOperationRequest({ location, nextLink, options }, listNextOperationSpec$f); + } + /** + * ListByVirtualMachineNext + * @param resourceGroupName The name of the resource group. + * @param vmName The name of the virtual machine containing the run command. + * @param nextLink The nextLink from the previous successful call to the ListByVirtualMachine method. + * @param options The options parameters. + */ + _listByVirtualMachineNext(resourceGroupName, vmName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmName, nextLink, options }, listByVirtualMachineNextOperationSpec); + } +} +// Operation Specifications +const serializer$o = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$f = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RunCommandListResult, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + location, + subscriptionId, + ], + headerParameters: [accept1], + serializer: serializer$o, +}; +const getOperationSpec$k = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RunCommandDocument, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + location, + subscriptionId, + commandId, + ], + headerParameters: [accept1], + serializer: serializer$o, +}; +const createOrUpdateOperationSpec$b = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommand, + }, + 201: { + bodyMapper: VirtualMachineRunCommand, + }, + 202: { + bodyMapper: VirtualMachineRunCommand, + }, + 204: { + bodyMapper: VirtualMachineRunCommand, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: runCommand, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + runCommandName, + ], + headerParameters: [contentType, accept1], + mediaType: "json", + serializer: serializer$o, +}; +const updateOperationSpec$c = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommand, + }, + 201: { + bodyMapper: VirtualMachineRunCommand, + }, + 202: { + bodyMapper: VirtualMachineRunCommand, + }, + 204: { + bodyMapper: VirtualMachineRunCommand, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: runCommand1, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + runCommandName, + ], + headerParameters: [contentType, accept1], + mediaType: "json", + serializer: serializer$o, +}; +const deleteOperationSpec$c = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + runCommandName, + ], + headerParameters: [accept1], + serializer: serializer$o, +}; +const getByVirtualMachineOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommand, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + runCommandName, + ], + headerParameters: [accept1], + serializer: serializer$o, +}; +const listByVirtualMachineOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommandsListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmName, + ], + headerParameters: [accept1], + serializer: serializer$o, +}; +const listNextOperationSpec$f = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RunCommandListResult, + }, + }, + urlParameters: [ + $host, + location, + subscriptionId, + nextLink, + ], + headerParameters: [accept1], + serializer: serializer$o, +}; +const listByVirtualMachineNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommandsListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + vmName, + ], + headerParameters: [accept1], + serializer: serializer$o, +}; + +/* + * 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 containing VirtualMachineScaleSetVMRunCommands operations. */ +class VirtualMachineScaleSetVMRunCommandsImpl { + /** + * Initialize a new instance of the class VirtualMachineScaleSetVMRunCommands class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * The operation to get all run commands of an instance in Virtual Machine Scaleset. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + list(resourceGroupName, vmScaleSetName, instanceId, options) { + const iter = this.listPagingAll(resourceGroupName, vmScaleSetName, instanceId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, vmScaleSetName, instanceId, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, vmScaleSetName, instanceId, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, vmScaleSetName, instanceId, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, vmScaleSetName, instanceId, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, vmScaleSetName, instanceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, vmScaleSetName, instanceId, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * The operation to create or update the VMSS VM run command. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param runCommandName The name of the virtual machine run command. + * @param runCommand Parameters supplied to the Create Virtual Machine RunCommand operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, vmScaleSetName, instanceId, runCommandName, runCommand, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + runCommandName, + runCommand, + options, + }, + spec: createOrUpdateOperationSpec$a, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to create or update the VMSS VM run command. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param runCommandName The name of the virtual machine run command. + * @param runCommand Parameters supplied to the Create Virtual Machine RunCommand operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, vmScaleSetName, instanceId, runCommandName, runCommand, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, vmScaleSetName, instanceId, runCommandName, runCommand, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to update the VMSS VM run command. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param runCommandName The name of the virtual machine run command. + * @param runCommand Parameters supplied to the Update Virtual Machine RunCommand operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, vmScaleSetName, instanceId, runCommandName, runCommand, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + runCommandName, + runCommand, + options, + }, + spec: updateOperationSpec$b, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to update the VMSS VM run command. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param runCommandName The name of the virtual machine run command. + * @param runCommand Parameters supplied to the Update Virtual Machine RunCommand operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, vmScaleSetName, instanceId, runCommandName, runCommand, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, vmScaleSetName, instanceId, runCommandName, runCommand, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to delete the VMSS VM run command. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param runCommandName The name of the virtual machine run command. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, vmScaleSetName, instanceId, runCommandName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + vmScaleSetName, + instanceId, + runCommandName, + options, + }, + spec: deleteOperationSpec$b, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The operation to delete the VMSS VM run command. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param runCommandName The name of the virtual machine run command. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, vmScaleSetName, instanceId, runCommandName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, vmScaleSetName, instanceId, runCommandName, options); + return poller.pollUntilDone(); + }); + } + /** + * The operation to get the VMSS VM run command. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param runCommandName The name of the virtual machine run command. + * @param options The options parameters. + */ + get(resourceGroupName, vmScaleSetName, instanceId, runCommandName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + vmScaleSetName, + instanceId, + runCommandName, + options, + }, getOperationSpec$j); + } + /** + * The operation to get all run commands of an instance in Virtual Machine Scaleset. + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param options The options parameters. + */ + _list(resourceGroupName, vmScaleSetName, instanceId, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, instanceId, options }, listOperationSpec$e); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group. + * @param vmScaleSetName The name of the VM scale set. + * @param instanceId The instance ID of the virtual machine. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, vmScaleSetName, instanceId, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, vmScaleSetName, instanceId, nextLink, options }, listNextOperationSpec$e); + } +} +// Operation Specifications +const serializer$n = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$a = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommand, + }, + 201: { + bodyMapper: VirtualMachineRunCommand, + }, + 202: { + bodyMapper: VirtualMachineRunCommand, + }, + 204: { + bodyMapper: VirtualMachineRunCommand, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: runCommand, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + runCommandName, + ], + headerParameters: [contentType, accept1], + mediaType: "json", + serializer: serializer$n, +}; +const updateOperationSpec$b = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommand, + }, + 201: { + bodyMapper: VirtualMachineRunCommand, + }, + 202: { + bodyMapper: VirtualMachineRunCommand, + }, + 204: { + bodyMapper: VirtualMachineRunCommand, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: runCommand1, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + runCommandName, + ], + headerParameters: [contentType, accept1], + mediaType: "json", + serializer: serializer$n, +}; +const deleteOperationSpec$b = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + runCommandName, + ], + headerParameters: [accept1], + serializer: serializer$n, +}; +const getOperationSpec$j = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommand, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + runCommandName, + ], + headerParameters: [accept1], + serializer: serializer$n, +}; +const listOperationSpec$e = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommandsListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion, expand1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept1], + serializer: serializer$n, +}; +const listNextOperationSpec$e = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: VirtualMachineRunCommandsListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + vmScaleSetName, + instanceId, + ], + headerParameters: [accept1], + serializer: serializer$n, +}; + +/* + * 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 containing Disks operations. */ +class DisksImpl { + /** + * Initialize a new instance of the class Disks class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all the disks under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all the disks under a subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + }, + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Creates or updates a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param disk Disk object supplied in the body of the Put disk operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, diskName, disk, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskName, disk, options }, + spec: createOrUpdateOperationSpec$9, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Creates or updates a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param disk Disk object supplied in the body of the Put disk operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, diskName, disk, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, diskName, disk, options); + return poller.pollUntilDone(); + }); + } + /** + * Updates (patches) a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param disk Disk object supplied in the body of the Patch disk operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, diskName, disk, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskName, disk, options }, + spec: updateOperationSpec$a, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Updates (patches) a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param disk Disk object supplied in the body of the Patch disk operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, diskName, disk, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, diskName, disk, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets information about a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param options The options parameters. + */ + get(resourceGroupName, diskName, options) { + return this.client.sendOperationRequest({ resourceGroupName, diskName, options }, getOperationSpec$i); + } + /** + * Deletes a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, diskName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskName, options }, + spec: deleteOperationSpec$a, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, diskName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, diskName, options); + return poller.pollUntilDone(); + }); + } + /** + * Lists all the disks under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$4); + } + /** + * Lists all the disks under a subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$d); + } + /** + * Grants access to a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param grantAccessData Access data object supplied in the body of the get disk access operation. + * @param options The options parameters. + */ + beginGrantAccess(resourceGroupName, diskName, grantAccessData, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskName, grantAccessData, options }, + spec: grantAccessOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Grants access to a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param grantAccessData Access data object supplied in the body of the get disk access operation. + * @param options The options parameters. + */ + beginGrantAccessAndWait(resourceGroupName, diskName, grantAccessData, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginGrantAccess(resourceGroupName, diskName, grantAccessData, options); + return poller.pollUntilDone(); + }); + } + /** + * Revokes access to a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param options The options parameters. + */ + beginRevokeAccess(resourceGroupName, diskName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskName, options }, + spec: revokeAccessOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Revokes access to a disk. + * @param resourceGroupName The name of the resource group. + * @param diskName The name of the managed disk that is being created. The name can't be changed after + * the disk is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name + * length is 80 characters. + * @param options The options parameters. + */ + beginRevokeAccessAndWait(resourceGroupName, diskName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRevokeAccess(resourceGroupName, diskName, options); + return poller.pollUntilDone(); + }); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$4); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$d); + } +} +// Operation Specifications +const serializer$m = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$9 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Disk, + }, + 201: { + bodyMapper: Disk, + }, + 202: { + bodyMapper: Disk, + }, + 204: { + bodyMapper: Disk, + }, + }, + requestBody: disk, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$m, +}; +const updateOperationSpec$a = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: Disk, + }, + 201: { + bodyMapper: Disk, + }, + 202: { + bodyMapper: Disk, + }, + 204: { + bodyMapper: Disk, + }, + }, + requestBody: disk1, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$m, +}; +const getOperationSpec$i = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Disk, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskName, + ], + headerParameters: [accept], + serializer: serializer$m, +}; +const deleteOperationSpec$a = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", + httpMethod: "DELETE", + responses: { 200: {}, 201: {}, 202: {}, 204: {} }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskName, + ], + serializer: serializer$m, +}; +const listByResourceGroupOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskList, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$m, +}; +const listOperationSpec$d = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/disks", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskList, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$m, +}; +const grantAccessOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: AccessUri, + }, + 201: { + bodyMapper: AccessUri, + }, + 202: { + bodyMapper: AccessUri, + }, + 204: { + bodyMapper: AccessUri, + }, + }, + requestBody: grantAccessData, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$m, +}; +const revokeAccessOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", + httpMethod: "POST", + responses: { 200: {}, 201: {}, 202: {}, 204: {} }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskName, + ], + serializer: serializer$m, +}; +const listByResourceGroupNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskList, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$m, +}; +const listNextOperationSpec$d = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskList, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$m, +}; + +/* + * 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 containing DiskAccesses operations. */ +class DiskAccessesImpl { + /** + * Initialize a new instance of the class DiskAccesses class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all the disk access resources under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all the disk access resources under a subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + }, + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * List information about private endpoint connections under a disk access resource + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + listPrivateEndpointConnections(resourceGroupName, diskAccessName, options) { + const iter = this.listPrivateEndpointConnectionsPagingAll(resourceGroupName, diskAccessName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPrivateEndpointConnectionsPagingPage(resourceGroupName, diskAccessName, options, settings); + }, + }; + } + listPrivateEndpointConnectionsPagingPage(resourceGroupName, diskAccessName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPrivateEndpointConnectionsPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listPrivateEndpointConnections(resourceGroupName, diskAccessName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listPrivateEndpointConnectionsNext(resourceGroupName, diskAccessName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPrivateEndpointConnectionsPagingAll(resourceGroupName, diskAccessName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPrivateEndpointConnectionsPagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPrivateEndpointConnectionsPagingPage(resourceGroupName, diskAccessName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Creates or updates a disk access resource + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param diskAccess disk access object supplied in the body of the Put disk access operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, diskAccessName, diskAccess, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskAccessName, diskAccess, options }, + spec: createOrUpdateOperationSpec$8, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Creates or updates a disk access resource + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param diskAccess disk access object supplied in the body of the Put disk access operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, diskAccessName, diskAccess, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, diskAccessName, diskAccess, options); + return poller.pollUntilDone(); + }); + } + /** + * Updates (patches) a disk access resource. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param diskAccess disk access object supplied in the body of the Patch disk access operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, diskAccessName, diskAccess, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskAccessName, diskAccess, options }, + spec: updateOperationSpec$9, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Updates (patches) a disk access resource. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param diskAccess disk access object supplied in the body of the Patch disk access operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, diskAccessName, diskAccess, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, diskAccessName, diskAccess, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets information about a disk access resource. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + get(resourceGroupName, diskAccessName, options) { + return this.client.sendOperationRequest({ resourceGroupName, diskAccessName, options }, getOperationSpec$h); + } + /** + * Deletes a disk access resource. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, diskAccessName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskAccessName, options }, + spec: deleteOperationSpec$9, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a disk access resource. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, diskAccessName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, diskAccessName, options); + return poller.pollUntilDone(); + }); + } + /** + * Lists all the disk access resources under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$3); + } + /** + * Lists all the disk access resources under a subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$c); + } + /** + * Gets the private link resources possible under disk access resource + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + getPrivateLinkResources(resourceGroupName, diskAccessName, options) { + return this.client.sendOperationRequest({ resourceGroupName, diskAccessName, options }, getPrivateLinkResourcesOperationSpec); + } + /** + * Approve or reject a private endpoint connection under disk access resource, this can't be used to + * create a new private endpoint connection. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param privateEndpointConnectionName The name of the private endpoint connection. + * @param privateEndpointConnection private endpoint connection object supplied in the body of the Put + * private endpoint connection operation. + * @param options The options parameters. + */ + beginUpdateAPrivateEndpointConnection(resourceGroupName, diskAccessName, privateEndpointConnectionName, privateEndpointConnection, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + diskAccessName, + privateEndpointConnectionName, + privateEndpointConnection, + options, + }, + spec: updateAPrivateEndpointConnectionOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Approve or reject a private endpoint connection under disk access resource, this can't be used to + * create a new private endpoint connection. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param privateEndpointConnectionName The name of the private endpoint connection. + * @param privateEndpointConnection private endpoint connection object supplied in the body of the Put + * private endpoint connection operation. + * @param options The options parameters. + */ + beginUpdateAPrivateEndpointConnectionAndWait(resourceGroupName, diskAccessName, privateEndpointConnectionName, privateEndpointConnection, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdateAPrivateEndpointConnection(resourceGroupName, diskAccessName, privateEndpointConnectionName, privateEndpointConnection, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets information about a private endpoint connection under a disk access resource. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param privateEndpointConnectionName The name of the private endpoint connection. + * @param options The options parameters. + */ + getAPrivateEndpointConnection(resourceGroupName, diskAccessName, privateEndpointConnectionName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + diskAccessName, + privateEndpointConnectionName, + options, + }, getAPrivateEndpointConnectionOperationSpec); + } + /** + * Deletes a private endpoint connection under a disk access resource. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param privateEndpointConnectionName The name of the private endpoint connection. + * @param options The options parameters. + */ + beginDeleteAPrivateEndpointConnection(resourceGroupName, diskAccessName, privateEndpointConnectionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + diskAccessName, + privateEndpointConnectionName, + options, + }, + spec: deleteAPrivateEndpointConnectionOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a private endpoint connection under a disk access resource. + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param privateEndpointConnectionName The name of the private endpoint connection. + * @param options The options parameters. + */ + beginDeleteAPrivateEndpointConnectionAndWait(resourceGroupName, diskAccessName, privateEndpointConnectionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDeleteAPrivateEndpointConnection(resourceGroupName, diskAccessName, privateEndpointConnectionName, options); + return poller.pollUntilDone(); + }); + } + /** + * List information about private endpoint connections under a disk access resource + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + _listPrivateEndpointConnections(resourceGroupName, diskAccessName, options) { + return this.client.sendOperationRequest({ resourceGroupName, diskAccessName, options }, listPrivateEndpointConnectionsOperationSpec); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$3); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$c); + } + /** + * ListPrivateEndpointConnectionsNext + * @param resourceGroupName The name of the resource group. + * @param diskAccessName The name of the disk access resource that is being created. The name can't be + * changed after the disk encryption set is created. Supported characters for the name are a-z, A-Z, + * 0-9, _ and -. The maximum name length is 80 characters. + * @param nextLink The nextLink from the previous successful call to the ListPrivateEndpointConnections + * method. + * @param options The options parameters. + */ + _listPrivateEndpointConnectionsNext(resourceGroupName, diskAccessName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, diskAccessName, nextLink, options }, listPrivateEndpointConnectionsNextOperationSpec); + } +} +// Operation Specifications +const serializer$l = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: DiskAccess, + }, + 201: { + bodyMapper: DiskAccess, + }, + 202: { + bodyMapper: DiskAccess, + }, + 204: { + bodyMapper: DiskAccess, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: diskAccess, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$l, +}; +const updateOperationSpec$9 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: DiskAccess, + }, + 201: { + bodyMapper: DiskAccess, + }, + 202: { + bodyMapper: DiskAccess, + }, + 204: { + bodyMapper: DiskAccess, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: diskAccess1, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$l, +}; +const getOperationSpec$h = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskAccess, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const deleteOperationSpec$9 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const listByResourceGroupOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskAccessList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const listOperationSpec$c = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/diskAccesses", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskAccessList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$l, +}; +const getPrivateLinkResourcesOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateLinkResources", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PrivateLinkResourceListResult, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const updateAPrivateEndpointConnectionOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: PrivateEndpointConnection, + }, + 201: { + bodyMapper: PrivateEndpointConnection, + }, + 202: { + bodyMapper: PrivateEndpointConnection, + }, + 204: { + bodyMapper: PrivateEndpointConnection, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: privateEndpointConnection, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + privateEndpointConnectionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$l, +}; +const getAPrivateEndpointConnectionOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PrivateEndpointConnection, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + privateEndpointConnectionName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const deleteAPrivateEndpointConnectionOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + privateEndpointConnectionName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const listPrivateEndpointConnectionsOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PrivateEndpointConnectionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskAccessName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const listByResourceGroupNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskAccessList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const listNextOperationSpec$c = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskAccessList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$l, +}; +const listPrivateEndpointConnectionsNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PrivateEndpointConnectionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + diskAccessName, + ], + headerParameters: [accept], + serializer: serializer$l, +}; + +/* + * 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 containing DiskEncryptionSets operations. */ +class DiskEncryptionSetsImpl { + /** + * Initialize a new instance of the class DiskEncryptionSets class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all the disk encryption sets under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all the disk encryption sets under a subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + }, + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Lists all resources that are encrypted with this disk encryption set. + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + listAssociatedResources(resourceGroupName, diskEncryptionSetName, options) { + const iter = this.listAssociatedResourcesPagingAll(resourceGroupName, diskEncryptionSetName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listAssociatedResourcesPagingPage(resourceGroupName, diskEncryptionSetName, options, settings); + }, + }; + } + listAssociatedResourcesPagingPage(resourceGroupName, diskEncryptionSetName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listAssociatedResourcesPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listAssociatedResources(resourceGroupName, diskEncryptionSetName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listAssociatedResourcesNext(resourceGroupName, diskEncryptionSetName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listAssociatedResourcesPagingAll(resourceGroupName, diskEncryptionSetName, options) { + return tslib.__asyncGenerator(this, arguments, function* listAssociatedResourcesPagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listAssociatedResourcesPagingPage(resourceGroupName, diskEncryptionSetName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Creates or updates a disk encryption set + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param diskEncryptionSet disk encryption set object supplied in the body of the Put disk encryption + * set operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, diskEncryptionSetName, diskEncryptionSet, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + diskEncryptionSetName, + diskEncryptionSet, + options, + }, + spec: createOrUpdateOperationSpec$7, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Creates or updates a disk encryption set + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param diskEncryptionSet disk encryption set object supplied in the body of the Put disk encryption + * set operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, diskEncryptionSetName, diskEncryptionSet, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, diskEncryptionSetName, diskEncryptionSet, options); + return poller.pollUntilDone(); + }); + } + /** + * Updates (patches) a disk encryption set. + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param diskEncryptionSet disk encryption set object supplied in the body of the Patch disk + * encryption set operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, diskEncryptionSetName, diskEncryptionSet, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + diskEncryptionSetName, + diskEncryptionSet, + options, + }, + spec: updateOperationSpec$8, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Updates (patches) a disk encryption set. + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param diskEncryptionSet disk encryption set object supplied in the body of the Patch disk + * encryption set operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, diskEncryptionSetName, diskEncryptionSet, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, diskEncryptionSetName, diskEncryptionSet, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets information about a disk encryption set. + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + get(resourceGroupName, diskEncryptionSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, diskEncryptionSetName, options }, getOperationSpec$g); + } + /** + * Deletes a disk encryption set. + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, diskEncryptionSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, diskEncryptionSetName, options }, + spec: deleteOperationSpec$8, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a disk encryption set. + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, diskEncryptionSetName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, diskEncryptionSetName, options); + return poller.pollUntilDone(); + }); + } + /** + * Lists all the disk encryption sets under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$2); + } + /** + * Lists all the disk encryption sets under a subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$b); + } + /** + * Lists all resources that are encrypted with this disk encryption set. + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param options The options parameters. + */ + _listAssociatedResources(resourceGroupName, diskEncryptionSetName, options) { + return this.client.sendOperationRequest({ resourceGroupName, diskEncryptionSetName, options }, listAssociatedResourcesOperationSpec); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$2); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$b); + } + /** + * ListAssociatedResourcesNext + * @param resourceGroupName The name of the resource group. + * @param diskEncryptionSetName The name of the disk encryption set that is being created. The name + * can't be changed after the disk encryption set is created. Supported characters for the name are + * a-z, A-Z, 0-9, _ and -. The maximum name length is 80 characters. + * @param nextLink The nextLink from the previous successful call to the ListAssociatedResources + * method. + * @param options The options parameters. + */ + _listAssociatedResourcesNext(resourceGroupName, diskEncryptionSetName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, diskEncryptionSetName, nextLink, options }, listAssociatedResourcesNextOperationSpec); + } +} +// Operation Specifications +const serializer$k = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: DiskEncryptionSet, + }, + 201: { + bodyMapper: DiskEncryptionSet, + }, + 202: { + bodyMapper: DiskEncryptionSet, + }, + 204: { + bodyMapper: DiskEncryptionSet, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: diskEncryptionSet, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskEncryptionSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$k, +}; +const updateOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: DiskEncryptionSet, + }, + 201: { + bodyMapper: DiskEncryptionSet, + }, + 202: { + bodyMapper: DiskEncryptionSet, + }, + 204: { + bodyMapper: DiskEncryptionSet, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: diskEncryptionSet1, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskEncryptionSetName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$k, +}; +const getOperationSpec$g = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskEncryptionSet, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskEncryptionSetName, + ], + headerParameters: [accept], + serializer: serializer$k, +}; +const deleteOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskEncryptionSetName, + ], + headerParameters: [accept], + serializer: serializer$k, +}; +const listByResourceGroupOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskEncryptionSetList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$k, +}; +const listOperationSpec$b = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/diskEncryptionSets", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskEncryptionSetList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$k, +}; +const listAssociatedResourcesOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}/associatedResources", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ResourceUriList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + diskEncryptionSetName, + ], + headerParameters: [accept], + serializer: serializer$k, +}; +const listByResourceGroupNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskEncryptionSetList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$k, +}; +const listNextOperationSpec$b = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskEncryptionSetList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$k, +}; +const listAssociatedResourcesNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ResourceUriList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + diskEncryptionSetName, + ], + headerParameters: [accept], + serializer: serializer$k, +}; + +/* + * 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 containing DiskRestorePointOperations operations. */ +class DiskRestorePointOperationsImpl { + /** + * Initialize a new instance of the class DiskRestorePointOperations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists diskRestorePoints under a vmRestorePoint. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection that the disk restore + * point belongs. + * @param vmRestorePointName The name of the vm restore point that the disk disk restore point belongs. + * @param options The options parameters. + */ + listByRestorePoint(resourceGroupName, restorePointCollectionName, vmRestorePointName, options) { + const iter = this.listByRestorePointPagingAll(resourceGroupName, restorePointCollectionName, vmRestorePointName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByRestorePointPagingPage(resourceGroupName, restorePointCollectionName, vmRestorePointName, options, settings); + }, + }; + } + listByRestorePointPagingPage(resourceGroupName, restorePointCollectionName, vmRestorePointName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByRestorePointPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByRestorePoint(resourceGroupName, restorePointCollectionName, vmRestorePointName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByRestorePointNext(resourceGroupName, restorePointCollectionName, vmRestorePointName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByRestorePointPagingAll(resourceGroupName, restorePointCollectionName, vmRestorePointName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByRestorePointPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByRestorePointPagingPage(resourceGroupName, restorePointCollectionName, vmRestorePointName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get disk restorePoint resource + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection that the disk restore + * point belongs. + * @param vmRestorePointName The name of the vm restore point that the disk disk restore point belongs. + * @param diskRestorePointName The name of the disk restore point created. + * @param options The options parameters. + */ + get(resourceGroupName, restorePointCollectionName, vmRestorePointName, diskRestorePointName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + diskRestorePointName, + options, + }, getOperationSpec$f); + } + /** + * Lists diskRestorePoints under a vmRestorePoint. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection that the disk restore + * point belongs. + * @param vmRestorePointName The name of the vm restore point that the disk disk restore point belongs. + * @param options The options parameters. + */ + _listByRestorePoint(resourceGroupName, restorePointCollectionName, vmRestorePointName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + options, + }, listByRestorePointOperationSpec); + } + /** + * Grants access to a diskRestorePoint. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection that the disk restore + * point belongs. + * @param vmRestorePointName The name of the vm restore point that the disk disk restore point belongs. + * @param diskRestorePointName The name of the disk restore point created. + * @param grantAccessData Access data object supplied in the body of the get disk access operation. + * @param options The options parameters. + */ + beginGrantAccess(resourceGroupName, restorePointCollectionName, vmRestorePointName, diskRestorePointName, grantAccessData, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + diskRestorePointName, + grantAccessData, + options, + }, + spec: grantAccessOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Grants access to a diskRestorePoint. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection that the disk restore + * point belongs. + * @param vmRestorePointName The name of the vm restore point that the disk disk restore point belongs. + * @param diskRestorePointName The name of the disk restore point created. + * @param grantAccessData Access data object supplied in the body of the get disk access operation. + * @param options The options parameters. + */ + beginGrantAccessAndWait(resourceGroupName, restorePointCollectionName, vmRestorePointName, diskRestorePointName, grantAccessData, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginGrantAccess(resourceGroupName, restorePointCollectionName, vmRestorePointName, diskRestorePointName, grantAccessData, options); + return poller.pollUntilDone(); + }); + } + /** + * Revokes access to a diskRestorePoint. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection that the disk restore + * point belongs. + * @param vmRestorePointName The name of the vm restore point that the disk disk restore point belongs. + * @param diskRestorePointName The name of the disk restore point created. + * @param options The options parameters. + */ + beginRevokeAccess(resourceGroupName, restorePointCollectionName, vmRestorePointName, diskRestorePointName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + diskRestorePointName, + options, + }, + spec: revokeAccessOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Revokes access to a diskRestorePoint. + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection that the disk restore + * point belongs. + * @param vmRestorePointName The name of the vm restore point that the disk disk restore point belongs. + * @param diskRestorePointName The name of the disk restore point created. + * @param options The options parameters. + */ + beginRevokeAccessAndWait(resourceGroupName, restorePointCollectionName, vmRestorePointName, diskRestorePointName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRevokeAccess(resourceGroupName, restorePointCollectionName, vmRestorePointName, diskRestorePointName, options); + return poller.pollUntilDone(); + }); + } + /** + * ListByRestorePointNext + * @param resourceGroupName The name of the resource group. + * @param restorePointCollectionName The name of the restore point collection that the disk restore + * point belongs. + * @param vmRestorePointName The name of the vm restore point that the disk disk restore point belongs. + * @param nextLink The nextLink from the previous successful call to the ListByRestorePoint method. + * @param options The options parameters. + */ + _listByRestorePointNext(resourceGroupName, restorePointCollectionName, vmRestorePointName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + nextLink, + options, + }, listByRestorePointNextOperationSpec); + } +} +// Operation Specifications +const serializer$j = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$f = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskRestorePoint, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + diskRestorePointName, + ], + headerParameters: [accept], + serializer: serializer$j, +}; +const listByRestorePointOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskRestorePointList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + ], + headerParameters: [accept], + serializer: serializer$j, +}; +const grantAccessOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/beginGetAccess", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: AccessUri, + }, + 201: { + bodyMapper: AccessUri, + }, + 202: { + bodyMapper: AccessUri, + }, + 204: { + bodyMapper: AccessUri, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: grantAccessData, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + diskRestorePointName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$j, +}; +const revokeAccessOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/endGetAccess", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + diskRestorePointName, + ], + headerParameters: [accept], + serializer: serializer$j, +}; +const listByRestorePointNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiskRestorePointList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + restorePointCollectionName, + vmRestorePointName, + ], + headerParameters: [accept], + serializer: serializer$j, +}; + +/* + * 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 containing Snapshots operations. */ +class SnapshotsImpl { + /** + * Initialize a new instance of the class Snapshots class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists snapshots under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists snapshots under a subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + }, + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Creates or updates a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param snapshot Snapshot object supplied in the body of the Put disk operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, snapshotName, snapshot, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, snapshotName, snapshot, options }, + spec: createOrUpdateOperationSpec$6, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Creates or updates a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param snapshot Snapshot object supplied in the body of the Put disk operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, snapshotName, snapshot, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, snapshotName, snapshot, options); + return poller.pollUntilDone(); + }); + } + /** + * Updates (patches) a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param snapshot Snapshot object supplied in the body of the Patch snapshot operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, snapshotName, snapshot, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, snapshotName, snapshot, options }, + spec: updateOperationSpec$7, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Updates (patches) a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param snapshot Snapshot object supplied in the body of the Patch snapshot operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, snapshotName, snapshot, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, snapshotName, snapshot, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets information about a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param options The options parameters. + */ + get(resourceGroupName, snapshotName, options) { + return this.client.sendOperationRequest({ resourceGroupName, snapshotName, options }, getOperationSpec$e); + } + /** + * Deletes a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, snapshotName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, snapshotName, options }, + spec: deleteOperationSpec$7, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, snapshotName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, snapshotName, options); + return poller.pollUntilDone(); + }); + } + /** + * Lists snapshots under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$1); + } + /** + * Lists snapshots under a subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$a); + } + /** + * Grants access to a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param grantAccessData Access data object supplied in the body of the get snapshot access operation. + * @param options The options parameters. + */ + beginGrantAccess(resourceGroupName, snapshotName, grantAccessData, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, snapshotName, grantAccessData, options }, + spec: grantAccessOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Grants access to a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param grantAccessData Access data object supplied in the body of the get snapshot access operation. + * @param options The options parameters. + */ + beginGrantAccessAndWait(resourceGroupName, snapshotName, grantAccessData, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginGrantAccess(resourceGroupName, snapshotName, grantAccessData, options); + return poller.pollUntilDone(); + }); + } + /** + * Revokes access to a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param options The options parameters. + */ + beginRevokeAccess(resourceGroupName, snapshotName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, snapshotName, options }, + spec: revokeAccessOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + resourceLocationConfig: "location", + }); + yield poller.poll(); + return poller; + }); + } + /** + * Revokes access to a snapshot. + * @param resourceGroupName The name of the resource group. + * @param snapshotName The name of the snapshot that is being created. The name can't be changed after + * the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name + * length is 80 characters. + * @param options The options parameters. + */ + beginRevokeAccessAndWait(resourceGroupName, snapshotName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRevokeAccess(resourceGroupName, snapshotName, options); + return poller.pollUntilDone(); + }); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$1); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$a); + } +} +// Operation Specifications +const serializer$i = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Snapshot, + }, + 201: { + bodyMapper: Snapshot, + }, + 202: { + bodyMapper: Snapshot, + }, + 204: { + bodyMapper: Snapshot, + }, + }, + requestBody: snapshot, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + snapshotName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$i, +}; +const updateOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: Snapshot, + }, + 201: { + bodyMapper: Snapshot, + }, + 202: { + bodyMapper: Snapshot, + }, + 204: { + bodyMapper: Snapshot, + }, + }, + requestBody: snapshot1, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + snapshotName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$i, +}; +const getOperationSpec$e = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Snapshot, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + snapshotName, + ], + headerParameters: [accept], + serializer: serializer$i, +}; +const deleteOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", + httpMethod: "DELETE", + responses: { 200: {}, 201: {}, 202: {}, 204: {} }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + snapshotName, + ], + serializer: serializer$i, +}; +const listByResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SnapshotList, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$i, +}; +const listOperationSpec$a = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/snapshots", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SnapshotList, + }, + }, + queryParameters: [apiVersion1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$i, +}; +const grantAccessOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: AccessUri, + }, + 201: { + bodyMapper: AccessUri, + }, + 202: { + bodyMapper: AccessUri, + }, + 204: { + bodyMapper: AccessUri, + }, + }, + requestBody: grantAccessData, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + snapshotName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$i, +}; +const revokeAccessOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", + httpMethod: "POST", + responses: { 200: {}, 201: {}, 202: {}, 204: {} }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + snapshotName, + ], + serializer: serializer$i, +}; +const listByResourceGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SnapshotList, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$i, +}; +const listNextOperationSpec$a = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SnapshotList, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$i, +}; + +/* + * 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 containing ResourceSkus operations. */ +class ResourceSkusImpl { + /** + * Initialize a new instance of the class ResourceSkus class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the list of Microsoft.Compute SKUs available for your Subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + }, + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets the list of Microsoft.Compute SKUs available for your Subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$9); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$9); + } +} +// Operation Specifications +const serializer$h = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$9 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/skus", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ResourceSkusResult, + }, + }, + queryParameters: [ + filter, + apiVersion2, + includeExtendedLocations, + ], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$h, +}; +const listNextOperationSpec$9 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ResourceSkusResult, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$h, +}; + +/* + * 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 containing Galleries operations. */ +class GalleriesImpl { + /** + * Initialize a new instance of the class Galleries class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List galleries under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByResourceGroupPagingPage(resourceGroupName, options, settings); + }, + }; + } + listByResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List galleries under a subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + }, + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Create or update a Shared Image Gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery. The allowed characters are alphabets and + * numbers with dots and periods allowed in the middle. The maximum length is 80 characters. + * @param gallery Parameters supplied to the create or update Shared Image Gallery operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, galleryName, gallery, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, galleryName, gallery, options }, + spec: createOrUpdateOperationSpec$5, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update a Shared Image Gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery. The allowed characters are alphabets and + * numbers with dots and periods allowed in the middle. The maximum length is 80 characters. + * @param gallery Parameters supplied to the create or update Shared Image Gallery operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, galleryName, gallery, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, galleryName, gallery, options); + return poller.pollUntilDone(); + }); + } + /** + * Update a Shared Image Gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery. The allowed characters are alphabets and + * numbers with dots and periods allowed in the middle. The maximum length is 80 characters. + * @param gallery Parameters supplied to the update Shared Image Gallery operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, galleryName, gallery, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, galleryName, gallery, options }, + spec: updateOperationSpec$6, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update a Shared Image Gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery. The allowed characters are alphabets and + * numbers with dots and periods allowed in the middle. The maximum length is 80 characters. + * @param gallery Parameters supplied to the update Shared Image Gallery operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, galleryName, gallery, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, galleryName, gallery, options); + return poller.pollUntilDone(); + }); + } + /** + * Retrieves information about a Shared Image Gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery. + * @param options The options parameters. + */ + get(resourceGroupName, galleryName, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, options }, getOperationSpec$d); + } + /** + * Delete a Shared Image Gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery to be deleted. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, galleryName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, galleryName, options }, + spec: deleteOperationSpec$6, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Delete a Shared Image Gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery to be deleted. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, galleryName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, galleryName, options); + return poller.pollUntilDone(); + }); + } + /** + * List galleries under a resource group. + * @param resourceGroupName The name of the resource group. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec); + } + /** + * List galleries under a subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$8); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$8); + } +} +// Operation Specifications +const serializer$g = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Gallery, + }, + 201: { + bodyMapper: Gallery, + }, + 202: { + bodyMapper: Gallery, + }, + 204: { + bodyMapper: Gallery, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: gallery, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$g, +}; +const updateOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: Gallery, + }, + 201: { + bodyMapper: Gallery, + }, + 202: { + bodyMapper: Gallery, + }, + 204: { + bodyMapper: Gallery, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: gallery1, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$g, +}; +const getOperationSpec$d = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Gallery, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [ + apiVersion3, + select1, + expand10, + ], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + ], + headerParameters: [accept], + serializer: serializer$g, +}; +const deleteOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + ], + headerParameters: [accept], + serializer: serializer$g, +}; +const listByResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$g, +}; +const listOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/galleries", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$g, +}; +const listByResourceGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$g, +}; +const listNextOperationSpec$8 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$g, +}; + +/* + * 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 containing GalleryImages operations. */ +class GalleryImagesImpl { + /** + * Initialize a new instance of the class GalleryImages class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List gallery image definitions in a gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery from which Image Definitions are to be + * listed. + * @param options The options parameters. + */ + listByGallery(resourceGroupName, galleryName, options) { + const iter = this.listByGalleryPagingAll(resourceGroupName, galleryName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByGalleryPagingPage(resourceGroupName, galleryName, options, settings); + }, + }; + } + listByGalleryPagingPage(resourceGroupName, galleryName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByGalleryPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByGallery(resourceGroupName, galleryName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByGalleryNext(resourceGroupName, galleryName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByGalleryPagingAll(resourceGroupName, galleryName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByGalleryPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByGalleryPagingPage(resourceGroupName, galleryName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Create or update a gallery image definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition is to be + * created. + * @param galleryImageName The name of the gallery image definition to be created or updated. The + * allowed characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. + * The maximum length is 80 characters. + * @param galleryImage Parameters supplied to the create or update gallery image operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, galleryName, galleryImageName, galleryImage, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryImageName, + galleryImage, + options, + }, + spec: createOrUpdateOperationSpec$4, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update a gallery image definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition is to be + * created. + * @param galleryImageName The name of the gallery image definition to be created or updated. The + * allowed characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. + * The maximum length is 80 characters. + * @param galleryImage Parameters supplied to the create or update gallery image operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, galleryName, galleryImageName, galleryImage, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, galleryName, galleryImageName, galleryImage, options); + return poller.pollUntilDone(); + }); + } + /** + * Update a gallery image definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition is to be + * updated. + * @param galleryImageName The name of the gallery image definition to be updated. The allowed + * characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. The + * maximum length is 80 characters. + * @param galleryImage Parameters supplied to the update gallery image operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, galleryName, galleryImageName, galleryImage, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryImageName, + galleryImage, + options, + }, + spec: updateOperationSpec$5, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update a gallery image definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition is to be + * updated. + * @param galleryImageName The name of the gallery image definition to be updated. The allowed + * characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. The + * maximum length is 80 characters. + * @param galleryImage Parameters supplied to the update gallery image operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, galleryName, galleryImageName, galleryImage, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, galleryName, galleryImageName, galleryImage, options); + return poller.pollUntilDone(); + }); + } + /** + * Retrieves information about a gallery image definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery from which the Image Definitions are to be + * retrieved. + * @param galleryImageName The name of the gallery image definition to be retrieved. + * @param options The options parameters. + */ + get(resourceGroupName, galleryName, galleryImageName, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, galleryImageName, options }, getOperationSpec$c); + } + /** + * Delete a gallery image. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition is to be + * deleted. + * @param galleryImageName The name of the gallery image definition to be deleted. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, galleryName, galleryImageName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, galleryName, galleryImageName, options }, + spec: deleteOperationSpec$5, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Delete a gallery image. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition is to be + * deleted. + * @param galleryImageName The name of the gallery image definition to be deleted. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, galleryName, galleryImageName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, galleryName, galleryImageName, options); + return poller.pollUntilDone(); + }); + } + /** + * List gallery image definitions in a gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery from which Image Definitions are to be + * listed. + * @param options The options parameters. + */ + _listByGallery(resourceGroupName, galleryName, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, options }, listByGalleryOperationSpec$1); + } + /** + * ListByGalleryNext + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery from which Image Definitions are to be + * listed. + * @param nextLink The nextLink from the previous successful call to the ListByGallery method. + * @param options The options parameters. + */ + _listByGalleryNext(resourceGroupName, galleryName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, nextLink, options }, listByGalleryNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$f = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: GalleryImage, + }, + 201: { + bodyMapper: GalleryImage, + }, + 202: { + bodyMapper: GalleryImage, + }, + 204: { + bodyMapper: GalleryImage, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: galleryImage, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$f, +}; +const updateOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: GalleryImage, + }, + 201: { + bodyMapper: GalleryImage, + }, + 202: { + bodyMapper: GalleryImage, + }, + 204: { + bodyMapper: GalleryImage, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: galleryImage1, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$f, +}; +const getOperationSpec$c = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryImage, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + ], + headerParameters: [accept], + serializer: serializer$f, +}; +const deleteOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + ], + headerParameters: [accept], + serializer: serializer$f, +}; +const listByGalleryOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryImageList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + ], + headerParameters: [accept], + serializer: serializer$f, +}; +const listByGalleryNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryImageList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + galleryName, + ], + headerParameters: [accept], + serializer: serializer$f, +}; + +/* + * 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 containing GalleryImageVersions operations. */ +class GalleryImageVersionsImpl { + /** + * Initialize a new instance of the class GalleryImageVersions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List gallery image versions in a gallery image definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the Shared Image Gallery Image Definition from which the Image + * Versions are to be listed. + * @param options The options parameters. + */ + listByGalleryImage(resourceGroupName, galleryName, galleryImageName, options) { + const iter = this.listByGalleryImagePagingAll(resourceGroupName, galleryName, galleryImageName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByGalleryImagePagingPage(resourceGroupName, galleryName, galleryImageName, options, settings); + }, + }; + } + listByGalleryImagePagingPage(resourceGroupName, galleryName, galleryImageName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByGalleryImagePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByGalleryImage(resourceGroupName, galleryName, galleryImageName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByGalleryImageNext(resourceGroupName, galleryName, galleryImageName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByGalleryImagePagingAll(resourceGroupName, galleryName, galleryImageName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByGalleryImagePagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByGalleryImagePagingPage(resourceGroupName, galleryName, galleryImageName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Create or update a gallery image version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the gallery image definition in which the Image Version is to be + * created. + * @param galleryImageVersionName The name of the gallery image version to be created. Needs to follow + * semantic version name pattern: The allowed characters are digit and period. Digits must be within + * the range of a 32-bit integer. Format: .. + * @param galleryImageVersion Parameters supplied to the create or update gallery image version + * operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryImageName, + galleryImageVersionName, + galleryImageVersion, + options, + }, + spec: createOrUpdateOperationSpec$3, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update a gallery image version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the gallery image definition in which the Image Version is to be + * created. + * @param galleryImageVersionName The name of the gallery image version to be created. Needs to follow + * semantic version name pattern: The allowed characters are digit and period. Digits must be within + * the range of a 32-bit integer. Format: .. + * @param galleryImageVersion Parameters supplied to the create or update gallery image version + * operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion, options); + return poller.pollUntilDone(); + }); + } + /** + * Update a gallery image version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the gallery image definition in which the Image Version is to be + * updated. + * @param galleryImageVersionName The name of the gallery image version to be updated. Needs to follow + * semantic version name pattern: The allowed characters are digit and period. Digits must be within + * the range of a 32-bit integer. Format: .. + * @param galleryImageVersion Parameters supplied to the update gallery image version operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryImageName, + galleryImageVersionName, + galleryImageVersion, + options, + }, + spec: updateOperationSpec$4, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update a gallery image version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the gallery image definition in which the Image Version is to be + * updated. + * @param galleryImageVersionName The name of the gallery image version to be updated. Needs to follow + * semantic version name pattern: The allowed characters are digit and period. Digits must be within + * the range of a 32-bit integer. Format: .. + * @param galleryImageVersion Parameters supplied to the update gallery image version operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion, options); + return poller.pollUntilDone(); + }); + } + /** + * Retrieves information about a gallery image version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the gallery image definition in which the Image Version resides. + * @param galleryImageVersionName The name of the gallery image version to be retrieved. + * @param options The options parameters. + */ + get(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + galleryName, + galleryImageName, + galleryImageVersionName, + options, + }, getOperationSpec$b); + } + /** + * Delete a gallery image version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the gallery image definition in which the Image Version resides. + * @param galleryImageVersionName The name of the gallery image version to be deleted. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryImageName, + galleryImageVersionName, + options, + }, + spec: deleteOperationSpec$4, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Delete a gallery image version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the gallery image definition in which the Image Version resides. + * @param galleryImageVersionName The name of the gallery image version to be deleted. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, options); + return poller.pollUntilDone(); + }); + } + /** + * List gallery image versions in a gallery image definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the Shared Image Gallery Image Definition from which the Image + * Versions are to be listed. + * @param options The options parameters. + */ + _listByGalleryImage(resourceGroupName, galleryName, galleryImageName, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, galleryImageName, options }, listByGalleryImageOperationSpec); + } + /** + * ListByGalleryImageNext + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery in which the Image Definition resides. + * @param galleryImageName The name of the Shared Image Gallery Image Definition from which the Image + * Versions are to be listed. + * @param nextLink The nextLink from the previous successful call to the ListByGalleryImage method. + * @param options The options parameters. + */ + _listByGalleryImageNext(resourceGroupName, galleryName, galleryImageName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, galleryImageName, nextLink, options }, listByGalleryImageNextOperationSpec); + } +} +// Operation Specifications +const serializer$e = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: GalleryImageVersion, + }, + 201: { + bodyMapper: GalleryImageVersion, + }, + 202: { + bodyMapper: GalleryImageVersion, + }, + 204: { + bodyMapper: GalleryImageVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: galleryImageVersion, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + galleryImageVersionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$e, +}; +const updateOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: GalleryImageVersion, + }, + 201: { + bodyMapper: GalleryImageVersion, + }, + 202: { + bodyMapper: GalleryImageVersion, + }, + 204: { + bodyMapper: GalleryImageVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: galleryImageVersion1, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + galleryImageVersionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$e, +}; +const getOperationSpec$b = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryImageVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3, expand11], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + galleryImageVersionName, + ], + headerParameters: [accept], + serializer: serializer$e, +}; +const deleteOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + galleryImageVersionName, + ], + headerParameters: [accept], + serializer: serializer$e, +}; +const listByGalleryImageOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryImageVersionList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryImageName, + ], + headerParameters: [accept], + serializer: serializer$e, +}; +const listByGalleryImageNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryImageVersionList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + galleryName, + galleryImageName, + ], + headerParameters: [accept], + serializer: serializer$e, +}; + +/* + * 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 containing GalleryApplications operations. */ +class GalleryApplicationsImpl { + /** + * Initialize a new instance of the class GalleryApplications class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List gallery Application Definitions in a gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery from which Application Definitions are + * to be listed. + * @param options The options parameters. + */ + listByGallery(resourceGroupName, galleryName, options) { + const iter = this.listByGalleryPagingAll(resourceGroupName, galleryName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByGalleryPagingPage(resourceGroupName, galleryName, options, settings); + }, + }; + } + listByGalleryPagingPage(resourceGroupName, galleryName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByGalleryPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByGallery(resourceGroupName, galleryName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByGalleryNext(resourceGroupName, galleryName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByGalleryPagingAll(resourceGroupName, galleryName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByGalleryPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByGalleryPagingPage(resourceGroupName, galleryName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Create or update a gallery Application Definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition is + * to be created. + * @param galleryApplicationName The name of the gallery Application Definition to be created or + * updated. The allowed characters are alphabets and numbers with dots, dashes, and periods allowed in + * the middle. The maximum length is 80 characters. + * @param galleryApplication Parameters supplied to the create or update gallery Application operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, galleryName, galleryApplicationName, galleryApplication, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplication, + options, + }, + spec: createOrUpdateOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update a gallery Application Definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition is + * to be created. + * @param galleryApplicationName The name of the gallery Application Definition to be created or + * updated. The allowed characters are alphabets and numbers with dots, dashes, and periods allowed in + * the middle. The maximum length is 80 characters. + * @param galleryApplication Parameters supplied to the create or update gallery Application operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, galleryName, galleryApplicationName, galleryApplication, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, galleryName, galleryApplicationName, galleryApplication, options); + return poller.pollUntilDone(); + }); + } + /** + * Update a gallery Application Definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition is + * to be updated. + * @param galleryApplicationName The name of the gallery Application Definition to be updated. The + * allowed characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. + * The maximum length is 80 characters. + * @param galleryApplication Parameters supplied to the update gallery Application operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, galleryName, galleryApplicationName, galleryApplication, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplication, + options, + }, + spec: updateOperationSpec$3, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update a gallery Application Definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition is + * to be updated. + * @param galleryApplicationName The name of the gallery Application Definition to be updated. The + * allowed characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. + * The maximum length is 80 characters. + * @param galleryApplication Parameters supplied to the update gallery Application operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, galleryName, galleryApplicationName, galleryApplication, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, galleryName, galleryApplicationName, galleryApplication, options); + return poller.pollUntilDone(); + }); + } + /** + * Retrieves information about a gallery Application Definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery from which the Application Definitions + * are to be retrieved. + * @param galleryApplicationName The name of the gallery Application Definition to be retrieved. + * @param options The options parameters. + */ + get(resourceGroupName, galleryName, galleryApplicationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, galleryApplicationName, options }, getOperationSpec$a); + } + /** + * Delete a gallery Application. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition is + * to be deleted. + * @param galleryApplicationName The name of the gallery Application Definition to be deleted. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, galleryName, galleryApplicationName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, galleryName, galleryApplicationName, options }, + spec: deleteOperationSpec$3, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Delete a gallery Application. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition is + * to be deleted. + * @param galleryApplicationName The name of the gallery Application Definition to be deleted. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, galleryName, galleryApplicationName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, galleryName, galleryApplicationName, options); + return poller.pollUntilDone(); + }); + } + /** + * List gallery Application Definitions in a gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery from which Application Definitions are + * to be listed. + * @param options The options parameters. + */ + _listByGallery(resourceGroupName, galleryName, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, options }, listByGalleryOperationSpec); + } + /** + * ListByGalleryNext + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery from which Application Definitions are + * to be listed. + * @param nextLink The nextLink from the previous successful call to the ListByGallery method. + * @param options The options parameters. + */ + _listByGalleryNext(resourceGroupName, galleryName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, nextLink, options }, listByGalleryNextOperationSpec); + } +} +// Operation Specifications +const serializer$d = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: GalleryApplication, + }, + 201: { + bodyMapper: GalleryApplication, + }, + 202: { + bodyMapper: GalleryApplication, + }, + 204: { + bodyMapper: GalleryApplication, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: galleryApplication, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$d, +}; +const updateOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: GalleryApplication, + }, + 201: { + bodyMapper: GalleryApplication, + }, + 202: { + bodyMapper: GalleryApplication, + }, + 204: { + bodyMapper: GalleryApplication, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: galleryApplication1, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$d, +}; +const getOperationSpec$a = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryApplication, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + ], + headerParameters: [accept], + serializer: serializer$d, +}; +const deleteOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + ], + headerParameters: [accept], + serializer: serializer$d, +}; +const listByGalleryOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryApplicationList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + ], + headerParameters: [accept], + serializer: serializer$d, +}; +const listByGalleryNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryApplicationList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + galleryName, + ], + headerParameters: [accept], + serializer: serializer$d, +}; + +/* + * 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 containing GalleryApplicationVersions operations. */ +class GalleryApplicationVersionsImpl { + /** + * Initialize a new instance of the class GalleryApplicationVersions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List gallery Application Versions in a gallery Application Definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the Shared Application Gallery Application Definition from + * which the Application Versions are to be listed. + * @param options The options parameters. + */ + listByGalleryApplication(resourceGroupName, galleryName, galleryApplicationName, options) { + const iter = this.listByGalleryApplicationPagingAll(resourceGroupName, galleryName, galleryApplicationName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByGalleryApplicationPagingPage(resourceGroupName, galleryName, galleryApplicationName, options, settings); + }, + }; + } + listByGalleryApplicationPagingPage(resourceGroupName, galleryName, galleryApplicationName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByGalleryApplicationPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByGalleryApplication(resourceGroupName, galleryName, galleryApplicationName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByGalleryApplicationNext(resourceGroupName, galleryName, galleryApplicationName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByGalleryApplicationPagingAll(resourceGroupName, galleryName, galleryApplicationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByGalleryApplicationPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByGalleryApplicationPagingPage(resourceGroupName, galleryName, galleryApplicationName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Create or update a gallery Application Version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the gallery Application Definition in which the + * Application Version is to be created. + * @param galleryApplicationVersionName The name of the gallery Application Version to be created. + * Needs to follow semantic version name pattern: The allowed characters are digit and period. Digits + * must be within the range of a 32-bit integer. Format: .. + * @param galleryApplicationVersion Parameters supplied to the create or update gallery Application + * Version operation. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplicationVersionName, + galleryApplicationVersion, + options, + }, + spec: createOrUpdateOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update a gallery Application Version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the gallery Application Definition in which the + * Application Version is to be created. + * @param galleryApplicationVersionName The name of the gallery Application Version to be created. + * Needs to follow semantic version name pattern: The allowed characters are digit and period. Digits + * must be within the range of a 32-bit integer. Format: .. + * @param galleryApplicationVersion Parameters supplied to the create or update gallery Application + * Version operation. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion, options); + return poller.pollUntilDone(); + }); + } + /** + * Update a gallery Application Version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the gallery Application Definition in which the + * Application Version is to be updated. + * @param galleryApplicationVersionName The name of the gallery Application Version to be updated. + * Needs to follow semantic version name pattern: The allowed characters are digit and period. Digits + * must be within the range of a 32-bit integer. Format: .. + * @param galleryApplicationVersion Parameters supplied to the update gallery Application Version + * operation. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplicationVersionName, + galleryApplicationVersion, + options, + }, + spec: updateOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update a gallery Application Version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the gallery Application Definition in which the + * Application Version is to be updated. + * @param galleryApplicationVersionName The name of the gallery Application Version to be updated. + * Needs to follow semantic version name pattern: The allowed characters are digit and period. Digits + * must be within the range of a 32-bit integer. Format: .. + * @param galleryApplicationVersion Parameters supplied to the update gallery Application Version + * operation. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion, options); + return poller.pollUntilDone(); + }); + } + /** + * Retrieves information about a gallery Application Version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the gallery Application Definition in which the + * Application Version resides. + * @param galleryApplicationVersionName The name of the gallery Application Version to be retrieved. + * @param options The options parameters. + */ + get(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplicationVersionName, + options, + }, getOperationSpec$9); + } + /** + * Delete a gallery Application Version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the gallery Application Definition in which the + * Application Version resides. + * @param galleryApplicationVersionName The name of the gallery Application Version to be deleted. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplicationVersionName, + options, + }, + spec: deleteOperationSpec$2, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Delete a gallery Application Version. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the gallery Application Definition in which the + * Application Version resides. + * @param galleryApplicationVersionName The name of the gallery Application Version to be deleted. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, options); + return poller.pollUntilDone(); + }); + } + /** + * List gallery Application Versions in a gallery Application Definition. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the Shared Application Gallery Application Definition from + * which the Application Versions are to be listed. + * @param options The options parameters. + */ + _listByGalleryApplication(resourceGroupName, galleryName, galleryApplicationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, galleryName, galleryApplicationName, options }, listByGalleryApplicationOperationSpec); + } + /** + * ListByGalleryApplicationNext + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Application Gallery in which the Application Definition + * resides. + * @param galleryApplicationName The name of the Shared Application Gallery Application Definition from + * which the Application Versions are to be listed. + * @param nextLink The nextLink from the previous successful call to the ListByGalleryApplication + * method. + * @param options The options parameters. + */ + _listByGalleryApplicationNext(resourceGroupName, galleryName, galleryApplicationName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + galleryName, + galleryApplicationName, + nextLink, + options, + }, listByGalleryApplicationNextOperationSpec); + } +} +// Operation Specifications +const serializer$c = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: GalleryApplicationVersion, + }, + 201: { + bodyMapper: GalleryApplicationVersion, + }, + 202: { + bodyMapper: GalleryApplicationVersion, + }, + 204: { + bodyMapper: GalleryApplicationVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: galleryApplicationVersion, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplicationVersionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$c, +}; +const updateOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: GalleryApplicationVersion, + }, + 201: { + bodyMapper: GalleryApplicationVersion, + }, + 202: { + bodyMapper: GalleryApplicationVersion, + }, + 204: { + bodyMapper: GalleryApplicationVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: galleryApplicationVersion1, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplicationVersionName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$c, +}; +const getOperationSpec$9 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryApplicationVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3, expand11], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplicationVersionName, + ], + headerParameters: [accept], + serializer: serializer$c, +}; +const deleteOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + galleryApplicationVersionName, + ], + headerParameters: [accept], + serializer: serializer$c, +}; +const listByGalleryApplicationOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryApplicationVersionList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + galleryApplicationName, + ], + headerParameters: [accept], + serializer: serializer$c, +}; +const listByGalleryApplicationNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: GalleryApplicationVersionList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + galleryName, + galleryApplicationName, + ], + headerParameters: [accept], + serializer: serializer$c, +}; + +/* + * 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 containing GallerySharingProfile operations. */ +class GallerySharingProfileImpl { + /** + * Initialize a new instance of the class GallerySharingProfile class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Update sharing profile of a gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery. + * @param sharingUpdate Parameters supplied to the update gallery sharing profile. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, galleryName, sharingUpdate, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, galleryName, sharingUpdate, options }, + spec: updateOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update sharing profile of a gallery. + * @param resourceGroupName The name of the resource group. + * @param galleryName The name of the Shared Image Gallery. + * @param sharingUpdate Parameters supplied to the update gallery sharing profile. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, galleryName, sharingUpdate, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, galleryName, sharingUpdate, options); + return poller.pollUntilDone(); + }); + } +} +// Operation Specifications +const serializer$b = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const updateOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/share", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SharingUpdate, + }, + 201: { + bodyMapper: SharingUpdate, + }, + 202: { + bodyMapper: SharingUpdate, + }, + 204: { + bodyMapper: SharingUpdate, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: sharingUpdate, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + galleryName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$b, +}; + +/* + * 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 containing SharedGalleries operations. */ +class SharedGalleriesImpl { + /** + * Initialize a new instance of the class SharedGalleries class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List shared galleries by subscription id or tenant id. + * @param location Resource location. + * @param options The options parameters. + */ + list(location, options) { + const iter = this.listPagingAll(location, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(location, options, settings); + }, + }; + } + listPagingPage(location, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(location, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(location, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(location, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(location, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List shared galleries by subscription id or tenant id. + * @param location Resource location. + * @param options The options parameters. + */ + _list(location, options) { + return this.client.sendOperationRequest({ location, options }, listOperationSpec$7); + } + /** + * Get a shared gallery by subscription id or tenant id. + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param options The options parameters. + */ + get(location, galleryUniqueName, options) { + return this.client.sendOperationRequest({ location, galleryUniqueName, options }, getOperationSpec$8); + } + /** + * ListNext + * @param location Resource location. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(location, nextLink, options) { + return this.client.sendOperationRequest({ location, nextLink, options }, listNextOperationSpec$7); + } +} +// Operation Specifications +const serializer$a = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGalleryList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3, sharedTo], + urlParameters: [ + $host, + subscriptionId, + location1, + ], + headerParameters: [accept], + serializer: serializer$a, +}; +const getOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGallery, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + location1, + galleryUniqueName, + ], + headerParameters: [accept], + serializer: serializer$a, +}; +const listNextOperationSpec$7 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGalleryList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + location1, + ], + headerParameters: [accept], + serializer: serializer$a, +}; + +/* + * 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 containing SharedGalleryImages operations. */ +class SharedGalleryImagesImpl { + /** + * Initialize a new instance of the class SharedGalleryImages class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List shared gallery images by subscription id or tenant id. + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param options The options parameters. + */ + list(location, galleryUniqueName, options) { + const iter = this.listPagingAll(location, galleryUniqueName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(location, galleryUniqueName, options, settings); + }, + }; + } + listPagingPage(location, galleryUniqueName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(location, galleryUniqueName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(location, galleryUniqueName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(location, galleryUniqueName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(location, galleryUniqueName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List shared gallery images by subscription id or tenant id. + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param options The options parameters. + */ + _list(location, galleryUniqueName, options) { + return this.client.sendOperationRequest({ location, galleryUniqueName, options }, listOperationSpec$6); + } + /** + * Get a shared gallery image by subscription id or tenant id. + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param galleryImageName The name of the Shared Gallery Image Definition from which the Image + * Versions are to be listed. + * @param options The options parameters. + */ + get(location, galleryUniqueName, galleryImageName, options) { + return this.client.sendOperationRequest({ location, galleryUniqueName, galleryImageName, options }, getOperationSpec$7); + } + /** + * ListNext + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(location, galleryUniqueName, nextLink, options) { + return this.client.sendOperationRequest({ location, galleryUniqueName, nextLink, options }, listNextOperationSpec$6); + } +} +// Operation Specifications +const serializer$9 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGalleryImageList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3, sharedTo], + urlParameters: [ + $host, + subscriptionId, + location1, + galleryUniqueName, + ], + headerParameters: [accept], + serializer: serializer$9, +}; +const getOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGalleryImage, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + location1, + galleryImageName, + galleryUniqueName, + ], + headerParameters: [accept], + serializer: serializer$9, +}; +const listNextOperationSpec$6 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGalleryImageList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + location1, + galleryUniqueName, + ], + headerParameters: [accept], + serializer: serializer$9, +}; + +/* + * 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 containing SharedGalleryImageVersions operations. */ +class SharedGalleryImageVersionsImpl { + /** + * Initialize a new instance of the class SharedGalleryImageVersions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List shared gallery image versions by subscription id or tenant id. + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param galleryImageName The name of the Shared Gallery Image Definition from which the Image + * Versions are to be listed. + * @param options The options parameters. + */ + list(location, galleryUniqueName, galleryImageName, options) { + const iter = this.listPagingAll(location, galleryUniqueName, galleryImageName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(location, galleryUniqueName, galleryImageName, options, settings); + }, + }; + } + listPagingPage(location, galleryUniqueName, galleryImageName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(location, galleryUniqueName, galleryImageName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(location, galleryUniqueName, galleryImageName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(location, galleryUniqueName, galleryImageName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(location, galleryUniqueName, galleryImageName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List shared gallery image versions by subscription id or tenant id. + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param galleryImageName The name of the Shared Gallery Image Definition from which the Image + * Versions are to be listed. + * @param options The options parameters. + */ + _list(location, galleryUniqueName, galleryImageName, options) { + return this.client.sendOperationRequest({ location, galleryUniqueName, galleryImageName, options }, listOperationSpec$5); + } + /** + * Get a shared gallery image version by subscription id or tenant id. + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param galleryImageName The name of the Shared Gallery Image Definition from which the Image + * Versions are to be listed. + * @param galleryImageVersionName The name of the gallery image version to be created. Needs to follow + * semantic version name pattern: The allowed characters are digit and period. Digits must be within + * the range of a 32-bit integer. Format: .. + * @param options The options parameters. + */ + get(location, galleryUniqueName, galleryImageName, galleryImageVersionName, options) { + return this.client.sendOperationRequest({ + location, + galleryUniqueName, + galleryImageName, + galleryImageVersionName, + options, + }, getOperationSpec$6); + } + /** + * ListNext + * @param location Resource location. + * @param galleryUniqueName The unique name of the Shared Gallery. + * @param galleryImageName The name of the Shared Gallery Image Definition from which the Image + * Versions are to be listed. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(location, galleryUniqueName, galleryImageName, nextLink, options) { + return this.client.sendOperationRequest({ location, galleryUniqueName, galleryImageName, nextLink, options }, listNextOperationSpec$5); + } +} +// Operation Specifications +const serializer$8 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGalleryImageVersionList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3, sharedTo], + urlParameters: [ + $host, + subscriptionId, + location1, + galleryImageName, + galleryUniqueName, + ], + headerParameters: [accept], + serializer: serializer$8, +}; +const getOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions/{galleryImageVersionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGalleryImageVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + location1, + galleryImageName, + galleryImageVersionName, + galleryUniqueName, + ], + headerParameters: [accept], + serializer: serializer$8, +}; +const listNextOperationSpec$5 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SharedGalleryImageVersionList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + location1, + galleryImageName, + galleryUniqueName, + ], + headerParameters: [accept], + serializer: serializer$8, +}; + +/* + * 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 containing CommunityGalleries operations. */ +class CommunityGalleriesImpl { + /** + * Initialize a new instance of the class CommunityGalleries class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Get a community gallery by gallery public name. + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param options The options parameters. + */ + get(location, publicGalleryName, options) { + return this.client.sendOperationRequest({ location, publicGalleryName, options }, getOperationSpec$5); + } +} +// Operation Specifications +const serializer$7 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CommunityGallery, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + location1, + publicGalleryName, + ], + headerParameters: [accept], + serializer: serializer$7, +}; + +/* + * 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 containing CommunityGalleryImages operations. */ +class CommunityGalleryImagesImpl { + /** + * Initialize a new instance of the class CommunityGalleryImages class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List community gallery images inside a gallery. + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param options The options parameters. + */ + list(location, publicGalleryName, options) { + const iter = this.listPagingAll(location, publicGalleryName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(location, publicGalleryName, options, settings); + }, + }; + } + listPagingPage(location, publicGalleryName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(location, publicGalleryName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(location, publicGalleryName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(location, publicGalleryName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(location, publicGalleryName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get a community gallery image. + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param galleryImageName The name of the community gallery image definition. + * @param options The options parameters. + */ + get(location, publicGalleryName, galleryImageName, options) { + return this.client.sendOperationRequest({ location, publicGalleryName, galleryImageName, options }, getOperationSpec$4); + } + /** + * List community gallery images inside a gallery. + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param options The options parameters. + */ + _list(location, publicGalleryName, options) { + return this.client.sendOperationRequest({ location, publicGalleryName, options }, listOperationSpec$4); + } + /** + * ListNext + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(location, publicGalleryName, nextLink, options) { + return this.client.sendOperationRequest({ location, publicGalleryName, nextLink, options }, listNextOperationSpec$4); + } +} +// Operation Specifications +const serializer$6 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CommunityGalleryImage, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + location1, + galleryImageName, + publicGalleryName, + ], + headerParameters: [accept], + serializer: serializer$6, +}; +const listOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CommunityGalleryImageList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + location1, + publicGalleryName, + ], + headerParameters: [accept], + serializer: serializer$6, +}; +const listNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CommunityGalleryImageList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + location1, + publicGalleryName, + ], + headerParameters: [accept], + serializer: serializer$6, +}; + +/* + * 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 containing CommunityGalleryImageVersions operations. */ +class CommunityGalleryImageVersionsImpl { + /** + * Initialize a new instance of the class CommunityGalleryImageVersions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List community gallery image versions inside an image. + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param galleryImageName The name of the community gallery image definition. + * @param options The options parameters. + */ + list(location, publicGalleryName, galleryImageName, options) { + const iter = this.listPagingAll(location, publicGalleryName, galleryImageName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(location, publicGalleryName, galleryImageName, options, settings); + }, + }; + } + listPagingPage(location, publicGalleryName, galleryImageName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(location, publicGalleryName, galleryImageName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(location, publicGalleryName, galleryImageName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(location, publicGalleryName, galleryImageName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(location, publicGalleryName, galleryImageName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get a community gallery image version. + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param galleryImageName The name of the community gallery image definition. + * @param galleryImageVersionName The name of the community gallery image version. Needs to follow + * semantic version name pattern: The allowed characters are digit and period. Digits must be within + * the range of a 32-bit integer. Format: .. + * @param options The options parameters. + */ + get(location, publicGalleryName, galleryImageName, galleryImageVersionName, options) { + return this.client.sendOperationRequest({ + location, + publicGalleryName, + galleryImageName, + galleryImageVersionName, + options, + }, getOperationSpec$3); + } + /** + * List community gallery image versions inside an image. + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param galleryImageName The name of the community gallery image definition. + * @param options The options parameters. + */ + _list(location, publicGalleryName, galleryImageName, options) { + return this.client.sendOperationRequest({ location, publicGalleryName, galleryImageName, options }, listOperationSpec$3); + } + /** + * ListNext + * @param location Resource location. + * @param publicGalleryName The public name of the community gallery. + * @param galleryImageName The name of the community gallery image definition. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(location, publicGalleryName, galleryImageName, nextLink, options) { + return this.client.sendOperationRequest({ location, publicGalleryName, galleryImageName, nextLink, options }, listNextOperationSpec$3); + } +} +// Operation Specifications +const serializer$5 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CommunityGalleryImageVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + location1, + galleryImageName, + galleryImageVersionName, + publicGalleryName, + ], + headerParameters: [accept], + serializer: serializer$5, +}; +const listOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CommunityGalleryImageVersionList, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + location1, + galleryImageName, + publicGalleryName, + ], + headerParameters: [accept], + serializer: serializer$5, +}; +const listNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CommunityGalleryImageVersionList, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + location1, + galleryImageName, + publicGalleryName, + ], + headerParameters: [accept], + serializer: serializer$5, +}; + +/* + * 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 containing CloudServiceRoleInstances operations. */ +class CloudServiceRoleInstancesImpl { + /** + * Initialize a new instance of the class CloudServiceRoleInstances class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the list of all role instances in a cloud service. Use nextLink property in the response to get + * the next page of role instances. Do this till nextLink is null to fetch all the role instances. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + list(resourceGroupName, cloudServiceName, options) { + const iter = this.listPagingAll(resourceGroupName, cloudServiceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, cloudServiceName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, cloudServiceName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, cloudServiceName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, cloudServiceName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, cloudServiceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, cloudServiceName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Deletes a role instance from a cloud service. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginDelete(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { roleInstanceName, resourceGroupName, cloudServiceName, options }, + spec: deleteOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a role instance from a cloud service. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginDeleteAndWait(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(roleInstanceName, resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets a role instance from a cloud service. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + get(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ roleInstanceName, resourceGroupName, cloudServiceName, options }, getOperationSpec$2); + } + /** + * Retrieves information about the run-time state of a role instance in a cloud service. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + getInstanceView(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ roleInstanceName, resourceGroupName, cloudServiceName, options }, getInstanceViewOperationSpec$1); + } + /** + * Gets the list of all role instances in a cloud service. Use nextLink property in the response to get + * the next page of role instances. Do this till nextLink is null to fetch all the role instances. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + _list(resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, options }, listOperationSpec$2); + } + /** + * The Reboot Role Instance asynchronous operation requests a reboot of a role instance in the cloud + * service. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginRestart(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { roleInstanceName, resourceGroupName, cloudServiceName, options }, + spec: restartOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The Reboot Role Instance asynchronous operation requests a reboot of a role instance in the cloud + * service. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginRestartAndWait(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRestart(roleInstanceName, resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * The Reimage Role Instance asynchronous operation reinstalls the operating system on instances of web + * roles or worker roles. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginReimage(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { roleInstanceName, resourceGroupName, cloudServiceName, options }, + spec: reimageOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The Reimage Role Instance asynchronous operation reinstalls the operating system on instances of web + * roles or worker roles. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginReimageAndWait(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReimage(roleInstanceName, resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * The Rebuild Role Instance asynchronous operation reinstalls the operating system on instances of web + * roles or worker roles and initializes the storage resources that are used by them. If you do not + * want to initialize storage resources, you can use Reimage Role Instance. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginRebuild(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { roleInstanceName, resourceGroupName, cloudServiceName, options }, + spec: rebuildOperationSpec$1, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * The Rebuild Role Instance asynchronous operation reinstalls the operating system on instances of web + * roles or worker roles and initializes the storage resources that are used by them. If you do not + * want to initialize storage resources, you can use Reimage Role Instance. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginRebuildAndWait(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRebuild(roleInstanceName, resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets a remote desktop file for a role instance in a cloud service. + * @param roleInstanceName Name of the role instance. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + getRemoteDesktopFile(roleInstanceName, resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ roleInstanceName, resourceGroupName, cloudServiceName, options }, getRemoteDesktopFileOperationSpec); + } + /** + * ListNext + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, cloudServiceName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, nextLink, options }, listNextOperationSpec$2); + } +} +// Operation Specifications +const serializer$4 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const deleteOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + roleInstanceName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$4, +}; +const getOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleInstance, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [expand2, apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + roleInstanceName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$4, +}; +const getInstanceViewOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/instanceView", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleInstanceView, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + roleInstanceName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$4, +}; +const listOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleInstanceListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [expand2, apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$4, +}; +const restartOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/restart", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + roleInstanceName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$4, +}; +const reimageOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/reimage", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + roleInstanceName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$4, +}; +const rebuildOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/rebuild", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + roleInstanceName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$4, +}; +const getRemoteDesktopFileOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/remoteDesktopFile", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: { + type: { name: "Stream" }, + serializedName: "parsedResponse", + }, + }, + default: {}, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + roleInstanceName, + cloudServiceName, + ], + headerParameters: [accept2], + serializer: serializer$4, +}; +const listNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RoleInstanceListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$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 containing CloudServiceRoles operations. */ +class CloudServiceRolesImpl { + /** + * Initialize a new instance of the class CloudServiceRoles class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of all roles in a cloud service. Use nextLink property in the response to get the next + * page of roles. Do this till nextLink is null to fetch all the roles. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + list(resourceGroupName, cloudServiceName, options) { + const iter = this.listPagingAll(resourceGroupName, cloudServiceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, cloudServiceName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, cloudServiceName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, cloudServiceName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, cloudServiceName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, cloudServiceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, cloudServiceName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a role from a cloud service. + * @param roleName Name of the role. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + get(roleName, resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ roleName, resourceGroupName, cloudServiceName, options }, getOperationSpec$1); + } + /** + * Gets a list of all roles in a cloud service. Use nextLink property in the response to get the next + * page of roles. Do this till nextLink is null to fetch all the roles. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + _list(resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, options }, listOperationSpec$1); + } + /** + * ListNext + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, cloudServiceName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, nextLink, options }, listNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$3 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles/{roleName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudServiceRole, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + roleName, + ], + headerParameters: [accept], + serializer: serializer$3, +}; +const listOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudServiceRoleListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$3, +}; +const listNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudServiceRoleListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$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 containing CloudServices operations. */ +class CloudServicesImpl { + /** + * Initialize a new instance of the class CloudServices class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of all cloud services in the subscription, regardless of the associated resource group. + * Use nextLink property in the response to get the next page of Cloud Services. Do this till nextLink + * is null to fetch all the Cloud Services. + * @param options The options parameters. + */ + listAll(options) { + const iter = this.listAllPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listAllPagingPage(options, settings); + }, + }; + } + listAllPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listAll(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listAllNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listAllPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listAllPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list of all cloud services under a resource group. Use nextLink property in the response to + * get the next page of Cloud Services. Do this till nextLink is null to fetch all the Cloud Services. + * @param resourceGroupName Name of the resource group. + * @param options The options parameters. + */ + list(resourceGroupName, options) { + const iter = this.listPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(resourceGroupName, options, settings); + }, + }; + } + listPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Create or update a cloud service. Please note some properties can be set only during cloud service + * creation. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginCreateOrUpdate(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: createOrUpdateOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Create or update a cloud service. Please note some properties can be set only during cloud service + * creation. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginCreateOrUpdateAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdate(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Update a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginUpdate(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: updateOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Update a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginUpdateAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginUpdate(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Deletes a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: deleteOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Display information about a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + get(resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, options }, getOperationSpec); + } + /** + * Gets the status of a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + getInstanceView(resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, options }, getInstanceViewOperationSpec); + } + /** + * Gets a list of all cloud services in the subscription, regardless of the associated resource group. + * Use nextLink property in the response to get the next page of Cloud Services. Do this till nextLink + * is null to fetch all the Cloud Services. + * @param options The options parameters. + */ + _listAll(options) { + return this.client.sendOperationRequest({ options }, listAllOperationSpec); + } + /** + * Gets a list of all cloud services under a resource group. Use nextLink property in the response to + * get the next page of Cloud Services. Do this till nextLink is null to fetch all the Cloud Services. + * @param resourceGroupName Name of the resource group. + * @param options The options parameters. + */ + _list(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listOperationSpec); + } + /** + * Starts the cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginStart(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: startOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Starts the cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginStartAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginStart(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Power off the cloud service. Note that resources are still attached and you are getting charged for + * the resources. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginPowerOff(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: powerOffOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Power off the cloud service. Note that resources are still attached and you are getting charged for + * the resources. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginPowerOffAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginPowerOff(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Restarts one or more role instances in a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginRestart(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: restartOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Restarts one or more role instances in a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginRestartAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRestart(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Reimage asynchronous operation reinstalls the operating system on instances of web roles or worker + * roles. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginReimage(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: reimageOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Reimage asynchronous operation reinstalls the operating system on instances of web roles or worker + * roles. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginReimageAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginReimage(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Rebuild Role Instances reinstalls the operating system on instances of web roles or worker roles and + * initializes the storage resources that are used by them. If you do not want to initialize storage + * resources, you can use Reimage Role Instances. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginRebuild(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: rebuildOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Rebuild Role Instances reinstalls the operating system on instances of web roles or worker roles and + * initializes the storage resources that are used by them. If you do not want to initialize storage + * resources, you can use Reimage Role Instances. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginRebuildAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginRebuild(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * Deletes role instances in a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginDeleteInstances(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, options }, + spec: deleteInstancesOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Deletes role instances in a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + beginDeleteInstancesAndWait(resourceGroupName, cloudServiceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDeleteInstances(resourceGroupName, cloudServiceName, options); + return poller.pollUntilDone(); + }); + } + /** + * ListAllNext + * @param nextLink The nextLink from the previous successful call to the ListAll method. + * @param options The options parameters. + */ + _listAllNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listAllNextOperationSpec); + } + /** + * ListNext + * @param resourceGroupName Name of the resource group. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listNextOperationSpec); + } +} +// Operation Specifications +const serializer$2 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: CloudService, + }, + 201: { + bodyMapper: CloudService, + }, + 202: { + bodyMapper: CloudService, + }, + 204: { + bodyMapper: CloudService, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters33, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2, +}; +const updateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: CloudService, + }, + 201: { + bodyMapper: CloudService, + }, + 202: { + bodyMapper: CloudService, + }, + 204: { + bodyMapper: CloudService, + }, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters34, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2, +}; +const deleteOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$2, +}; +const getOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudService, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$2, +}; +const getInstanceViewOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/instanceView", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudServiceInstanceView, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$2, +}; +const listAllOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/cloudServices", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudServiceListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$2, +}; +const listOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudServiceListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$2, +}; +const startOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/start", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$2, +}; +const powerOffOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/poweroff", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$2, +}; +const restartOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/restart", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters35, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2, +}; +const reimageOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/reimage", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters35, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2, +}; +const rebuildOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/rebuild", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters35, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2, +}; +const deleteInstancesOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/delete", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters35, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2, +}; +const listAllNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudServiceListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + ], + headerParameters: [accept], + serializer: serializer$2, +}; +const listNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CloudServiceListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + ], + headerParameters: [accept], + serializer: serializer$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 containing CloudServicesUpdateDomain operations. */ +class CloudServicesUpdateDomainImpl { + /** + * Initialize a new instance of the class CloudServicesUpdateDomain class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of all update domains in a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + listUpdateDomains(resourceGroupName, cloudServiceName, options) { + const iter = this.listUpdateDomainsPagingAll(resourceGroupName, cloudServiceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listUpdateDomainsPagingPage(resourceGroupName, cloudServiceName, options, settings); + }, + }; + } + listUpdateDomainsPagingPage(resourceGroupName, cloudServiceName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listUpdateDomainsPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listUpdateDomains(resourceGroupName, cloudServiceName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listUpdateDomainsNext(resourceGroupName, cloudServiceName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listUpdateDomainsPagingAll(resourceGroupName, cloudServiceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listUpdateDomainsPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listUpdateDomainsPagingPage(resourceGroupName, cloudServiceName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Updates the role instances in the specified update domain. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param updateDomain Specifies an integer value that identifies the update domain. Update domains are + * identified with a zero-based index: the first update domain has an ID of 0, the second has an ID of + * 1, and so on. + * @param options The options parameters. + */ + beginWalkUpdateDomain(resourceGroupName, cloudServiceName, updateDomain, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperationFn = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON(), + }, + }; + }); + const lro = createLroSpec({ + sendOperationFn, + args: { resourceGroupName, cloudServiceName, updateDomain, options }, + spec: walkUpdateDomainOperationSpec, + }); + const poller = yield coreLro.createHttpPoller(lro, { + restoreFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + }); + yield poller.poll(); + return poller; + }); + } + /** + * Updates the role instances in the specified update domain. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param updateDomain Specifies an integer value that identifies the update domain. Update domains are + * identified with a zero-based index: the first update domain has an ID of 0, the second has an ID of + * 1, and so on. + * @param options The options parameters. + */ + beginWalkUpdateDomainAndWait(resourceGroupName, cloudServiceName, updateDomain, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginWalkUpdateDomain(resourceGroupName, cloudServiceName, updateDomain, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets the specified update domain of a cloud service. Use nextLink property in the response to get + * the next page of update domains. Do this till nextLink is null to fetch all the update domains. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param updateDomain Specifies an integer value that identifies the update domain. Update domains are + * identified with a zero-based index: the first update domain has an ID of 0, the second has an ID of + * 1, and so on. + * @param options The options parameters. + */ + getUpdateDomain(resourceGroupName, cloudServiceName, updateDomain, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, updateDomain, options }, getUpdateDomainOperationSpec); + } + /** + * Gets a list of all update domains in a cloud service. + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param options The options parameters. + */ + _listUpdateDomains(resourceGroupName, cloudServiceName, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, options }, listUpdateDomainsOperationSpec); + } + /** + * ListUpdateDomainsNext + * @param resourceGroupName Name of the resource group. + * @param cloudServiceName Name of the cloud service. + * @param nextLink The nextLink from the previous successful call to the ListUpdateDomains method. + * @param options The options parameters. + */ + _listUpdateDomainsNext(resourceGroupName, cloudServiceName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, cloudServiceName, nextLink, options }, listUpdateDomainsNextOperationSpec); + } +} +// Operation Specifications +const serializer$1 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const walkUpdateDomainOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", + httpMethod: "PUT", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError, + }, + }, + requestBody: parameters36, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + updateDomain, + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$1, +}; +const getUpdateDomainOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: UpdateDomain, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + updateDomain, + ], + headerParameters: [accept], + serializer: serializer$1, +}; +const listUpdateDomainsOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: UpdateDomainListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$1, +}; +const listUpdateDomainsNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: UpdateDomainListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName, + cloudServiceName, + ], + headerParameters: [accept], + serializer: serializer$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 containing CloudServiceOperatingSystems operations. */ +class CloudServiceOperatingSystemsImpl { + /** + * Initialize a new instance of the class CloudServiceOperatingSystems class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of all guest operating system versions available to be specified in the XML service + * configuration (.cscfg) for a cloud service. Use nextLink property in the response to get the next + * page of OS versions. Do this till nextLink is null to fetch all the OS versions. + * @param location Name of the location that the OS versions pertain to. + * @param options The options parameters. + */ + listOSVersions(location, options) { + const iter = this.listOSVersionsPagingAll(location, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listOSVersionsPagingPage(location, options, settings); + }, + }; + } + listOSVersionsPagingPage(location, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listOSVersionsPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listOSVersions(location, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listOSVersionsNext(location, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listOSVersionsPagingAll(location, options) { + return tslib.__asyncGenerator(this, arguments, function* listOSVersionsPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listOSVersionsPagingPage(location, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list of all guest operating system families available to be specified in the XML service + * configuration (.cscfg) for a cloud service. Use nextLink property in the response to get the next + * page of OS Families. Do this till nextLink is null to fetch all the OS Families. + * @param location Name of the location that the OS families pertain to. + * @param options The options parameters. + */ + listOSFamilies(location, options) { + const iter = this.listOSFamiliesPagingAll(location, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listOSFamiliesPagingPage(location, options, settings); + }, + }; + } + listOSFamiliesPagingPage(location, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listOSFamiliesPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listOSFamilies(location, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listOSFamiliesNext(location, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listOSFamiliesPagingAll(location, options) { + return tslib.__asyncGenerator(this, arguments, function* listOSFamiliesPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listOSFamiliesPagingPage(location, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets properties of a guest operating system version that can be specified in the XML service + * configuration (.cscfg) for a cloud service. + * @param location Name of the location that the OS version pertains to. + * @param osVersionName Name of the OS version. + * @param options The options parameters. + */ + getOSVersion(location, osVersionName, options) { + return this.client.sendOperationRequest({ location, osVersionName, options }, getOSVersionOperationSpec); + } + /** + * Gets a list of all guest operating system versions available to be specified in the XML service + * configuration (.cscfg) for a cloud service. Use nextLink property in the response to get the next + * page of OS versions. Do this till nextLink is null to fetch all the OS versions. + * @param location Name of the location that the OS versions pertain to. + * @param options The options parameters. + */ + _listOSVersions(location, options) { + return this.client.sendOperationRequest({ location, options }, listOSVersionsOperationSpec); + } + /** + * Gets properties of a guest operating system family that can be specified in the XML service + * configuration (.cscfg) for a cloud service. + * @param location Name of the location that the OS family pertains to. + * @param osFamilyName Name of the OS family. + * @param options The options parameters. + */ + getOSFamily(location, osFamilyName, options) { + return this.client.sendOperationRequest({ location, osFamilyName, options }, getOSFamilyOperationSpec); + } + /** + * Gets a list of all guest operating system families available to be specified in the XML service + * configuration (.cscfg) for a cloud service. Use nextLink property in the response to get the next + * page of OS Families. Do this till nextLink is null to fetch all the OS Families. + * @param location Name of the location that the OS families pertain to. + * @param options The options parameters. + */ + _listOSFamilies(location, options) { + return this.client.sendOperationRequest({ location, options }, listOSFamiliesOperationSpec); + } + /** + * ListOSVersionsNext + * @param location Name of the location that the OS versions pertain to. + * @param nextLink The nextLink from the previous successful call to the ListOSVersions method. + * @param options The options parameters. + */ + _listOSVersionsNext(location, nextLink, options) { + return this.client.sendOperationRequest({ location, nextLink, options }, listOSVersionsNextOperationSpec); + } + /** + * ListOSFamiliesNext + * @param location Name of the location that the OS families pertain to. + * @param nextLink The nextLink from the previous successful call to the ListOSFamilies method. + * @param options The options parameters. + */ + _listOSFamiliesNext(location, nextLink, options) { + return this.client.sendOperationRequest({ location, nextLink, options }, listOSFamiliesNextOperationSpec); + } +} +// Operation Specifications +const serializer = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOSVersionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions/{osVersionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OSVersion, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + location1, + osVersionName, + ], + headerParameters: [accept], + serializer, +}; +const listOSVersionsOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OSVersionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + location1, + ], + headerParameters: [accept], + serializer, +}; +const getOSFamilyOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies/{osFamilyName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OSFamily, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + location1, + osFamilyName, + ], + headerParameters: [accept], + serializer, +}; +const listOSFamiliesOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OSFamilyListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + location1, + ], + headerParameters: [accept], + serializer, +}; +const listOSVersionsNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OSVersionListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + location1, + ], + headerParameters: [accept], + serializer, +}; +const listOSFamiliesNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OSFamilyListResult, + }, + default: { + bodyMapper: CloudError, + }, + }, + urlParameters: [ + $host, + subscriptionId, + nextLink, + location1, + ], + headerParameters: [accept], + serializer, +}; + +/* + * 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 ComputeManagementClient extends coreClient__namespace.ServiceClient { + /** + * Initializes a new instance of the ComputeManagementClient class. + * @param credentials Subscription credentials which uniquely identify client subscription. + * @param subscriptionId Subscription credentials which uniquely identify Microsoft Azure subscription. + * The subscription ID forms part of the URI for every service call. + * @param options The parameter options + */ + constructor(credentials, subscriptionId, options) { + var _a, _b, _c; + if (credentials === undefined) { + throw new Error("'credentials' cannot be null"); + } + if (subscriptionId === undefined) { + throw new Error("'subscriptionId' cannot be null"); + } + // Initializing default values for options + if (!options) { + options = {}; + } + const defaults = { + requestContentType: "application/json; charset=utf-8", + credential: credentials, + }; + const packageDetails = `azsdk-js-arm-compute/22.1.0`; + const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix + ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` + : `${packageDetails}`; + const optionsWithDefaults = Object.assign(Object.assign(Object.assign({}, defaults), options), { userAgentOptions: { + userAgentPrefix, + }, endpoint: (_b = (_a = options.endpoint) !== null && _a !== void 0 ? _a : options.baseUri) !== null && _b !== void 0 ? _b : "https://management.azure.com" }); + super(optionsWithDefaults); + let bearerTokenAuthenticationPolicyFound = false; + if ((options === null || options === void 0 ? void 0 : options.pipeline) && options.pipeline.getOrderedPolicies().length > 0) { + const pipelinePolicies = options.pipeline.getOrderedPolicies(); + bearerTokenAuthenticationPolicyFound = pipelinePolicies.some((pipelinePolicy) => pipelinePolicy.name === + coreRestPipeline__namespace.bearerTokenAuthenticationPolicyName); + } + if (!options || + !options.pipeline || + options.pipeline.getOrderedPolicies().length == 0 || + !bearerTokenAuthenticationPolicyFound) { + this.pipeline.removePolicy({ + name: coreRestPipeline__namespace.bearerTokenAuthenticationPolicyName, + }); + this.pipeline.addPolicy(coreRestPipeline__namespace.bearerTokenAuthenticationPolicy({ + credential: credentials, + scopes: (_c = optionsWithDefaults.credentialScopes) !== null && _c !== void 0 ? _c : `${optionsWithDefaults.endpoint}/.default`, + challengeCallbacks: { + authorizeRequestOnChallenge: coreClient__namespace.authorizeRequestOnClaimChallenge, + }, + })); + } + // Parameter assignments + this.subscriptionId = subscriptionId; + // Assigning values to Constant parameters + this.$host = options.$host || "https://management.azure.com"; + this.operations = new OperationsImpl(this); + this.usageOperations = new UsageOperationsImpl(this); + this.virtualMachineSizes = new VirtualMachineSizesImpl(this); + this.virtualMachineScaleSets = new VirtualMachineScaleSetsImpl(this); + this.virtualMachineScaleSetExtensions = + new VirtualMachineScaleSetExtensionsImpl(this); + this.virtualMachineScaleSetRollingUpgrades = + new VirtualMachineScaleSetRollingUpgradesImpl(this); + this.virtualMachineScaleSetVMExtensions = + new VirtualMachineScaleSetVMExtensionsImpl(this); + this.virtualMachineScaleSetVMs = new VirtualMachineScaleSetVMsImpl(this); + this.virtualMachineExtensions = new VirtualMachineExtensionsImpl(this); + this.virtualMachines = new VirtualMachinesImpl(this); + this.virtualMachineImages = new VirtualMachineImagesImpl(this); + this.virtualMachineImagesEdgeZone = new VirtualMachineImagesEdgeZoneImpl(this); + this.virtualMachineExtensionImages = new VirtualMachineExtensionImagesImpl(this); + this.availabilitySets = new AvailabilitySetsImpl(this); + this.proximityPlacementGroups = new ProximityPlacementGroupsImpl(this); + this.dedicatedHostGroups = new DedicatedHostGroupsImpl(this); + this.dedicatedHosts = new DedicatedHostsImpl(this); + this.sshPublicKeys = new SshPublicKeysImpl(this); + this.images = new ImagesImpl(this); + this.restorePointCollections = new RestorePointCollectionsImpl(this); + this.restorePoints = new RestorePointsImpl(this); + this.capacityReservationGroups = new CapacityReservationGroupsImpl(this); + this.capacityReservations = new CapacityReservationsImpl(this); + this.logAnalytics = new LogAnalyticsImpl(this); + this.virtualMachineRunCommands = new VirtualMachineRunCommandsImpl(this); + this.virtualMachineScaleSetVMRunCommands = + new VirtualMachineScaleSetVMRunCommandsImpl(this); + this.disks = new DisksImpl(this); + this.diskAccesses = new DiskAccessesImpl(this); + this.diskEncryptionSets = new DiskEncryptionSetsImpl(this); + this.diskRestorePointOperations = new DiskRestorePointOperationsImpl(this); + this.snapshots = new SnapshotsImpl(this); + this.resourceSkus = new ResourceSkusImpl(this); + this.galleries = new GalleriesImpl(this); + this.galleryImages = new GalleryImagesImpl(this); + this.galleryImageVersions = new GalleryImageVersionsImpl(this); + this.galleryApplications = new GalleryApplicationsImpl(this); + this.galleryApplicationVersions = new GalleryApplicationVersionsImpl(this); + this.gallerySharingProfile = new GallerySharingProfileImpl(this); + this.sharedGalleries = new SharedGalleriesImpl(this); + this.sharedGalleryImages = new SharedGalleryImagesImpl(this); + this.sharedGalleryImageVersions = new SharedGalleryImageVersionsImpl(this); + this.communityGalleries = new CommunityGalleriesImpl(this); + this.communityGalleryImages = new CommunityGalleryImagesImpl(this); + this.communityGalleryImageVersions = new CommunityGalleryImageVersionsImpl(this); + this.cloudServiceRoleInstances = new CloudServiceRoleInstancesImpl(this); + this.cloudServiceRoles = new CloudServiceRolesImpl(this); + this.cloudServices = new CloudServicesImpl(this); + this.cloudServicesUpdateDomain = new CloudServicesUpdateDomainImpl(this); + this.cloudServiceOperatingSystems = new CloudServiceOperatingSystemsImpl(this); + } +} + +exports.ComputeManagementClient = ComputeManagementClient; +exports.getContinuationToken = getContinuationToken; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 3436: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var coreClient = __nccwpck_require__(160); +var coreRestPipeline = __nccwpck_require__(778); +var tslib = __nccwpck_require__(1860); + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n["default"] = e; + return Object.freeze(n); +} + +var coreClient__namespace = /*#__PURE__*/_interopNamespace(coreClient); +var coreRestPipeline__namespace = /*#__PURE__*/_interopNamespace(coreRestPipeline); + +/* + * 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. + */ +const pageMap = new WeakMap(); +/** + * Given the last `.value` produced by the `byPage` iterator, + * returns a continuation token that can be used to begin paging from + * that point later. + * @param page An object from accessing `value` on the IteratorResult from a `byPage` iterator. + * @returns The continuation token that can be passed into byPage() during future calls. + */ +function getContinuationToken(page) { + var _a; + if (typeof page !== "object" || page === null) { + return undefined; + } + return (_a = pageMap.get(page)) === null || _a === void 0 ? void 0 : _a.continuationToken; +} +function setContinuationToken(page, continuationToken) { + var _a; + if (typeof page !== "object" || page === null || !continuationToken) { + return; + } + const pageInfo = (_a = pageMap.get(page)) !== null && _a !== void 0 ? _a : {}; + pageInfo.continuationToken = continuationToken; + pageMap.set(page, pageInfo); +} + +/* + * 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. + */ +/** Known values of {@link AliasPathTokenType} that the service accepts. */ +exports.KnownAliasPathTokenType = void 0; +(function (KnownAliasPathTokenType) { + /** The token type is not specified. */ + KnownAliasPathTokenType["NotSpecified"] = "NotSpecified"; + /** The token type can be anything. */ + KnownAliasPathTokenType["Any"] = "Any"; + /** The token type is string. */ + KnownAliasPathTokenType["String"] = "String"; + /** The token type is object. */ + KnownAliasPathTokenType["Object"] = "Object"; + /** The token type is array. */ + KnownAliasPathTokenType["Array"] = "Array"; + /** The token type is integer. */ + KnownAliasPathTokenType["Integer"] = "Integer"; + /** The token type is number. */ + KnownAliasPathTokenType["Number"] = "Number"; + /** The token type is boolean. */ + KnownAliasPathTokenType["Boolean"] = "Boolean"; +})(exports.KnownAliasPathTokenType || (exports.KnownAliasPathTokenType = {})); +/** Known values of {@link AliasPathAttributes} that the service accepts. */ +exports.KnownAliasPathAttributes = void 0; +(function (KnownAliasPathAttributes) { + /** The token that the alias path is referring to has no attributes. */ + KnownAliasPathAttributes["None"] = "None"; + /** The token that the alias path is referring to is modifiable by policies with 'modify' effect. */ + KnownAliasPathAttributes["Modifiable"] = "Modifiable"; +})(exports.KnownAliasPathAttributes || (exports.KnownAliasPathAttributes = {})); +/** Known values of {@link EnforcementMode} that the service accepts. */ +exports.KnownEnforcementMode = void 0; +(function (KnownEnforcementMode) { + /** The policy effect is enforced during resource creation or update. */ + KnownEnforcementMode["Default"] = "Default"; + /** The policy effect is not enforced during resource creation or update. */ + KnownEnforcementMode["DoNotEnforce"] = "DoNotEnforce"; +})(exports.KnownEnforcementMode || (exports.KnownEnforcementMode = {})); +/** Known values of {@link CreatedByType} that the service accepts. */ +exports.KnownCreatedByType = void 0; +(function (KnownCreatedByType) { + /** User */ + KnownCreatedByType["User"] = "User"; + /** Application */ + KnownCreatedByType["Application"] = "Application"; + /** ManagedIdentity */ + KnownCreatedByType["ManagedIdentity"] = "ManagedIdentity"; + /** Key */ + KnownCreatedByType["Key"] = "Key"; +})(exports.KnownCreatedByType || (exports.KnownCreatedByType = {})); +/** Known values of {@link PolicyType} that the service accepts. */ +exports.KnownPolicyType = void 0; +(function (KnownPolicyType) { + /** NotSpecified */ + KnownPolicyType["NotSpecified"] = "NotSpecified"; + /** BuiltIn */ + KnownPolicyType["BuiltIn"] = "BuiltIn"; + /** Custom */ + KnownPolicyType["Custom"] = "Custom"; + /** Static */ + KnownPolicyType["Static"] = "Static"; +})(exports.KnownPolicyType || (exports.KnownPolicyType = {})); +/** Known values of {@link ParameterType} that the service accepts. */ +exports.KnownParameterType = void 0; +(function (KnownParameterType) { + /** String */ + KnownParameterType["String"] = "String"; + /** Array */ + KnownParameterType["Array"] = "Array"; + /** Object */ + KnownParameterType["Object"] = "Object"; + /** Boolean */ + KnownParameterType["Boolean"] = "Boolean"; + /** Integer */ + KnownParameterType["Integer"] = "Integer"; + /** Float */ + KnownParameterType["Float"] = "Float"; + /** DateTime */ + KnownParameterType["DateTime"] = "DateTime"; +})(exports.KnownParameterType || (exports.KnownParameterType = {})); +/** Known values of {@link ExemptionCategory} that the service accepts. */ +exports.KnownExemptionCategory = void 0; +(function (KnownExemptionCategory) { + /** This category of exemptions usually means the scope is not applicable for the policy. */ + KnownExemptionCategory["Waiver"] = "Waiver"; + /** This category of exemptions usually means the mitigation actions have been applied to the scope. */ + KnownExemptionCategory["Mitigated"] = "Mitigated"; +})(exports.KnownExemptionCategory || (exports.KnownExemptionCategory = {})); + +/* + * 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. + */ +const DataPolicyManifest = { + type: { + name: "Composite", + className: "DataPolicyManifest", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + namespaces: { + serializedName: "properties.namespaces", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + policyMode: { + serializedName: "properties.policyMode", + type: { + name: "String" + } + }, + isBuiltInOnly: { + serializedName: "properties.isBuiltInOnly", + type: { + name: "Boolean" + } + }, + resourceTypeAliases: { + serializedName: "properties.resourceTypeAliases", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceTypeAliases" + } + } + } + }, + effects: { + serializedName: "properties.effects", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DataEffect" + } + } + } + }, + fieldValues: { + serializedName: "properties.fieldValues", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + standard: { + serializedName: "properties.resourceFunctions.standard", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + custom: { + serializedName: "properties.resourceFunctions.custom", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DataManifestCustomResourceFunctionDefinition" + } + } + } + } + } + } +}; +const ResourceTypeAliases = { + type: { + name: "Composite", + className: "ResourceTypeAliases", + modelProperties: { + resourceType: { + serializedName: "resourceType", + type: { + name: "String" + } + }, + aliases: { + serializedName: "aliases", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Alias" + } + } + } + } + } + } +}; +const Alias = { + type: { + name: "Composite", + className: "Alias", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + paths: { + serializedName: "paths", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AliasPath" + } + } + } + }, + type: { + serializedName: "type", + type: { + name: "Enum", + allowedValues: ["NotSpecified", "PlainText", "Mask"] + } + }, + defaultPath: { + serializedName: "defaultPath", + type: { + name: "String" + } + }, + defaultPattern: { + serializedName: "defaultPattern", + type: { + name: "Composite", + className: "AliasPattern" + } + }, + defaultMetadata: { + serializedName: "defaultMetadata", + type: { + name: "Composite", + className: "AliasPathMetadata" + } + } + } + } +}; +const AliasPath = { + type: { + name: "Composite", + className: "AliasPath", + modelProperties: { + path: { + serializedName: "path", + type: { + name: "String" + } + }, + apiVersions: { + serializedName: "apiVersions", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + pattern: { + serializedName: "pattern", + type: { + name: "Composite", + className: "AliasPattern" + } + }, + metadata: { + serializedName: "metadata", + type: { + name: "Composite", + className: "AliasPathMetadata" + } + } + } + } +}; +const AliasPattern = { + type: { + name: "Composite", + className: "AliasPattern", + modelProperties: { + phrase: { + serializedName: "phrase", + type: { + name: "String" + } + }, + variable: { + serializedName: "variable", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "Enum", + allowedValues: ["NotSpecified", "Extract"] + } + } + } + } +}; +const AliasPathMetadata = { + type: { + name: "Composite", + className: "AliasPathMetadata", + modelProperties: { + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + attributes: { + serializedName: "attributes", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const DataEffect = { + type: { + name: "Composite", + className: "DataEffect", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + detailsSchema: { + serializedName: "detailsSchema", + type: { + name: "any" + } + } + } + } +}; +const DataManifestCustomResourceFunctionDefinition = { + type: { + name: "Composite", + className: "DataManifestCustomResourceFunctionDefinition", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + fullyQualifiedResourceType: { + serializedName: "fullyQualifiedResourceType", + type: { + name: "String" + } + }, + defaultProperties: { + serializedName: "defaultProperties", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + allowCustomProperties: { + serializedName: "allowCustomProperties", + type: { + name: "Boolean" + } + } + } + } +}; +const CloudError = { + type: { + name: "Composite", + className: "CloudError", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ErrorResponse" + } + } + } + } +}; +const ErrorResponse = { + type: { + name: "Composite", + className: "ErrorResponse", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String" + } + }, + target: { + serializedName: "target", + readOnly: true, + type: { + name: "String" + } + }, + details: { + serializedName: "details", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorResponse" + } + } + } + }, + additionalInfo: { + serializedName: "additionalInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorAdditionalInfo" + } + } + } + } + } + } +}; +const ErrorAdditionalInfo = { + type: { + name: "Composite", + className: "ErrorAdditionalInfo", + modelProperties: { + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + info: { + serializedName: "info", + readOnly: true, + type: { + name: "any" + } + } + } + } +}; +const DataPolicyManifestListResult = { + type: { + name: "Composite", + className: "DataPolicyManifestListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DataPolicyManifest" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const PolicyAssignment = { + type: { + name: "Composite", + className: "PolicyAssignment", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + location: { + serializedName: "location", + type: { + name: "String" + } + }, + identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "Identity" + } + }, + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, + displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, + policyDefinitionId: { + serializedName: "properties.policyDefinitionId", + type: { + name: "String" + } + }, + scope: { + serializedName: "properties.scope", + readOnly: true, + type: { + name: "String" + } + }, + notScopes: { + serializedName: "properties.notScopes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + parameters: { + serializedName: "properties.parameters", + type: { + name: "Dictionary", + value: { + type: { name: "Composite", className: "ParameterValuesValue" } + } + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + metadata: { + serializedName: "properties.metadata", + type: { + name: "any" + } + }, + enforcementMode: { + defaultValue: "Default", + serializedName: "properties.enforcementMode", + type: { + name: "String" + } + }, + nonComplianceMessages: { + serializedName: "properties.nonComplianceMessages", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "NonComplianceMessage" + } + } + } + } + } + } +}; +const ParameterValuesValue = { + type: { + name: "Composite", + className: "ParameterValuesValue", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "any" + } + } + } + } +}; +const NonComplianceMessage = { + type: { + name: "Composite", + className: "NonComplianceMessage", + modelProperties: { + message: { + serializedName: "message", + required: true, + type: { + name: "String" + } + }, + policyDefinitionReferenceId: { + serializedName: "policyDefinitionReferenceId", + type: { + name: "String" + } + } + } + } +}; +const Identity = { + type: { + name: "Composite", + className: "Identity", + modelProperties: { + principalId: { + serializedName: "principalId", + readOnly: true, + type: { + name: "String" + } + }, + tenantId: { + serializedName: "tenantId", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "Enum", + allowedValues: ["SystemAssigned", "UserAssigned", "None"] + } + }, + userAssignedIdentities: { + serializedName: "userAssignedIdentities", + type: { + name: "Dictionary", + value: { + type: { + name: "Composite", + className: "UserAssignedIdentitiesValue" + } + } + } + } + } + } +}; +const UserAssignedIdentitiesValue = { + type: { + name: "Composite", + className: "UserAssignedIdentitiesValue", + modelProperties: { + principalId: { + serializedName: "principalId", + readOnly: true, + type: { + name: "String" + } + }, + clientId: { + serializedName: "clientId", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SystemData = { + type: { + name: "Composite", + className: "SystemData", + modelProperties: { + createdBy: { + serializedName: "createdBy", + type: { + name: "String" + } + }, + createdByType: { + serializedName: "createdByType", + type: { + name: "String" + } + }, + createdAt: { + serializedName: "createdAt", + type: { + name: "DateTime" + } + }, + lastModifiedBy: { + serializedName: "lastModifiedBy", + type: { + name: "String" + } + }, + lastModifiedByType: { + serializedName: "lastModifiedByType", + type: { + name: "String" + } + }, + lastModifiedAt: { + serializedName: "lastModifiedAt", + type: { + name: "DateTime" + } + } + } + } +}; +const PolicyAssignmentUpdate = { + type: { + name: "Composite", + className: "PolicyAssignmentUpdate", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String" + } + }, + identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "Identity" + } + } + } + } +}; +const PolicyAssignmentListResult = { + type: { + name: "Composite", + className: "PolicyAssignmentListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyAssignment" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const PolicyDefinition = { + type: { + name: "Composite", + className: "PolicyDefinition", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, + policyType: { + serializedName: "properties.policyType", + type: { + name: "String" + } + }, + mode: { + defaultValue: "Indexed", + serializedName: "properties.mode", + type: { + name: "String" + } + }, + displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + policyRule: { + serializedName: "properties.policyRule", + type: { + name: "any" + } + }, + metadata: { + serializedName: "properties.metadata", + type: { + name: "any" + } + }, + parameters: { + serializedName: "properties.parameters", + type: { + name: "Dictionary", + value: { + type: { name: "Composite", className: "ParameterDefinitionsValue" } + } + } + } + } + } +}; +const ParameterDefinitionsValue = { + type: { + name: "Composite", + className: "ParameterDefinitionsValue", + modelProperties: { + type: { + serializedName: "type", + type: { + name: "String" + } + }, + allowedValues: { + serializedName: "allowedValues", + type: { + name: "Sequence", + element: { + type: { + name: "any" + } + } + } + }, + defaultValue: { + serializedName: "defaultValue", + type: { + name: "any" + } + }, + metadata: { + serializedName: "metadata", + type: { + name: "Composite", + className: "ParameterDefinitionsValueMetadata" + } + } + } + } +}; +const ParameterDefinitionsValueMetadata = { + type: { + name: "Composite", + className: "ParameterDefinitionsValueMetadata", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + }, + strongType: { + serializedName: "strongType", + type: { + name: "String" + } + }, + assignPermissions: { + serializedName: "assignPermissions", + type: { + name: "Boolean" + } + } + } + } +}; +const PolicyDefinitionListResult = { + type: { + name: "Composite", + className: "PolicyDefinitionListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyDefinition" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const PolicySetDefinition = { + type: { + name: "Composite", + className: "PolicySetDefinition", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, + policyType: { + serializedName: "properties.policyType", + type: { + name: "String" + } + }, + displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + metadata: { + serializedName: "properties.metadata", + type: { + name: "any" + } + }, + parameters: { + serializedName: "properties.parameters", + type: { + name: "Dictionary", + value: { + type: { name: "Composite", className: "ParameterDefinitionsValue" } + } + } + }, + policyDefinitions: { + serializedName: "properties.policyDefinitions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyDefinitionReference" + } + } + } + }, + policyDefinitionGroups: { + serializedName: "properties.policyDefinitionGroups", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyDefinitionGroup" + } + } + } + } + } + } +}; +const PolicyDefinitionReference = { + type: { + name: "Composite", + className: "PolicyDefinitionReference", + modelProperties: { + policyDefinitionId: { + serializedName: "policyDefinitionId", + required: true, + type: { + name: "String" + } + }, + parameters: { + serializedName: "parameters", + type: { + name: "Dictionary", + value: { + type: { name: "Composite", className: "ParameterValuesValue" } + } + } + }, + policyDefinitionReferenceId: { + serializedName: "policyDefinitionReferenceId", + type: { + name: "String" + } + }, + groupNames: { + serializedName: "groupNames", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const PolicyDefinitionGroup = { + type: { + name: "Composite", + className: "PolicyDefinitionGroup", + modelProperties: { + name: { + serializedName: "name", + required: true, + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + category: { + serializedName: "category", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + }, + additionalMetadataId: { + serializedName: "additionalMetadataId", + type: { + name: "String" + } + } + } + } +}; +const PolicySetDefinitionListResult = { + type: { + name: "Composite", + className: "PolicySetDefinitionListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicySetDefinition" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const PolicyExemption = { + type: { + name: "Composite", + className: "PolicyExemption", + modelProperties: { + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + policyAssignmentId: { + serializedName: "properties.policyAssignmentId", + required: true, + type: { + name: "String" + } + }, + policyDefinitionReferenceIds: { + serializedName: "properties.policyDefinitionReferenceIds", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + exemptionCategory: { + serializedName: "properties.exemptionCategory", + required: true, + type: { + name: "String" + } + }, + expiresOn: { + serializedName: "properties.expiresOn", + type: { + name: "DateTime" + } + }, + displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, + description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, + metadata: { + serializedName: "properties.metadata", + type: { + name: "any" + } + } + } + } +}; +const PolicyExemptionListResult = { + type: { + name: "Composite", + className: "PolicyExemptionListResult", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyExemption" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; + +var Mappers = /*#__PURE__*/Object.freeze({ + __proto__: null, + DataPolicyManifest: DataPolicyManifest, + ResourceTypeAliases: ResourceTypeAliases, + Alias: Alias, + AliasPath: AliasPath, + AliasPattern: AliasPattern, + AliasPathMetadata: AliasPathMetadata, + DataEffect: DataEffect, + DataManifestCustomResourceFunctionDefinition: DataManifestCustomResourceFunctionDefinition, + CloudError: CloudError, + ErrorResponse: ErrorResponse, + ErrorAdditionalInfo: ErrorAdditionalInfo, + DataPolicyManifestListResult: DataPolicyManifestListResult, + PolicyAssignment: PolicyAssignment, + ParameterValuesValue: ParameterValuesValue, + NonComplianceMessage: NonComplianceMessage, + Identity: Identity, + UserAssignedIdentitiesValue: UserAssignedIdentitiesValue, + SystemData: SystemData, + PolicyAssignmentUpdate: PolicyAssignmentUpdate, + PolicyAssignmentListResult: PolicyAssignmentListResult, + PolicyDefinition: PolicyDefinition, + ParameterDefinitionsValue: ParameterDefinitionsValue, + ParameterDefinitionsValueMetadata: ParameterDefinitionsValueMetadata, + PolicyDefinitionListResult: PolicyDefinitionListResult, + PolicySetDefinition: PolicySetDefinition, + PolicyDefinitionReference: PolicyDefinitionReference, + PolicyDefinitionGroup: PolicyDefinitionGroup, + PolicySetDefinitionListResult: PolicySetDefinitionListResult, + PolicyExemption: PolicyExemption, + PolicyExemptionListResult: PolicyExemptionListResult +}); + +/* + * 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. + */ +const accept = { + parameterPath: "accept", + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Accept", + type: { + name: "String" + } + } +}; +const $host = { + parameterPath: "$host", + mapper: { + serializedName: "$host", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const policyMode = { + parameterPath: "policyMode", + mapper: { + serializedName: "policyMode", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2020-09-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const filter = { + parameterPath: ["options", "filter"], + mapper: { + serializedName: "$filter", + type: { + name: "String" + } + }, + skipEncoding: true +}; +const nextLink = { + parameterPath: "nextLink", + mapper: { + serializedName: "nextLink", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const scope = { + parameterPath: "scope", + mapper: { + serializedName: "scope", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const policyAssignmentName = { + parameterPath: "policyAssignmentName", + mapper: { + serializedName: "policyAssignmentName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion1 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-06-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const contentType = { + parameterPath: ["options", "contentType"], + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Content-Type", + type: { + name: "String" + } + } +}; +const parameters = { + parameterPath: "parameters", + mapper: PolicyAssignment +}; +const parameters1 = { + parameterPath: "parameters", + mapper: PolicyAssignmentUpdate +}; +const resourceGroupName = { + parameterPath: "resourceGroupName", + mapper: { + constraints: { + Pattern: new RegExp("^[-\\w\\._\\(\\)]+$"), + MaxLength: 90, + MinLength: 1 + }, + serializedName: "resourceGroupName", + required: true, + type: { + name: "String" + } + } +}; +const top = { + parameterPath: ["options", "top"], + mapper: { + constraints: { + InclusiveMaximum: 1000, + InclusiveMinimum: 1 + }, + serializedName: "$top", + type: { + name: "Number" + } + } +}; +const subscriptionId = { + parameterPath: "subscriptionId", + mapper: { + serializedName: "subscriptionId", + required: true, + type: { + name: "String" + } + } +}; +const resourceProviderNamespace = { + parameterPath: "resourceProviderNamespace", + mapper: { + serializedName: "resourceProviderNamespace", + required: true, + type: { + name: "String" + } + } +}; +const parentResourcePath = { + parameterPath: "parentResourcePath", + mapper: { + serializedName: "parentResourcePath", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const resourceType = { + parameterPath: "resourceType", + mapper: { + serializedName: "resourceType", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const resourceName = { + parameterPath: "resourceName", + mapper: { + serializedName: "resourceName", + required: true, + type: { + name: "String" + } + } +}; +const managementGroupId = { + parameterPath: "managementGroupId", + mapper: { + serializedName: "managementGroupId", + required: true, + type: { + name: "String" + } + } +}; +const policyAssignmentId = { + parameterPath: "policyAssignmentId", + mapper: { + serializedName: "policyAssignmentId", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const parameters2 = { + parameterPath: "parameters", + mapper: PolicyDefinition +}; +const policyDefinitionName = { + parameterPath: "policyDefinitionName", + mapper: { + serializedName: "policyDefinitionName", + required: true, + type: { + name: "String" + } + } +}; +const parameters3 = { + parameterPath: "parameters", + mapper: PolicySetDefinition +}; +const policySetDefinitionName = { + parameterPath: "policySetDefinitionName", + mapper: { + serializedName: "policySetDefinitionName", + required: true, + type: { + name: "String" + } + } +}; +const policyExemptionName = { + parameterPath: "policyExemptionName", + mapper: { + serializedName: "policyExemptionName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion2 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2020-07-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const parameters4 = { + parameterPath: "parameters", + mapper: PolicyExemption +}; + +/* + * 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 containing DataPolicyManifests operations. */ +class DataPolicyManifestsImpl { + /** + * Initialize a new instance of the class DataPolicyManifests class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * This operation retrieves a list of all the data policy manifests that match the optional given + * $filter. Valid values for $filter are: "$filter=namespace eq '{0}'". If $filter is not provided, the + * unfiltered list includes all data policy manifests for data resource types. If $filter=namespace is + * provided, the returned list only includes all data policy manifests that have a namespace matching + * the provided value. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + } + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * This operation retrieves the data policy manifest with the given policy mode. + * @param policyMode The policy mode of the data policy manifest to get. + * @param options The options parameters. + */ + getByPolicyMode(policyMode, options) { + return this.client.sendOperationRequest({ policyMode, options }, getByPolicyModeOperationSpec); + } + /** + * This operation retrieves a list of all the data policy manifests that match the optional given + * $filter. Valid values for $filter are: "$filter=namespace eq '{0}'". If $filter is not provided, the + * unfiltered list includes all data policy manifests for data resource types. If $filter=namespace is + * provided, the returned list only includes all data policy manifests that have a namespace matching + * the provided value. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$4); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$4); + } +} +// Operation Specifications +const serializer$4 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getByPolicyModeOperationSpec = { + path: "/providers/Microsoft.Authorization/dataPolicyManifests/{policyMode}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DataPolicyManifest + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion], + urlParameters: [$host, policyMode], + headerParameters: [accept], + serializer: serializer$4 +}; +const listOperationSpec$4 = { + path: "/providers/Microsoft.Authorization/dataPolicyManifests", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DataPolicyManifestListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion, filter], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$4 +}; +const listNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DataPolicyManifestListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink], + headerParameters: [accept], + serializer: serializer$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 containing PolicyAssignments operations. */ +class PolicyAssignmentsImpl { + /** + * Initialize a new instance of the class PolicyAssignments class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * This operation retrieves the list of all policy assignments associated with the given resource group + * in the given subscription that match the optional given $filter. Valid values for $filter are: + * 'atScope()', 'atExactScope()' or 'policyDefinitionId eq '{value}''. If $filter is not provided, the + * unfiltered list includes all policy assignments associated with the resource group, including those + * that apply directly or apply from containing scopes, as well as any applied to resources contained + * within the resource group. If $filter=atScope() is provided, the returned list includes all policy + * assignments that apply to the resource group, which is everything in the unfiltered list except + * those applied to resources contained within the resource group. If $filter=atExactScope() is + * provided, the returned list only includes all policy assignments that at the resource group. If + * $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy + * assignments of the policy definition whose id is {value} that apply to the resource group. + * @param resourceGroupName The name of the resource group that contains policy assignments. + * @param options The options parameters. + */ + listForResourceGroup(resourceGroupName, options) { + const iter = this.listForResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourceGroupPagingPage(resourceGroupName, options, settings); + } + }; + } + listForResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listForResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * This operation retrieves the list of all policy assignments associated with the specified resource + * in the given resource group and subscription that match the optional given $filter. Valid values for + * $filter are: 'atScope()', 'atExactScope()' or 'policyDefinitionId eq '{value}''. If $filter is not + * provided, the unfiltered list includes all policy assignments associated with the resource, + * including those that apply directly or from all containing scopes, as well as any applied to + * resources contained within the resource. If $filter=atScope() is provided, the returned list + * includes all policy assignments that apply to the resource, which is everything in the unfiltered + * list except those applied to resources contained within the resource. If $filter=atExactScope() is + * provided, the returned list only includes all policy assignments that at the resource level. If + * $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy + * assignments of the policy definition whose id is {value} that apply to the resource. Three + * parameters plus the resource name are used to identify a specific resource. If the resource is not + * part of a parent resource (the more common case), the parent resource path should not be provided + * (or provided as ''). For example a web app could be specified as ({resourceProviderNamespace} == + * 'Microsoft.Web', {parentResourcePath} == '', {resourceType} == 'sites', {resourceName} == + * 'MyWebApp'). If the resource is part of a parent resource, then all parameters should be provided. + * For example a virtual machine DNS name could be specified as ({resourceProviderNamespace} == + * 'Microsoft.Compute', {parentResourcePath} == 'virtualMachines/MyVirtualMachine', {resourceType} == + * 'domainNames', {resourceName} == 'MyComputerName'). A convenient alternative to providing the + * namespace and type name separately is to provide both in the {resourceType} parameter, format: + * ({resourceProviderNamespace} == '', {parentResourcePath} == '', {resourceType} == + * 'Microsoft.Web/sites', {resourceName} == 'MyWebApp'). + * @param resourceGroupName The name of the resource group containing the resource. + * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace + * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) + * @param parentResourcePath The parent resource path. Use empty string if there is none. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The name of the resource. + * @param options The options parameters. + */ + listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + const iter = this.listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options, settings); + } + }; + } + listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceNext(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * This operation retrieves the list of all policy assignments applicable to the management group that + * match the given $filter. Valid values for $filter are: 'atScope()', 'atExactScope()' or + * 'policyDefinitionId eq '{value}''. If $filter=atScope() is provided, the returned list includes all + * policy assignments that are assigned to the management group or the management group's ancestors. If + * $filter=atExactScope() is provided, the returned list only includes all policy assignments that at + * the management group. If $filter=policyDefinitionId eq '{value}' is provided, the returned list + * includes all policy assignments of the policy definition whose id is {value} that apply to the + * management group. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + listForManagementGroup(managementGroupId, options) { + const iter = this.listForManagementGroupPagingAll(managementGroupId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForManagementGroupPagingPage(managementGroupId, options, settings); + } + }; + } + listForManagementGroupPagingPage(managementGroupId, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForManagementGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForManagementGroup(managementGroupId, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForManagementGroupNext(managementGroupId, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForManagementGroupPagingAll(managementGroupId, options) { + return tslib.__asyncGenerator(this, arguments, function* listForManagementGroupPagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listForManagementGroupPagingPage(managementGroupId, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * This operation retrieves the list of all policy assignments associated with the given subscription + * that match the optional given $filter. Valid values for $filter are: 'atScope()', 'atExactScope()' + * or 'policyDefinitionId eq '{value}''. If $filter is not provided, the unfiltered list includes all + * policy assignments associated with the subscription, including those that apply directly or from + * management groups that contain the given subscription, as well as any applied to objects contained + * within the subscription. If $filter=atScope() is provided, the returned list includes all policy + * assignments that apply to the subscription, which is everything in the unfiltered list except those + * applied to objects contained within the subscription. If $filter=atExactScope() is provided, the + * returned list only includes all policy assignments that at the subscription. If + * $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy + * assignments of the policy definition whose id is {value}. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + } + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_4, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * This operation deletes a policy assignment, given its name and the scope it was created in. The + * scope of a policy assignment is the part of its ID preceding + * '/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. + * @param scope The scope of the policy assignment. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyAssignmentName The name of the policy assignment to delete. + * @param options The options parameters. + */ + delete(scope, policyAssignmentName, options) { + return this.client.sendOperationRequest({ scope, policyAssignmentName, options }, deleteOperationSpec$3); + } + /** + * This operation creates or updates a policy assignment with the given scope and name. Policy + * assignments apply to all resources contained within their scope. For example, when you assign a + * policy at resource group scope, that policy applies to all resources in the group. + * @param scope The scope of the policy assignment. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyAssignmentName The name of the policy assignment. + * @param parameters Parameters for the policy assignment. + * @param options The options parameters. + */ + create(scope, policyAssignmentName, parameters, options) { + return this.client.sendOperationRequest({ scope, policyAssignmentName, parameters, options }, createOperationSpec); + } + /** + * This operation retrieves a single policy assignment, given its name and the scope it was created at. + * @param scope The scope of the policy assignment. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyAssignmentName The name of the policy assignment to get. + * @param options The options parameters. + */ + get(scope, policyAssignmentName, options) { + return this.client.sendOperationRequest({ scope, policyAssignmentName, options }, getOperationSpec$3); + } + /** + * This operation updates a policy assignment with the given scope and name. Policy assignments apply + * to all resources contained within their scope. For example, when you assign a policy at resource + * group scope, that policy applies to all resources in the group. + * @param scope The scope of the policy assignment. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyAssignmentName The name of the policy assignment. + * @param parameters Parameters for policy assignment patch request. + * @param options The options parameters. + */ + update(scope, policyAssignmentName, parameters, options) { + return this.client.sendOperationRequest({ scope, policyAssignmentName, parameters, options }, updateOperationSpec); + } + /** + * This operation retrieves the list of all policy assignments associated with the given resource group + * in the given subscription that match the optional given $filter. Valid values for $filter are: + * 'atScope()', 'atExactScope()' or 'policyDefinitionId eq '{value}''. If $filter is not provided, the + * unfiltered list includes all policy assignments associated with the resource group, including those + * that apply directly or apply from containing scopes, as well as any applied to resources contained + * within the resource group. If $filter=atScope() is provided, the returned list includes all policy + * assignments that apply to the resource group, which is everything in the unfiltered list except + * those applied to resources contained within the resource group. If $filter=atExactScope() is + * provided, the returned list only includes all policy assignments that at the resource group. If + * $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy + * assignments of the policy definition whose id is {value} that apply to the resource group. + * @param resourceGroupName The name of the resource group that contains policy assignments. + * @param options The options parameters. + */ + _listForResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listForResourceGroupOperationSpec$1); + } + /** + * This operation retrieves the list of all policy assignments associated with the specified resource + * in the given resource group and subscription that match the optional given $filter. Valid values for + * $filter are: 'atScope()', 'atExactScope()' or 'policyDefinitionId eq '{value}''. If $filter is not + * provided, the unfiltered list includes all policy assignments associated with the resource, + * including those that apply directly or from all containing scopes, as well as any applied to + * resources contained within the resource. If $filter=atScope() is provided, the returned list + * includes all policy assignments that apply to the resource, which is everything in the unfiltered + * list except those applied to resources contained within the resource. If $filter=atExactScope() is + * provided, the returned list only includes all policy assignments that at the resource level. If + * $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy + * assignments of the policy definition whose id is {value} that apply to the resource. Three + * parameters plus the resource name are used to identify a specific resource. If the resource is not + * part of a parent resource (the more common case), the parent resource path should not be provided + * (or provided as ''). For example a web app could be specified as ({resourceProviderNamespace} == + * 'Microsoft.Web', {parentResourcePath} == '', {resourceType} == 'sites', {resourceName} == + * 'MyWebApp'). If the resource is part of a parent resource, then all parameters should be provided. + * For example a virtual machine DNS name could be specified as ({resourceProviderNamespace} == + * 'Microsoft.Compute', {parentResourcePath} == 'virtualMachines/MyVirtualMachine', {resourceType} == + * 'domainNames', {resourceName} == 'MyComputerName'). A convenient alternative to providing the + * namespace and type name separately is to provide both in the {resourceType} parameter, format: + * ({resourceProviderNamespace} == '', {parentResourcePath} == '', {resourceType} == + * 'Microsoft.Web/sites', {resourceName} == 'MyWebApp'). + * @param resourceGroupName The name of the resource group containing the resource. + * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace + * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) + * @param parentResourcePath The parent resource path. Use empty string if there is none. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The name of the resource. + * @param options The options parameters. + */ + _listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + options + }, listForResourceOperationSpec$1); + } + /** + * This operation retrieves the list of all policy assignments applicable to the management group that + * match the given $filter. Valid values for $filter are: 'atScope()', 'atExactScope()' or + * 'policyDefinitionId eq '{value}''. If $filter=atScope() is provided, the returned list includes all + * policy assignments that are assigned to the management group or the management group's ancestors. If + * $filter=atExactScope() is provided, the returned list only includes all policy assignments that at + * the management group. If $filter=policyDefinitionId eq '{value}' is provided, the returned list + * includes all policy assignments of the policy definition whose id is {value} that apply to the + * management group. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + _listForManagementGroup(managementGroupId, options) { + return this.client.sendOperationRequest({ managementGroupId, options }, listForManagementGroupOperationSpec$1); + } + /** + * This operation retrieves the list of all policy assignments associated with the given subscription + * that match the optional given $filter. Valid values for $filter are: 'atScope()', 'atExactScope()' + * or 'policyDefinitionId eq '{value}''. If $filter is not provided, the unfiltered list includes all + * policy assignments associated with the subscription, including those that apply directly or from + * management groups that contain the given subscription, as well as any applied to objects contained + * within the subscription. If $filter=atScope() is provided, the returned list includes all policy + * assignments that apply to the subscription, which is everything in the unfiltered list except those + * applied to objects contained within the subscription. If $filter=atExactScope() is provided, the + * returned list only includes all policy assignments that at the subscription. If + * $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy + * assignments of the policy definition whose id is {value}. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$3); + } + /** + * This operation deletes the policy with the given ID. Policy assignment IDs have this format: + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. Valid formats + * for {scope} are: '/providers/Microsoft.Management/managementGroups/{managementGroup}' (management + * group), '/subscriptions/{subscriptionId}' (subscription), + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' (resource group), or + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * (resource). + * @param policyAssignmentId The ID of the policy assignment to delete. Use the format + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. + * @param options The options parameters. + */ + deleteById(policyAssignmentId, options) { + return this.client.sendOperationRequest({ policyAssignmentId, options }, deleteByIdOperationSpec); + } + /** + * This operation creates or updates the policy assignment with the given ID. Policy assignments made + * on a scope apply to all resources contained in that scope. For example, when you assign a policy to + * a resource group that policy applies to all resources in the group. Policy assignment IDs have this + * format: '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. Valid + * scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}'. + * @param policyAssignmentId The ID of the policy assignment to create. Use the format + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. + * @param parameters Parameters for policy assignment. + * @param options The options parameters. + */ + createById(policyAssignmentId, parameters, options) { + return this.client.sendOperationRequest({ policyAssignmentId, parameters, options }, createByIdOperationSpec); + } + /** + * The operation retrieves the policy assignment with the given ID. Policy assignment IDs have this + * format: '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. Valid + * scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}'. + * @param policyAssignmentId The ID of the policy assignment to get. Use the format + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. + * @param options The options parameters. + */ + getById(policyAssignmentId, options) { + return this.client.sendOperationRequest({ policyAssignmentId, options }, getByIdOperationSpec); + } + /** + * This operation updates the policy assignment with the given ID. Policy assignments made on a scope + * apply to all resources contained in that scope. For example, when you assign a policy to a resource + * group that policy applies to all resources in the group. Policy assignment IDs have this format: + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. Valid scopes + * are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}'. + * @param policyAssignmentId The ID of the policy assignment to update. Use the format + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. + * @param parameters Parameters for policy assignment patch request. + * @param options The options parameters. + */ + updateById(policyAssignmentId, parameters, options) { + return this.client.sendOperationRequest({ policyAssignmentId, parameters, options }, updateByIdOperationSpec); + } + /** + * ListForResourceGroupNext + * @param resourceGroupName The name of the resource group that contains policy assignments. + * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. + * @param options The options parameters. + */ + _listForResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listForResourceGroupNextOperationSpec$1); + } + /** + * ListForResourceNext + * @param resourceGroupName The name of the resource group containing the resource. + * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace + * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) + * @param parentResourcePath The parent resource path. Use empty string if there is none. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The name of the resource. + * @param nextLink The nextLink from the previous successful call to the ListForResource method. + * @param options The options parameters. + */ + _listForResourceNext(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + nextLink, + options + }, listForResourceNextOperationSpec$1); + } + /** + * ListForManagementGroupNext + * @param managementGroupId The ID of the management group. + * @param nextLink The nextLink from the previous successful call to the ListForManagementGroup method. + * @param options The options parameters. + */ + _listForManagementGroupNext(managementGroupId, nextLink, options) { + return this.client.sendOperationRequest({ managementGroupId, nextLink, options }, listForManagementGroupNextOperationSpec$1); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$3); + } +} +// Operation Specifications +const serializer$3 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const deleteOperationSpec$3 = { + path: "/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: PolicyAssignment + }, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + policyAssignmentName + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const createOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}", + httpMethod: "PUT", + responses: { + 201: { + bodyMapper: PolicyAssignment + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + policyAssignmentName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$3 +}; +const getOperationSpec$3 = { + path: "/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignment + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + policyAssignmentName + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const updateOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: PolicyAssignment + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters1, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + scope, + policyAssignmentName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$3 +}; +const listForResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listForResourceOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}/providers/Microsoft.Authorization/policyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listForManagementGroupOperationSpec$1 = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [$host, managementGroupId], + headerParameters: [accept], + serializer: serializer$3 +}; +const listOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$3 +}; +const deleteByIdOperationSpec = { + path: "/{policyAssignmentId}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: PolicyAssignment + }, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, policyAssignmentId], + headerParameters: [accept], + serializer: serializer$3 +}; +const createByIdOperationSpec = { + path: "/{policyAssignmentId}", + httpMethod: "PUT", + responses: { + 201: { + bodyMapper: PolicyAssignment + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters, + queryParameters: [apiVersion1], + urlParameters: [$host, policyAssignmentId], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$3 +}; +const getByIdOperationSpec = { + path: "/{policyAssignmentId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignment + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, policyAssignmentId], + headerParameters: [accept], + serializer: serializer$3 +}; +const updateByIdOperationSpec = { + path: "/{policyAssignmentId}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: PolicyAssignment + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters1, + queryParameters: [apiVersion1], + urlParameters: [$host, policyAssignmentId], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$3 +}; +const listForResourceGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + resourceGroupName, + subscriptionId + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listForResourceNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + resourceGroupName, + subscriptionId, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listForManagementGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + managementGroupId + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyAssignmentListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + subscriptionId + ], + headerParameters: [accept], + serializer: serializer$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 containing PolicyDefinitions operations. */ +class PolicyDefinitionsImpl { + /** + * Initialize a new instance of the class PolicyDefinitions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * This operation retrieves a list of all the policy definitions in a given subscription that match the + * optional given $filter. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' or + * 'category eq '{value}''. If $filter is not provided, the unfiltered list includes all policy + * definitions associated with the subscription, including those that apply directly or from management + * groups that contain the given subscription. If $filter=atExactScope() is provided, the returned list + * only includes all policy definitions that at the given subscription. If $filter='policyType -eq + * {value}' is provided, the returned list only includes all policy definitions whose type match the + * {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and Static. If + * $filter='category -eq {value}' is provided, the returned list only includes all policy definitions + * whose category match the {value}. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + } + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * This operation retrieves a list of all the built-in policy definitions that match the optional given + * $filter. If $filter='policyType -eq {value}' is provided, the returned list only includes all + * built-in policy definitions whose type match the {value}. Possible policyType values are + * NotSpecified, BuiltIn, Custom, and Static. If $filter='category -eq {value}' is provided, the + * returned list only includes all built-in policy definitions whose category match the {value}. + * @param options The options parameters. + */ + listBuiltIn(options) { + const iter = this.listBuiltInPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listBuiltInPagingPage(options, settings); + } + }; + } + listBuiltInPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listBuiltInPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listBuiltIn(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listBuiltInNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listBuiltInPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBuiltInPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listBuiltInPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * This operation retrieves a list of all the policy definitions in a given management group that match + * the optional given $filter. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' + * or 'category eq '{value}''. If $filter is not provided, the unfiltered list includes all policy + * definitions associated with the management group, including those that apply directly or from + * management groups that contain the given management group. If $filter=atExactScope() is provided, + * the returned list only includes all policy definitions that at the given management group. If + * $filter='policyType -eq {value}' is provided, the returned list only includes all policy definitions + * whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and + * Static. If $filter='category -eq {value}' is provided, the returned list only includes all policy + * definitions whose category match the {value}. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + listByManagementGroup(managementGroupId, options) { + const iter = this.listByManagementGroupPagingAll(managementGroupId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByManagementGroupPagingPage(managementGroupId, options, settings); + } + }; + } + listByManagementGroupPagingPage(managementGroupId, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByManagementGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByManagementGroup(managementGroupId, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByManagementGroupNext(managementGroupId, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByManagementGroupPagingAll(managementGroupId, options) { + return tslib.__asyncGenerator(this, arguments, function* listByManagementGroupPagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByManagementGroupPagingPage(managementGroupId, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * This operation creates or updates a policy definition in the given subscription with the given name. + * @param policyDefinitionName The name of the policy definition to create. + * @param parameters The policy definition properties. + * @param options The options parameters. + */ + createOrUpdate(policyDefinitionName, parameters, options) { + return this.client.sendOperationRequest({ policyDefinitionName, parameters, options }, createOrUpdateOperationSpec$2); + } + /** + * This operation deletes the policy definition in the given subscription with the given name. + * @param policyDefinitionName The name of the policy definition to delete. + * @param options The options parameters. + */ + delete(policyDefinitionName, options) { + return this.client.sendOperationRequest({ policyDefinitionName, options }, deleteOperationSpec$2); + } + /** + * This operation retrieves the policy definition in the given subscription with the given name. + * @param policyDefinitionName The name of the policy definition to get. + * @param options The options parameters. + */ + get(policyDefinitionName, options) { + return this.client.sendOperationRequest({ policyDefinitionName, options }, getOperationSpec$2); + } + /** + * This operation retrieves the built-in policy definition with the given name. + * @param policyDefinitionName The name of the built-in policy definition to get. + * @param options The options parameters. + */ + getBuiltIn(policyDefinitionName, options) { + return this.client.sendOperationRequest({ policyDefinitionName, options }, getBuiltInOperationSpec$1); + } + /** + * This operation creates or updates a policy definition in the given management group with the given + * name. + * @param policyDefinitionName The name of the policy definition to create. + * @param managementGroupId The ID of the management group. + * @param parameters The policy definition properties. + * @param options The options parameters. + */ + createOrUpdateAtManagementGroup(policyDefinitionName, managementGroupId, parameters, options) { + return this.client.sendOperationRequest({ policyDefinitionName, managementGroupId, parameters, options }, createOrUpdateAtManagementGroupOperationSpec$1); + } + /** + * This operation deletes the policy definition in the given management group with the given name. + * @param policyDefinitionName The name of the policy definition to delete. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + deleteAtManagementGroup(policyDefinitionName, managementGroupId, options) { + return this.client.sendOperationRequest({ policyDefinitionName, managementGroupId, options }, deleteAtManagementGroupOperationSpec$1); + } + /** + * This operation retrieves the policy definition in the given management group with the given name. + * @param policyDefinitionName The name of the policy definition to get. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + getAtManagementGroup(policyDefinitionName, managementGroupId, options) { + return this.client.sendOperationRequest({ policyDefinitionName, managementGroupId, options }, getAtManagementGroupOperationSpec$1); + } + /** + * This operation retrieves a list of all the policy definitions in a given subscription that match the + * optional given $filter. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' or + * 'category eq '{value}''. If $filter is not provided, the unfiltered list includes all policy + * definitions associated with the subscription, including those that apply directly or from management + * groups that contain the given subscription. If $filter=atExactScope() is provided, the returned list + * only includes all policy definitions that at the given subscription. If $filter='policyType -eq + * {value}' is provided, the returned list only includes all policy definitions whose type match the + * {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and Static. If + * $filter='category -eq {value}' is provided, the returned list only includes all policy definitions + * whose category match the {value}. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$2); + } + /** + * This operation retrieves a list of all the built-in policy definitions that match the optional given + * $filter. If $filter='policyType -eq {value}' is provided, the returned list only includes all + * built-in policy definitions whose type match the {value}. Possible policyType values are + * NotSpecified, BuiltIn, Custom, and Static. If $filter='category -eq {value}' is provided, the + * returned list only includes all built-in policy definitions whose category match the {value}. + * @param options The options parameters. + */ + _listBuiltIn(options) { + return this.client.sendOperationRequest({ options }, listBuiltInOperationSpec$1); + } + /** + * This operation retrieves a list of all the policy definitions in a given management group that match + * the optional given $filter. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' + * or 'category eq '{value}''. If $filter is not provided, the unfiltered list includes all policy + * definitions associated with the management group, including those that apply directly or from + * management groups that contain the given management group. If $filter=atExactScope() is provided, + * the returned list only includes all policy definitions that at the given management group. If + * $filter='policyType -eq {value}' is provided, the returned list only includes all policy definitions + * whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and + * Static. If $filter='category -eq {value}' is provided, the returned list only includes all policy + * definitions whose category match the {value}. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + _listByManagementGroup(managementGroupId, options) { + return this.client.sendOperationRequest({ managementGroupId, options }, listByManagementGroupOperationSpec$1); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$2); + } + /** + * ListBuiltInNext + * @param nextLink The nextLink from the previous successful call to the ListBuiltIn method. + * @param options The options parameters. + */ + _listBuiltInNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBuiltInNextOperationSpec$1); + } + /** + * ListByManagementGroupNext + * @param managementGroupId The ID of the management group. + * @param nextLink The nextLink from the previous successful call to the ListByManagementGroup method. + * @param options The options parameters. + */ + _listByManagementGroupNext(managementGroupId, nextLink, options) { + return this.client.sendOperationRequest({ managementGroupId, nextLink, options }, listByManagementGroupNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$2 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionName}", + httpMethod: "PUT", + responses: { + 201: { + bodyMapper: PolicyDefinition + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters2, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + policyDefinitionName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2 +}; +const deleteOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + policyDefinitionName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const getOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinition + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + policyDefinitionName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const getBuiltInOperationSpec$1 = { + path: "/providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinition + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, policyDefinitionName], + headerParameters: [accept], + serializer: serializer$2 +}; +const createOrUpdateAtManagementGroupOperationSpec$1 = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionName}", + httpMethod: "PUT", + responses: { + 201: { + bodyMapper: PolicyDefinition + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters2, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupId, + policyDefinitionName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2 +}; +const deleteAtManagementGroupOperationSpec$1 = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupId, + policyDefinitionName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const getAtManagementGroupOperationSpec$1 = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinition + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupId, + policyDefinitionName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$2 +}; +const listBuiltInOperationSpec$1 = { + path: "/providers/Microsoft.Authorization/policyDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$2 +}; +const listByManagementGroupOperationSpec$1 = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [$host, managementGroupId], + headerParameters: [accept], + serializer: serializer$2 +}; +const listNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + subscriptionId + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listBuiltInNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink], + headerParameters: [accept], + serializer: serializer$2 +}; +const listByManagementGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + managementGroupId + ], + headerParameters: [accept], + serializer: serializer$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 containing PolicySetDefinitions operations. */ +class PolicySetDefinitionsImpl { + /** + * Initialize a new instance of the class PolicySetDefinitions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * This operation retrieves a list of all the policy set definitions in a given subscription that match + * the optional given $filter. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' + * or 'category eq '{value}''. If $filter is not provided, the unfiltered list includes all policy set + * definitions associated with the subscription, including those that apply directly or from management + * groups that contain the given subscription. If $filter=atExactScope() is provided, the returned list + * only includes all policy set definitions that at the given subscription. If $filter='policyType -eq + * {value}' is provided, the returned list only includes all policy set definitions whose type match + * the {value}. Possible policyType values are NotSpecified, BuiltIn and Custom. If $filter='category + * -eq {value}' is provided, the returned list only includes all policy set definitions whose category + * match the {value}. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + } + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * This operation retrieves a list of all the built-in policy set definitions that match the optional + * given $filter. If $filter='category -eq {value}' is provided, the returned list only includes all + * built-in policy set definitions whose category match the {value}. + * @param options The options parameters. + */ + listBuiltIn(options) { + const iter = this.listBuiltInPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listBuiltInPagingPage(options, settings); + } + }; + } + listBuiltInPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listBuiltInPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listBuiltIn(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listBuiltInNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listBuiltInPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBuiltInPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listBuiltInPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * This operation retrieves a list of all the policy set definitions in a given management group that + * match the optional given $filter. Valid values for $filter are: 'atExactScope()', 'policyType -eq + * {value}' or 'category eq '{value}''. If $filter is not provided, the unfiltered list includes all + * policy set definitions associated with the management group, including those that apply directly or + * from management groups that contain the given management group. If $filter=atExactScope() is + * provided, the returned list only includes all policy set definitions that at the given management + * group. If $filter='policyType -eq {value}' is provided, the returned list only includes all policy + * set definitions whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn + * and Custom. If $filter='category -eq {value}' is provided, the returned list only includes all + * policy set definitions whose category match the {value}. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + listByManagementGroup(managementGroupId, options) { + const iter = this.listByManagementGroupPagingAll(managementGroupId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listByManagementGroupPagingPage(managementGroupId, options, settings); + } + }; + } + listByManagementGroupPagingPage(managementGroupId, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listByManagementGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listByManagementGroup(managementGroupId, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listByManagementGroupNext(managementGroupId, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listByManagementGroupPagingAll(managementGroupId, options) { + return tslib.__asyncGenerator(this, arguments, function* listByManagementGroupPagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listByManagementGroupPagingPage(managementGroupId, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * This operation creates or updates a policy set definition in the given subscription with the given + * name. + * @param policySetDefinitionName The name of the policy set definition to create. + * @param parameters The policy set definition properties. + * @param options The options parameters. + */ + createOrUpdate(policySetDefinitionName, parameters, options) { + return this.client.sendOperationRequest({ policySetDefinitionName, parameters, options }, createOrUpdateOperationSpec$1); + } + /** + * This operation deletes the policy set definition in the given subscription with the given name. + * @param policySetDefinitionName The name of the policy set definition to delete. + * @param options The options parameters. + */ + delete(policySetDefinitionName, options) { + return this.client.sendOperationRequest({ policySetDefinitionName, options }, deleteOperationSpec$1); + } + /** + * This operation retrieves the policy set definition in the given subscription with the given name. + * @param policySetDefinitionName The name of the policy set definition to get. + * @param options The options parameters. + */ + get(policySetDefinitionName, options) { + return this.client.sendOperationRequest({ policySetDefinitionName, options }, getOperationSpec$1); + } + /** + * This operation retrieves the built-in policy set definition with the given name. + * @param policySetDefinitionName The name of the policy set definition to get. + * @param options The options parameters. + */ + getBuiltIn(policySetDefinitionName, options) { + return this.client.sendOperationRequest({ policySetDefinitionName, options }, getBuiltInOperationSpec); + } + /** + * This operation retrieves a list of all the policy set definitions in a given subscription that match + * the optional given $filter. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' + * or 'category eq '{value}''. If $filter is not provided, the unfiltered list includes all policy set + * definitions associated with the subscription, including those that apply directly or from management + * groups that contain the given subscription. If $filter=atExactScope() is provided, the returned list + * only includes all policy set definitions that at the given subscription. If $filter='policyType -eq + * {value}' is provided, the returned list only includes all policy set definitions whose type match + * the {value}. Possible policyType values are NotSpecified, BuiltIn and Custom. If $filter='category + * -eq {value}' is provided, the returned list only includes all policy set definitions whose category + * match the {value}. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$1); + } + /** + * This operation retrieves a list of all the built-in policy set definitions that match the optional + * given $filter. If $filter='category -eq {value}' is provided, the returned list only includes all + * built-in policy set definitions whose category match the {value}. + * @param options The options parameters. + */ + _listBuiltIn(options) { + return this.client.sendOperationRequest({ options }, listBuiltInOperationSpec); + } + /** + * This operation creates or updates a policy set definition in the given management group with the + * given name. + * @param policySetDefinitionName The name of the policy set definition to create. + * @param managementGroupId The ID of the management group. + * @param parameters The policy set definition properties. + * @param options The options parameters. + */ + createOrUpdateAtManagementGroup(policySetDefinitionName, managementGroupId, parameters, options) { + return this.client.sendOperationRequest({ policySetDefinitionName, managementGroupId, parameters, options }, createOrUpdateAtManagementGroupOperationSpec); + } + /** + * This operation deletes the policy set definition in the given management group with the given name. + * @param policySetDefinitionName The name of the policy set definition to delete. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + deleteAtManagementGroup(policySetDefinitionName, managementGroupId, options) { + return this.client.sendOperationRequest({ policySetDefinitionName, managementGroupId, options }, deleteAtManagementGroupOperationSpec); + } + /** + * This operation retrieves the policy set definition in the given management group with the given + * name. + * @param policySetDefinitionName The name of the policy set definition to get. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + getAtManagementGroup(policySetDefinitionName, managementGroupId, options) { + return this.client.sendOperationRequest({ policySetDefinitionName, managementGroupId, options }, getAtManagementGroupOperationSpec); + } + /** + * This operation retrieves a list of all the policy set definitions in a given management group that + * match the optional given $filter. Valid values for $filter are: 'atExactScope()', 'policyType -eq + * {value}' or 'category eq '{value}''. If $filter is not provided, the unfiltered list includes all + * policy set definitions associated with the management group, including those that apply directly or + * from management groups that contain the given management group. If $filter=atExactScope() is + * provided, the returned list only includes all policy set definitions that at the given management + * group. If $filter='policyType -eq {value}' is provided, the returned list only includes all policy + * set definitions whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn + * and Custom. If $filter='category -eq {value}' is provided, the returned list only includes all + * policy set definitions whose category match the {value}. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + _listByManagementGroup(managementGroupId, options) { + return this.client.sendOperationRequest({ managementGroupId, options }, listByManagementGroupOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$1); + } + /** + * ListBuiltInNext + * @param nextLink The nextLink from the previous successful call to the ListBuiltIn method. + * @param options The options parameters. + */ + _listBuiltInNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBuiltInNextOperationSpec); + } + /** + * ListByManagementGroupNext + * @param managementGroupId The ID of the management group. + * @param nextLink The nextLink from the previous successful call to the ListByManagementGroup method. + * @param options The options parameters. + */ + _listByManagementGroupNext(managementGroupId, nextLink, options) { + return this.client.sendOperationRequest({ managementGroupId, nextLink, options }, listByManagementGroupNextOperationSpec); + } +} +// Operation Specifications +const serializer$1 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: PolicySetDefinition + }, + 201: { + bodyMapper: PolicySetDefinition + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters3, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + policySetDefinitionName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$1 +}; +const deleteOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + policySetDefinitionName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const getOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinition + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + policySetDefinitionName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const getBuiltInOperationSpec = { + path: "/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinition + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, policySetDefinitionName], + headerParameters: [accept], + serializer: serializer$1 +}; +const listOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policySetDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$1 +}; +const listBuiltInOperationSpec = { + path: "/providers/Microsoft.Authorization/policySetDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$1 +}; +const createOrUpdateAtManagementGroupOperationSpec = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: PolicySetDefinition + }, + 201: { + bodyMapper: PolicySetDefinition + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters3, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupId, + policySetDefinitionName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$1 +}; +const deleteAtManagementGroupOperationSpec = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupId, + policySetDefinitionName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const getAtManagementGroupOperationSpec = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinition + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupId, + policySetDefinitionName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listByManagementGroupOperationSpec = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policySetDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion1, top], + urlParameters: [$host, managementGroupId], + headerParameters: [accept], + serializer: serializer$1 +}; +const listNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + subscriptionId + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listBuiltInNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [$host, nextLink], + headerParameters: [accept], + serializer: serializer$1 +}; +const listByManagementGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicySetDefinitionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + managementGroupId + ], + headerParameters: [accept], + serializer: serializer$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 containing PolicyExemptions operations. */ +class PolicyExemptionsImpl { + /** + * Initialize a new instance of the class PolicyExemptions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * This operation retrieves the list of all policy exemptions associated with the given subscription + * that match the optional given $filter. Valid values for $filter are: 'atScope()', 'atExactScope()', + * 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter is not provided, the unfiltered + * list includes all policy exemptions associated with the subscription, including those that apply + * directly or from management groups that contain the given subscription, as well as any applied to + * objects contained within the subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listPagingPage(options, settings); + } + }; + } + listPagingPage(options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._list(options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var _a, e_1, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listPagingPage(options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * This operation retrieves the list of all policy exemptions associated with the given resource group + * in the given subscription that match the optional given $filter. Valid values for $filter are: + * 'atScope()', 'atExactScope()', 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter + * is not provided, the unfiltered list includes all policy exemptions associated with the resource + * group, including those that apply directly or apply from containing scopes, as well as any applied + * to resources contained within the resource group. + * @param resourceGroupName The name of the resource group containing the resource. + * @param options The options parameters. + */ + listForResourceGroup(resourceGroupName, options) { + const iter = this.listForResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourceGroupPagingPage(resourceGroupName, options, settings); + } + }; + } + listForResourceGroupPagingPage(resourceGroupName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResourceGroup(resourceGroupName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingAll_1() { + var _a, e_2, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listForResourceGroupPagingPage(resourceGroupName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * This operation retrieves the list of all policy exemptions associated with the specified resource in + * the given resource group and subscription that match the optional given $filter. Valid values for + * $filter are: 'atScope()', 'atExactScope()', 'excludeExpired()' or 'policyAssignmentId eq '{value}''. + * If $filter is not provided, the unfiltered list includes all policy exemptions associated with the + * resource, including those that apply directly or from all containing scopes, as well as any applied + * to resources contained within the resource. Three parameters plus the resource name are used to + * identify a specific resource. If the resource is not part of a parent resource (the more common + * case), the parent resource path should not be provided (or provided as ''). For example a web app + * could be specified as ({resourceProviderNamespace} == 'Microsoft.Web', {parentResourcePath} == '', + * {resourceType} == 'sites', {resourceName} == 'MyWebApp'). If the resource is part of a parent + * resource, then all parameters should be provided. For example a virtual machine DNS name could be + * specified as ({resourceProviderNamespace} == 'Microsoft.Compute', {parentResourcePath} == + * 'virtualMachines/MyVirtualMachine', {resourceType} == 'domainNames', {resourceName} == + * 'MyComputerName'). A convenient alternative to providing the namespace and type name separately is + * to provide both in the {resourceType} parameter, format: ({resourceProviderNamespace} == '', + * {parentResourcePath} == '', {resourceType} == 'Microsoft.Web/sites', {resourceName} == 'MyWebApp'). + * @param resourceGroupName The name of the resource group containing the resource. + * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace + * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) + * @param parentResourcePath The parent resource path. Use empty string if there is none. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The name of the resource. + * @param options The options parameters. + */ + listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + const iter = this.listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options, settings); + } + }; + } + listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForResourceNext(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForResourcePagingAll(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingAll_1() { + var _a, e_3, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listForResourcePagingPage(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * This operation retrieves the list of all policy exemptions applicable to the management group that + * match the given $filter. Valid values for $filter are: 'atScope()', 'atExactScope()', + * 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter=atScope() is provided, the + * returned list includes all policy exemptions that are assigned to the management group or the + * management group's ancestors. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + listForManagementGroup(managementGroupId, options) { + const iter = this.listForManagementGroupPagingAll(managementGroupId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings) => { + if (settings === null || settings === void 0 ? void 0 : settings.maxPageSize) { + throw new Error("maxPageSize is not supported by this operation."); + } + return this.listForManagementGroupPagingPage(managementGroupId, options, settings); + } + }; + } + listForManagementGroupPagingPage(managementGroupId, options, settings) { + return tslib.__asyncGenerator(this, arguments, function* listForManagementGroupPagingPage_1() { + let result; + let continuationToken = settings === null || settings === void 0 ? void 0 : settings.continuationToken; + if (!continuationToken) { + result = yield tslib.__await(this._listForManagementGroup(managementGroupId, options)); + let page = result.value || []; + continuationToken = result.nextLink; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + while (continuationToken) { + result = yield tslib.__await(this._listForManagementGroupNext(managementGroupId, continuationToken, options)); + continuationToken = result.nextLink; + let page = result.value || []; + setContinuationToken(page, continuationToken); + yield yield tslib.__await(page); + } + }); + } + listForManagementGroupPagingAll(managementGroupId, options) { + return tslib.__asyncGenerator(this, arguments, function* listForManagementGroupPagingAll_1() { + var _a, e_4, _b, _c; + try { + for (var _d = true, _e = tslib.__asyncValues(this.listForManagementGroupPagingPage(managementGroupId, options)), _f; _f = yield tslib.__await(_e.next()), _a = _f.done, !_a;) { + _c = _f.value; + _d = false; + try { + const page = _c; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + finally { + _d = true; + } + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield tslib.__await(_b.call(_e)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * This operation deletes a policy exemption, given its name and the scope it was created in. The scope + * of a policy exemption is the part of its ID preceding + * '/providers/Microsoft.Authorization/policyExemptions/{policyExemptionName}'. + * @param scope The scope of the policy exemption. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyExemptionName The name of the policy exemption to delete. + * @param options The options parameters. + */ + delete(scope, policyExemptionName, options) { + return this.client.sendOperationRequest({ scope, policyExemptionName, options }, deleteOperationSpec); + } + /** + * This operation creates or updates a policy exemption with the given scope and name. Policy + * exemptions apply to all resources contained within their scope. For example, when you create a + * policy exemption at resource group scope for a policy assignment at the same or above level, the + * exemption exempts to all applicable resources in the resource group. + * @param scope The scope of the policy exemption. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyExemptionName The name of the policy exemption to delete. + * @param parameters Parameters for the policy exemption. + * @param options The options parameters. + */ + createOrUpdate(scope, policyExemptionName, parameters, options) { + return this.client.sendOperationRequest({ scope, policyExemptionName, parameters, options }, createOrUpdateOperationSpec); + } + /** + * This operation retrieves a single policy exemption, given its name and the scope it was created at. + * @param scope The scope of the policy exemption. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyExemptionName The name of the policy exemption to delete. + * @param options The options parameters. + */ + get(scope, policyExemptionName, options) { + return this.client.sendOperationRequest({ scope, policyExemptionName, options }, getOperationSpec); + } + /** + * This operation retrieves the list of all policy exemptions associated with the given subscription + * that match the optional given $filter. Valid values for $filter are: 'atScope()', 'atExactScope()', + * 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter is not provided, the unfiltered + * list includes all policy exemptions associated with the subscription, including those that apply + * directly or from management groups that contain the given subscription, as well as any applied to + * objects contained within the subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec); + } + /** + * This operation retrieves the list of all policy exemptions associated with the given resource group + * in the given subscription that match the optional given $filter. Valid values for $filter are: + * 'atScope()', 'atExactScope()', 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter + * is not provided, the unfiltered list includes all policy exemptions associated with the resource + * group, including those that apply directly or apply from containing scopes, as well as any applied + * to resources contained within the resource group. + * @param resourceGroupName The name of the resource group containing the resource. + * @param options The options parameters. + */ + _listForResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listForResourceGroupOperationSpec); + } + /** + * This operation retrieves the list of all policy exemptions associated with the specified resource in + * the given resource group and subscription that match the optional given $filter. Valid values for + * $filter are: 'atScope()', 'atExactScope()', 'excludeExpired()' or 'policyAssignmentId eq '{value}''. + * If $filter is not provided, the unfiltered list includes all policy exemptions associated with the + * resource, including those that apply directly or from all containing scopes, as well as any applied + * to resources contained within the resource. Three parameters plus the resource name are used to + * identify a specific resource. If the resource is not part of a parent resource (the more common + * case), the parent resource path should not be provided (or provided as ''). For example a web app + * could be specified as ({resourceProviderNamespace} == 'Microsoft.Web', {parentResourcePath} == '', + * {resourceType} == 'sites', {resourceName} == 'MyWebApp'). If the resource is part of a parent + * resource, then all parameters should be provided. For example a virtual machine DNS name could be + * specified as ({resourceProviderNamespace} == 'Microsoft.Compute', {parentResourcePath} == + * 'virtualMachines/MyVirtualMachine', {resourceType} == 'domainNames', {resourceName} == + * 'MyComputerName'). A convenient alternative to providing the namespace and type name separately is + * to provide both in the {resourceType} parameter, format: ({resourceProviderNamespace} == '', + * {parentResourcePath} == '', {resourceType} == 'Microsoft.Web/sites', {resourceName} == 'MyWebApp'). + * @param resourceGroupName The name of the resource group containing the resource. + * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace + * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) + * @param parentResourcePath The parent resource path. Use empty string if there is none. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The name of the resource. + * @param options The options parameters. + */ + _listForResource(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + options + }, listForResourceOperationSpec); + } + /** + * This operation retrieves the list of all policy exemptions applicable to the management group that + * match the given $filter. Valid values for $filter are: 'atScope()', 'atExactScope()', + * 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter=atScope() is provided, the + * returned list includes all policy exemptions that are assigned to the management group or the + * management group's ancestors. + * @param managementGroupId The ID of the management group. + * @param options The options parameters. + */ + _listForManagementGroup(managementGroupId, options) { + return this.client.sendOperationRequest({ managementGroupId, options }, listForManagementGroupOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec); + } + /** + * ListForResourceGroupNext + * @param resourceGroupName The name of the resource group containing the resource. + * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. + * @param options The options parameters. + */ + _listForResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listForResourceGroupNextOperationSpec); + } + /** + * ListForResourceNext + * @param resourceGroupName The name of the resource group containing the resource. + * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace + * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) + * @param parentResourcePath The parent resource path. Use empty string if there is none. + * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from + * Microsoft.Web/sites). + * @param resourceName The name of the resource. + * @param nextLink The nextLink from the previous successful call to the ListForResource method. + * @param options The options parameters. + */ + _listForResourceNext(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + nextLink, + options + }, listForResourceNextOperationSpec); + } + /** + * ListForManagementGroupNext + * @param managementGroupId The ID of the management group. + * @param nextLink The nextLink from the previous successful call to the ListForManagementGroup method. + * @param options The options parameters. + */ + _listForManagementGroupNext(managementGroupId, nextLink, options) { + return this.client.sendOperationRequest({ managementGroupId, nextLink, options }, listForManagementGroupNextOperationSpec); + } +} +// Operation Specifications +const serializer = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const deleteOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/policyExemptions/{policyExemptionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + policyExemptionName + ], + headerParameters: [accept], + serializer +}; +const createOrUpdateOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/policyExemptions/{policyExemptionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: PolicyExemption + }, + 201: { + bodyMapper: PolicyExemption + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: parameters4, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + policyExemptionName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer +}; +const getOperationSpec = { + path: "/{scope}/providers/Microsoft.Authorization/policyExemptions/{policyExemptionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemption + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + scope, + policyExemptionName + ], + headerParameters: [accept], + serializer +}; +const listOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyExemptions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemptionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer +}; +const listForResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyExemptions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemptionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId + ], + headerParameters: [accept], + serializer +}; +const listForResourceOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}/providers/Microsoft.Authorization/policyExemptions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemptionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer +}; +const listForManagementGroupOperationSpec = { + path: "/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Authorization/policyExemptions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemptionListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion2], + urlParameters: [$host, managementGroupId], + headerParameters: [accept], + serializer +}; +const listNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemptionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + subscriptionId + ], + headerParameters: [accept], + serializer +}; +const listForResourceGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemptionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + resourceGroupName, + subscriptionId + ], + headerParameters: [accept], + serializer +}; +const listForResourceNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemptionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + resourceGroupName, + subscriptionId, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer +}; +const listForManagementGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyExemptionListResult + }, + default: { + bodyMapper: CloudError + } + }, + urlParameters: [ + $host, + nextLink, + managementGroupId + ], + headerParameters: [accept], + serializer +}; + +/* + * 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 PolicyClient extends coreClient__namespace.ServiceClient { + constructor(credentials, subscriptionIdOrOptions, options) { + var _a, _b, _c; + if (credentials === undefined) { + throw new Error("'credentials' cannot be null"); + } + let subscriptionId; + if (!subscriptionIdOrOptions !== undefined) { + if (typeof subscriptionIdOrOptions === "string") { + subscriptionId = subscriptionIdOrOptions; + } + else if (typeof subscriptionIdOrOptions === "object") { + options = subscriptionIdOrOptions; + } + } + // Initializing default values for options + if (!options) { + options = {}; + } + const defaults = { + requestContentType: "application/json; charset=utf-8", + credential: credentials + }; + const packageDetails = `azsdk-js-arm-policy/5.1.0`; + const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix + ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` + : `${packageDetails}`; + const optionsWithDefaults = Object.assign(Object.assign(Object.assign({}, defaults), options), { userAgentOptions: { + userAgentPrefix + }, endpoint: (_b = (_a = options.endpoint) !== null && _a !== void 0 ? _a : options.baseUri) !== null && _b !== void 0 ? _b : "https://management.azure.com" }); + super(optionsWithDefaults); + let bearerTokenAuthenticationPolicyFound = false; + if ((options === null || options === void 0 ? void 0 : options.pipeline) && options.pipeline.getOrderedPolicies().length > 0) { + const pipelinePolicies = options.pipeline.getOrderedPolicies(); + bearerTokenAuthenticationPolicyFound = pipelinePolicies.some((pipelinePolicy) => pipelinePolicy.name === + coreRestPipeline__namespace.bearerTokenAuthenticationPolicyName); + } + if (!options || + !options.pipeline || + options.pipeline.getOrderedPolicies().length == 0 || + !bearerTokenAuthenticationPolicyFound) { + this.pipeline.removePolicy({ + name: coreRestPipeline__namespace.bearerTokenAuthenticationPolicyName + }); + this.pipeline.addPolicy(coreRestPipeline__namespace.bearerTokenAuthenticationPolicy({ + credential: credentials, + scopes: (_c = optionsWithDefaults.credentialScopes) !== null && _c !== void 0 ? _c : `${optionsWithDefaults.endpoint}/.default`, + challengeCallbacks: { + authorizeRequestOnChallenge: coreClient__namespace.authorizeRequestOnClaimChallenge + } + })); + } + // Parameter assignments + this.subscriptionId = subscriptionId; + // Assigning values to Constant parameters + this.$host = options.$host || "https://management.azure.com"; + this.dataPolicyManifests = new DataPolicyManifestsImpl(this); + this.policyAssignments = new PolicyAssignmentsImpl(this); + this.policyDefinitions = new PolicyDefinitionsImpl(this); + this.policySetDefinitions = new PolicySetDefinitionsImpl(this); + this.policyExemptions = new PolicyExemptionsImpl(this); + } +} + +exports.PolicyClient = PolicyClient; +exports.getContinuationToken = getContinuationToken; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 4735: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var coreClient = __nccwpck_require__(160); +var tslib = __nccwpck_require__(1860); +var coreLro = __nccwpck_require__(1754); + +/* + * 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. + */ +(function (KnownResourceDiscoveryMode) { + /** Remediate resources that are already known to be non-compliant. */ + KnownResourceDiscoveryMode["ExistingNonCompliant"] = "ExistingNonCompliant"; + /** Re-evaluate the compliance state of resources and then remediate the resources found to be non-compliant. */ + KnownResourceDiscoveryMode["ReEvaluateCompliance"] = "ReEvaluateCompliance"; +})(exports.KnownResourceDiscoveryMode || (exports.KnownResourceDiscoveryMode = {})); +(function (KnownCreatedByType) { + KnownCreatedByType["User"] = "User"; + KnownCreatedByType["Application"] = "Application"; + KnownCreatedByType["ManagedIdentity"] = "ManagedIdentity"; + KnownCreatedByType["Key"] = "Key"; +})(exports.KnownCreatedByType || (exports.KnownCreatedByType = {})); +(function (KnownPolicyStatesResource) { + KnownPolicyStatesResource["Default"] = "default"; + KnownPolicyStatesResource["Latest"] = "latest"; +})(exports.KnownPolicyStatesResource || (exports.KnownPolicyStatesResource = {})); +(function (KnownFieldRestrictionResult) { + /** The field and/or values are required by policy. */ + KnownFieldRestrictionResult["Required"] = "Required"; + /** The field will be removed by policy. */ + KnownFieldRestrictionResult["Removed"] = "Removed"; + /** The field and/or values will be denied by policy. */ + KnownFieldRestrictionResult["Deny"] = "Deny"; +})(exports.KnownFieldRestrictionResult || (exports.KnownFieldRestrictionResult = {})); +(function (KnownComplianceState) { + /** The resource is in compliance with the policy. */ + KnownComplianceState["Compliant"] = "Compliant"; + /** The resource is not in compliance with the policy. */ + KnownComplianceState["NonCompliant"] = "NonCompliant"; + /** The compliance state of the resource is not known. */ + KnownComplianceState["Unknown"] = "Unknown"; +})(exports.KnownComplianceState || (exports.KnownComplianceState = {})); + +/* + * 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. + */ +const PolicyTrackedResourcesQueryResults = { + type: { + name: "Composite", + className: "PolicyTrackedResourcesQueryResults", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyTrackedResource" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const PolicyTrackedResource = { + type: { + name: "Composite", + className: "PolicyTrackedResource", + modelProperties: { + trackedResourceId: { + serializedName: "trackedResourceId", + readOnly: true, + type: { + name: "String" + } + }, + policyDetails: { + serializedName: "policyDetails", + type: { + name: "Composite", + className: "PolicyDetails" + } + }, + createdBy: { + serializedName: "createdBy", + type: { + name: "Composite", + className: "TrackedResourceModificationDetails" + } + }, + lastModifiedBy: { + serializedName: "lastModifiedBy", + type: { + name: "Composite", + className: "TrackedResourceModificationDetails" + } + }, + lastUpdateUtc: { + serializedName: "lastUpdateUtc", + readOnly: true, + type: { + name: "DateTime" + } + } + } + } +}; +const PolicyDetails = { + type: { + name: "Composite", + className: "PolicyDetails", + modelProperties: { + policyDefinitionId: { + serializedName: "policyDefinitionId", + readOnly: true, + type: { + name: "String" + } + }, + policyAssignmentId: { + serializedName: "policyAssignmentId", + readOnly: true, + type: { + name: "String" + } + }, + policyAssignmentDisplayName: { + serializedName: "policyAssignmentDisplayName", + readOnly: true, + type: { + name: "String" + } + }, + policyAssignmentScope: { + serializedName: "policyAssignmentScope", + readOnly: true, + type: { + name: "String" + } + }, + policySetDefinitionId: { + serializedName: "policySetDefinitionId", + readOnly: true, + type: { + name: "String" + } + }, + policyDefinitionReferenceId: { + serializedName: "policyDefinitionReferenceId", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const TrackedResourceModificationDetails = { + type: { + name: "Composite", + className: "TrackedResourceModificationDetails", + modelProperties: { + policyDetails: { + serializedName: "policyDetails", + type: { + name: "Composite", + className: "PolicyDetails" + } + }, + deploymentId: { + serializedName: "deploymentId", + readOnly: true, + type: { + name: "String" + } + }, + deploymentTime: { + serializedName: "deploymentTime", + readOnly: true, + type: { + name: "DateTime" + } + } + } + } +}; +const QueryFailure = { + type: { + name: "Composite", + className: "QueryFailure", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "QueryFailureError" + } + } + } + } +}; +const QueryFailureError = { + type: { + name: "Composite", + className: "QueryFailureError", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const RemediationDeploymentsListResult = { + type: { + name: "Composite", + className: "RemediationDeploymentsListResult", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RemediationDeployment" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const RemediationDeployment = { + type: { + name: "Composite", + className: "RemediationDeployment", + modelProperties: { + remediatedResourceId: { + serializedName: "remediatedResourceId", + readOnly: true, + type: { + name: "String" + } + }, + deploymentId: { + serializedName: "deploymentId", + readOnly: true, + type: { + name: "String" + } + }, + status: { + serializedName: "status", + readOnly: true, + type: { + name: "String" + } + }, + resourceLocation: { + serializedName: "resourceLocation", + readOnly: true, + type: { + name: "String" + } + }, + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ErrorDefinition" + } + }, + createdOn: { + serializedName: "createdOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + lastUpdatedOn: { + serializedName: "lastUpdatedOn", + readOnly: true, + type: { + name: "DateTime" + } + } + } + } +}; +const ErrorDefinition = { + type: { + name: "Composite", + className: "ErrorDefinition", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String" + } + }, + target: { + serializedName: "target", + readOnly: true, + type: { + name: "String" + } + }, + details: { + serializedName: "details", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorDefinition" + } + } + } + }, + additionalInfo: { + serializedName: "additionalInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TypedErrorInfo" + } + } + } + } + } + } +}; +const TypedErrorInfo = { + type: { + name: "Composite", + className: "TypedErrorInfo", + modelProperties: { + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + info: { + serializedName: "info", + readOnly: true, + type: { + name: "any" + } + } + } + } +}; +const ErrorResponse = { + type: { + name: "Composite", + className: "ErrorResponse", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ErrorDefinition" + } + } + } + } +}; +const Remediation = { + type: { + name: "Composite", + className: "Remediation", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, + policyAssignmentId: { + serializedName: "properties.policyAssignmentId", + type: { + name: "String" + } + }, + policyDefinitionReferenceId: { + serializedName: "properties.policyDefinitionReferenceId", + type: { + name: "String" + } + }, + resourceDiscoveryMode: { + serializedName: "properties.resourceDiscoveryMode", + type: { + name: "String" + } + }, + provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String" + } + }, + createdOn: { + serializedName: "properties.createdOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + lastUpdatedOn: { + serializedName: "properties.lastUpdatedOn", + readOnly: true, + type: { + name: "DateTime" + } + }, + filters: { + serializedName: "properties.filters", + type: { + name: "Composite", + className: "RemediationFilters" + } + }, + deploymentStatus: { + serializedName: "properties.deploymentStatus", + type: { + name: "Composite", + className: "RemediationDeploymentSummary" + } + }, + statusMessage: { + serializedName: "properties.statusMessage", + readOnly: true, + type: { + name: "String" + } + }, + correlationId: { + serializedName: "properties.correlationId", + readOnly: true, + type: { + name: "String" + } + }, + resourceCount: { + serializedName: "properties.resourceCount", + type: { + name: "Number" + } + }, + parallelDeployments: { + serializedName: "properties.parallelDeployments", + type: { + name: "Number" + } + }, + failureThreshold: { + serializedName: "properties.failureThreshold", + type: { + name: "Composite", + className: "RemediationPropertiesFailureThreshold" + } + } + } + } +}; +const RemediationFilters = { + type: { + name: "Composite", + className: "RemediationFilters", + modelProperties: { + locations: { + serializedName: "locations", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const RemediationDeploymentSummary = { + type: { + name: "Composite", + className: "RemediationDeploymentSummary", + modelProperties: { + totalDeployments: { + serializedName: "totalDeployments", + readOnly: true, + type: { + name: "Number" + } + }, + successfulDeployments: { + serializedName: "successfulDeployments", + readOnly: true, + type: { + name: "Number" + } + }, + failedDeployments: { + serializedName: "failedDeployments", + readOnly: true, + type: { + name: "Number" + } + } + } + } +}; +const RemediationPropertiesFailureThreshold = { + type: { + name: "Composite", + className: "RemediationPropertiesFailureThreshold", + modelProperties: { + percentage: { + serializedName: "percentage", + type: { + name: "Number" + } + } + } + } +}; +const SystemData = { + type: { + name: "Composite", + className: "SystemData", + modelProperties: { + createdBy: { + serializedName: "createdBy", + type: { + name: "String" + } + }, + createdByType: { + serializedName: "createdByType", + type: { + name: "String" + } + }, + createdAt: { + serializedName: "createdAt", + type: { + name: "DateTime" + } + }, + lastModifiedBy: { + serializedName: "lastModifiedBy", + type: { + name: "String" + } + }, + lastModifiedByType: { + serializedName: "lastModifiedByType", + type: { + name: "String" + } + }, + lastModifiedAt: { + serializedName: "lastModifiedAt", + type: { + name: "DateTime" + } + } + } + } +}; +const RemediationListResult = { + type: { + name: "Composite", + className: "RemediationListResult", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Remediation" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const PolicyEventsQueryResults = { + type: { + name: "Composite", + className: "PolicyEventsQueryResults", + modelProperties: { + odataContext: { + serializedName: "@odata\\.context", + type: { + name: "String" + } + }, + odataCount: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "@odata\\.count", + type: { + name: "Number" + } + }, + odataNextLink: { + serializedName: "@odata\\.nextLink", + type: { + name: "String" + } + }, + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyEvent" + } + } + } + } + } + } +}; +const PolicyEvent = { + type: { + name: "Composite", + className: "PolicyEvent", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + odataId: { + serializedName: "@odata\\.id", + type: { + name: "String" + } + }, + odataContext: { + serializedName: "@odata\\.context", + type: { + name: "String" + } + }, + timestamp: { + serializedName: "timestamp", + type: { + name: "DateTime" + } + }, + resourceId: { + serializedName: "resourceId", + type: { + name: "String" + } + }, + policyAssignmentId: { + serializedName: "policyAssignmentId", + type: { + name: "String" + } + }, + policyDefinitionId: { + serializedName: "policyDefinitionId", + type: { + name: "String" + } + }, + effectiveParameters: { + serializedName: "effectiveParameters", + type: { + name: "String" + } + }, + isCompliant: { + serializedName: "isCompliant", + type: { + name: "Boolean" + } + }, + subscriptionId: { + serializedName: "subscriptionId", + type: { + name: "String" + } + }, + resourceType: { + serializedName: "resourceType", + type: { + name: "String" + } + }, + resourceLocation: { + serializedName: "resourceLocation", + type: { + name: "String" + } + }, + resourceGroup: { + serializedName: "resourceGroup", + type: { + name: "String" + } + }, + resourceTags: { + serializedName: "resourceTags", + type: { + name: "String" + } + }, + policyAssignmentName: { + serializedName: "policyAssignmentName", + type: { + name: "String" + } + }, + policyAssignmentOwner: { + serializedName: "policyAssignmentOwner", + type: { + name: "String" + } + }, + policyAssignmentParameters: { + serializedName: "policyAssignmentParameters", + type: { + name: "String" + } + }, + policyAssignmentScope: { + serializedName: "policyAssignmentScope", + type: { + name: "String" + } + }, + policyDefinitionName: { + serializedName: "policyDefinitionName", + type: { + name: "String" + } + }, + policyDefinitionAction: { + serializedName: "policyDefinitionAction", + type: { + name: "String" + } + }, + policyDefinitionCategory: { + serializedName: "policyDefinitionCategory", + type: { + name: "String" + } + }, + policySetDefinitionId: { + serializedName: "policySetDefinitionId", + type: { + name: "String" + } + }, + policySetDefinitionName: { + serializedName: "policySetDefinitionName", + type: { + name: "String" + } + }, + policySetDefinitionOwner: { + serializedName: "policySetDefinitionOwner", + type: { + name: "String" + } + }, + policySetDefinitionCategory: { + serializedName: "policySetDefinitionCategory", + type: { + name: "String" + } + }, + policySetDefinitionParameters: { + serializedName: "policySetDefinitionParameters", + type: { + name: "String" + } + }, + managementGroupIds: { + serializedName: "managementGroupIds", + type: { + name: "String" + } + }, + policyDefinitionReferenceId: { + serializedName: "policyDefinitionReferenceId", + type: { + name: "String" + } + }, + complianceState: { + serializedName: "complianceState", + type: { + name: "String" + } + }, + tenantId: { + serializedName: "tenantId", + type: { + name: "String" + } + }, + principalOid: { + serializedName: "principalOid", + type: { + name: "String" + } + }, + components: { + serializedName: "components", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ComponentEventDetails" + } + } + } + } + } + } +}; +const ComponentEventDetails = { + type: { + name: "Composite", + className: "ComponentEventDetails", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + }, + name: { + serializedName: "name", + type: { + name: "String" + } + }, + timestamp: { + serializedName: "timestamp", + type: { + name: "DateTime" + } + }, + tenantId: { + serializedName: "tenantId", + type: { + name: "String" + } + }, + principalOid: { + serializedName: "principalOid", + type: { + name: "String" + } + }, + policyDefinitionAction: { + serializedName: "policyDefinitionAction", + type: { + name: "String" + } + } + } + } +}; +const PolicyStatesQueryResults = { + type: { + name: "Composite", + className: "PolicyStatesQueryResults", + modelProperties: { + odataContext: { + serializedName: "@odata\\.context", + type: { + name: "String" + } + }, + odataCount: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "@odata\\.count", + type: { + name: "Number" + } + }, + odataNextLink: { + serializedName: "@odata\\.nextLink", + type: { + name: "String" + } + }, + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyState" + } + } + } + } + } + } +}; +const PolicyState = { + type: { + name: "Composite", + className: "PolicyState", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + odataId: { + serializedName: "@odata\\.id", + type: { + name: "String" + } + }, + odataContext: { + serializedName: "@odata\\.context", + type: { + name: "String" + } + }, + timestamp: { + serializedName: "timestamp", + type: { + name: "DateTime" + } + }, + resourceId: { + serializedName: "resourceId", + type: { + name: "String" + } + }, + policyAssignmentId: { + serializedName: "policyAssignmentId", + type: { + name: "String" + } + }, + policyDefinitionId: { + serializedName: "policyDefinitionId", + type: { + name: "String" + } + }, + effectiveParameters: { + serializedName: "effectiveParameters", + type: { + name: "String" + } + }, + isCompliant: { + serializedName: "isCompliant", + type: { + name: "Boolean" + } + }, + subscriptionId: { + serializedName: "subscriptionId", + type: { + name: "String" + } + }, + resourceType: { + serializedName: "resourceType", + type: { + name: "String" + } + }, + resourceLocation: { + serializedName: "resourceLocation", + type: { + name: "String" + } + }, + resourceGroup: { + serializedName: "resourceGroup", + type: { + name: "String" + } + }, + resourceTags: { + serializedName: "resourceTags", + type: { + name: "String" + } + }, + policyAssignmentName: { + serializedName: "policyAssignmentName", + type: { + name: "String" + } + }, + policyAssignmentOwner: { + serializedName: "policyAssignmentOwner", + type: { + name: "String" + } + }, + policyAssignmentParameters: { + serializedName: "policyAssignmentParameters", + type: { + name: "String" + } + }, + policyAssignmentScope: { + serializedName: "policyAssignmentScope", + type: { + name: "String" + } + }, + policyDefinitionName: { + serializedName: "policyDefinitionName", + type: { + name: "String" + } + }, + policyDefinitionAction: { + serializedName: "policyDefinitionAction", + type: { + name: "String" + } + }, + policyDefinitionCategory: { + serializedName: "policyDefinitionCategory", + type: { + name: "String" + } + }, + policySetDefinitionId: { + serializedName: "policySetDefinitionId", + type: { + name: "String" + } + }, + policySetDefinitionName: { + serializedName: "policySetDefinitionName", + type: { + name: "String" + } + }, + policySetDefinitionOwner: { + serializedName: "policySetDefinitionOwner", + type: { + name: "String" + } + }, + policySetDefinitionCategory: { + serializedName: "policySetDefinitionCategory", + type: { + name: "String" + } + }, + policySetDefinitionParameters: { + serializedName: "policySetDefinitionParameters", + type: { + name: "String" + } + }, + managementGroupIds: { + serializedName: "managementGroupIds", + type: { + name: "String" + } + }, + policyDefinitionReferenceId: { + serializedName: "policyDefinitionReferenceId", + type: { + name: "String" + } + }, + complianceState: { + serializedName: "complianceState", + type: { + name: "String" + } + }, + policyEvaluationDetails: { + serializedName: "policyEvaluationDetails", + type: { + name: "Composite", + className: "PolicyEvaluationDetails" + } + }, + policyDefinitionGroupNames: { + serializedName: "policyDefinitionGroupNames", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + components: { + serializedName: "components", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ComponentStateDetails" + } + } + } + }, + policyDefinitionVersion: { + serializedName: "policyDefinitionVersion", + readOnly: true, + type: { + name: "String" + } + }, + policySetDefinitionVersion: { + serializedName: "policySetDefinitionVersion", + readOnly: true, + type: { + name: "String" + } + }, + policyAssignmentVersion: { + serializedName: "policyAssignmentVersion", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const PolicyEvaluationDetails = { + type: { + name: "Composite", + className: "PolicyEvaluationDetails", + modelProperties: { + evaluatedExpressions: { + serializedName: "evaluatedExpressions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ExpressionEvaluationDetails" + } + } + } + }, + ifNotExistsDetails: { + serializedName: "ifNotExistsDetails", + type: { + name: "Composite", + className: "IfNotExistsEvaluationDetails" + } + } + } + } +}; +const ExpressionEvaluationDetails = { + type: { + name: "Composite", + className: "ExpressionEvaluationDetails", + modelProperties: { + result: { + serializedName: "result", + type: { + name: "String" + } + }, + expression: { + serializedName: "expression", + type: { + name: "String" + } + }, + expressionKind: { + serializedName: "expressionKind", + readOnly: true, + type: { + name: "String" + } + }, + path: { + serializedName: "path", + type: { + name: "String" + } + }, + expressionValue: { + serializedName: "expressionValue", + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + }, + targetValue: { + serializedName: "targetValue", + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + }, + operator: { + serializedName: "operator", + type: { + name: "String" + } + } + } + } +}; +const IfNotExistsEvaluationDetails = { + type: { + name: "Composite", + className: "IfNotExistsEvaluationDetails", + modelProperties: { + resourceId: { + serializedName: "resourceId", + type: { + name: "String" + } + }, + totalResources: { + serializedName: "totalResources", + type: { + name: "Number" + } + } + } + } +}; +const ComponentStateDetails = { + type: { + name: "Composite", + className: "ComponentStateDetails", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + }, + name: { + serializedName: "name", + type: { + name: "String" + } + }, + timestamp: { + serializedName: "timestamp", + type: { + name: "DateTime" + } + }, + complianceState: { + serializedName: "complianceState", + type: { + name: "String" + } + } + } + } +}; +const SummarizeResults = { + type: { + name: "Composite", + className: "SummarizeResults", + modelProperties: { + odataContext: { + serializedName: "@odata\\.context", + type: { + name: "String" + } + }, + odataCount: { + constraints: { + InclusiveMaximum: 1, + InclusiveMinimum: 1 + }, + serializedName: "@odata\\.count", + type: { + name: "Number" + } + }, + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Summary" + } + } + } + } + } + } +}; +const Summary = { + type: { + name: "Composite", + className: "Summary", + modelProperties: { + odataId: { + serializedName: "@odata\\.id", + type: { + name: "String" + } + }, + odataContext: { + serializedName: "@odata\\.context", + type: { + name: "String" + } + }, + results: { + serializedName: "results", + type: { + name: "Composite", + className: "SummaryResults" + } + }, + policyAssignments: { + serializedName: "policyAssignments", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyAssignmentSummary" + } + } + } + } + } + } +}; +const SummaryResults = { + type: { + name: "Composite", + className: "SummaryResults", + modelProperties: { + queryResultsUri: { + serializedName: "queryResultsUri", + type: { + name: "String" + } + }, + nonCompliantResources: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "nonCompliantResources", + type: { + name: "Number" + } + }, + nonCompliantPolicies: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "nonCompliantPolicies", + type: { + name: "Number" + } + }, + resourceDetails: { + serializedName: "resourceDetails", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ComplianceDetail" + } + } + } + }, + policyDetails: { + serializedName: "policyDetails", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ComplianceDetail" + } + } + } + }, + policyGroupDetails: { + serializedName: "policyGroupDetails", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ComplianceDetail" + } + } + } + } + } + } +}; +const ComplianceDetail = { + type: { + name: "Composite", + className: "ComplianceDetail", + modelProperties: { + complianceState: { + serializedName: "complianceState", + type: { + name: "String" + } + }, + count: { + serializedName: "count", + type: { + name: "Number" + } + } + } + } +}; +const PolicyAssignmentSummary = { + type: { + name: "Composite", + className: "PolicyAssignmentSummary", + modelProperties: { + policyAssignmentId: { + serializedName: "policyAssignmentId", + type: { + name: "String" + } + }, + policySetDefinitionId: { + serializedName: "policySetDefinitionId", + type: { + name: "String" + } + }, + results: { + serializedName: "results", + type: { + name: "Composite", + className: "SummaryResults" + } + }, + policyDefinitions: { + serializedName: "policyDefinitions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyDefinitionSummary" + } + } + } + }, + policyGroups: { + serializedName: "policyGroups", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyGroupSummary" + } + } + } + } + } + } +}; +const PolicyDefinitionSummary = { + type: { + name: "Composite", + className: "PolicyDefinitionSummary", + modelProperties: { + policyDefinitionId: { + serializedName: "policyDefinitionId", + type: { + name: "String" + } + }, + policyDefinitionReferenceId: { + serializedName: "policyDefinitionReferenceId", + type: { + name: "String" + } + }, + policyDefinitionGroupNames: { + serializedName: "policyDefinitionGroupNames", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + effect: { + serializedName: "effect", + type: { + name: "String" + } + }, + results: { + serializedName: "results", + type: { + name: "Composite", + className: "SummaryResults" + } + } + } + } +}; +const PolicyGroupSummary = { + type: { + name: "Composite", + className: "PolicyGroupSummary", + modelProperties: { + policyGroupName: { + serializedName: "policyGroupName", + type: { + name: "String" + } + }, + results: { + serializedName: "results", + type: { + name: "Composite", + className: "SummaryResults" + } + } + } + } +}; +const OperationsListResults = { + type: { + name: "Composite", + className: "OperationsListResults", + modelProperties: { + odataCount: { + constraints: { + InclusiveMinimum: 1 + }, + serializedName: "@odata\\.count", + type: { + name: "Number" + } + }, + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Operation" + } + } + } + } + } + } +}; +const Operation = { + type: { + name: "Composite", + className: "Operation", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + display: { + serializedName: "display", + type: { + name: "Composite", + className: "OperationDisplay" + } + } + } + } +}; +const OperationDisplay = { + type: { + name: "Composite", + className: "OperationDisplay", + modelProperties: { + provider: { + serializedName: "provider", + type: { + name: "String" + } + }, + resource: { + serializedName: "resource", + type: { + name: "String" + } + }, + operation: { + serializedName: "operation", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + } + } + } +}; +const PolicyMetadata = { + type: { + name: "Composite", + className: "PolicyMetadata", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + metadataId: { + serializedName: "properties.metadataId", + readOnly: true, + type: { + name: "String" + } + }, + category: { + serializedName: "properties.category", + readOnly: true, + type: { + name: "String" + } + }, + title: { + serializedName: "properties.title", + readOnly: true, + type: { + name: "String" + } + }, + owner: { + serializedName: "properties.owner", + readOnly: true, + type: { + name: "String" + } + }, + additionalContentUrl: { + serializedName: "properties.additionalContentUrl", + readOnly: true, + type: { + name: "String" + } + }, + metadata: { + serializedName: "properties.metadata", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + }, + description: { + serializedName: "properties.description", + readOnly: true, + type: { + name: "String" + } + }, + requirements: { + serializedName: "properties.requirements", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const PolicyMetadataSlimProperties = { + type: { + name: "Composite", + className: "PolicyMetadataSlimProperties", + modelProperties: { + metadataId: { + serializedName: "metadataId", + readOnly: true, + type: { + name: "String" + } + }, + category: { + serializedName: "category", + readOnly: true, + type: { + name: "String" + } + }, + title: { + serializedName: "title", + readOnly: true, + type: { + name: "String" + } + }, + owner: { + serializedName: "owner", + readOnly: true, + type: { + name: "String" + } + }, + additionalContentUrl: { + serializedName: "additionalContentUrl", + readOnly: true, + type: { + name: "String" + } + }, + metadata: { + serializedName: "metadata", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + } + } + } +}; +const ErrorResponseAutoGenerated = { + type: { + name: "Composite", + className: "ErrorResponseAutoGenerated", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ErrorDefinitionAutoGenerated" + } + } + } + } +}; +const ErrorDefinitionAutoGenerated = { + type: { + name: "Composite", + className: "ErrorDefinitionAutoGenerated", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String" + } + }, + target: { + serializedName: "target", + readOnly: true, + type: { + name: "String" + } + }, + details: { + serializedName: "details", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorDefinitionAutoGenerated" + } + } + } + }, + additionalInfo: { + serializedName: "additionalInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TypedErrorInfo" + } + } + } + } + } + } +}; +const PolicyMetadataCollection = { + type: { + name: "Composite", + className: "PolicyMetadataCollection", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SlimPolicyMetadata" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SlimPolicyMetadata = { + type: { + name: "Composite", + className: "SlimPolicyMetadata", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + metadataId: { + serializedName: "properties.metadataId", + readOnly: true, + type: { + name: "String" + } + }, + category: { + serializedName: "properties.category", + readOnly: true, + type: { + name: "String" + } + }, + title: { + serializedName: "properties.title", + readOnly: true, + type: { + name: "String" + } + }, + owner: { + serializedName: "properties.owner", + readOnly: true, + type: { + name: "String" + } + }, + additionalContentUrl: { + serializedName: "properties.additionalContentUrl", + readOnly: true, + type: { + name: "String" + } + }, + metadata: { + serializedName: "properties.metadata", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + } + } + } +}; +const CheckRestrictionsRequest = { + type: { + name: "Composite", + className: "CheckRestrictionsRequest", + modelProperties: { + resourceDetails: { + serializedName: "resourceDetails", + type: { + name: "Composite", + className: "CheckRestrictionsResourceDetails" + } + }, + pendingFields: { + serializedName: "pendingFields", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PendingField" + } + } + } + } + } + } +}; +const CheckRestrictionsResourceDetails = { + type: { + name: "Composite", + className: "CheckRestrictionsResourceDetails", + modelProperties: { + resourceContent: { + serializedName: "resourceContent", + required: true, + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + }, + apiVersion: { + serializedName: "apiVersion", + type: { + name: "String" + } + }, + scope: { + serializedName: "scope", + type: { + name: "String" + } + } + } + } +}; +const PendingField = { + type: { + name: "Composite", + className: "PendingField", + modelProperties: { + field: { + serializedName: "field", + required: true, + type: { + name: "String" + } + }, + values: { + serializedName: "values", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const CheckRestrictionsResult = { + type: { + name: "Composite", + className: "CheckRestrictionsResult", + modelProperties: { + fieldRestrictions: { + serializedName: "fieldRestrictions", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "FieldRestrictions" + } + } + } + }, + contentEvaluationResult: { + serializedName: "contentEvaluationResult", + type: { + name: "Composite", + className: "CheckRestrictionsResultContentEvaluationResult" + } + } + } + } +}; +const FieldRestrictions = { + type: { + name: "Composite", + className: "FieldRestrictions", + modelProperties: { + field: { + serializedName: "field", + readOnly: true, + type: { + name: "String" + } + }, + restrictions: { + serializedName: "restrictions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "FieldRestriction" + } + } + } + } + } + } +}; +const FieldRestriction = { + type: { + name: "Composite", + className: "FieldRestriction", + modelProperties: { + result: { + serializedName: "result", + readOnly: true, + type: { + name: "String" + } + }, + defaultValue: { + serializedName: "defaultValue", + readOnly: true, + type: { + name: "String" + } + }, + values: { + serializedName: "values", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + policy: { + serializedName: "policy", + type: { + name: "Composite", + className: "PolicyReference" + } + } + } + } +}; +const PolicyReference = { + type: { + name: "Composite", + className: "PolicyReference", + modelProperties: { + policyDefinitionId: { + serializedName: "policyDefinitionId", + readOnly: true, + type: { + name: "String" + } + }, + policySetDefinitionId: { + serializedName: "policySetDefinitionId", + readOnly: true, + type: { + name: "String" + } + }, + policyDefinitionReferenceId: { + serializedName: "policyDefinitionReferenceId", + readOnly: true, + type: { + name: "String" + } + }, + policyAssignmentId: { + serializedName: "policyAssignmentId", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const CheckRestrictionsResultContentEvaluationResult = { + type: { + name: "Composite", + className: "CheckRestrictionsResultContentEvaluationResult", + modelProperties: { + policyEvaluations: { + serializedName: "policyEvaluations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PolicyEvaluationResult" + } + } + } + } + } + } +}; +const PolicyEvaluationResult = { + type: { + name: "Composite", + className: "PolicyEvaluationResult", + modelProperties: { + policyInfo: { + serializedName: "policyInfo", + type: { + name: "Composite", + className: "PolicyReference" + } + }, + evaluationResult: { + serializedName: "evaluationResult", + readOnly: true, + type: { + name: "String" + } + }, + evaluationDetails: { + serializedName: "evaluationDetails", + type: { + name: "Composite", + className: "PolicyEvaluationDetails" + } + } + } + } +}; +const AttestationListResult = { + type: { + name: "Composite", + className: "AttestationListResult", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Attestation" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const AttestationEvidence = { + type: { + name: "Composite", + className: "AttestationEvidence", + modelProperties: { + description: { + serializedName: "description", + type: { + name: "String" + } + }, + sourceUri: { + serializedName: "sourceUri", + type: { + name: "String" + } + } + } + } +}; +const Resource = { + type: { + name: "Composite", + className: "Resource", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ErrorResponseAutoGenerated2 = { + type: { + name: "Composite", + className: "ErrorResponseAutoGenerated2", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ErrorDefinitionAutoGenerated2" + } + } + } + } +}; +const ErrorDefinitionAutoGenerated2 = { + type: { + name: "Composite", + className: "ErrorDefinitionAutoGenerated2", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String" + } + }, + target: { + serializedName: "target", + readOnly: true, + type: { + name: "String" + } + }, + details: { + serializedName: "details", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorDefinitionAutoGenerated2" + } + } + } + }, + additionalInfo: { + serializedName: "additionalInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TypedErrorInfo" + } + } + } + } + } + } +}; +const PolicyMetadataProperties = { + type: { + name: "Composite", + className: "PolicyMetadataProperties", + modelProperties: Object.assign(Object.assign({}, PolicyMetadataSlimProperties.type.modelProperties), { description: { + serializedName: "description", + readOnly: true, + type: { + name: "String" + } + }, requirements: { + serializedName: "requirements", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const Attestation = { + type: { + name: "Composite", + className: "Attestation", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, policyAssignmentId: { + serializedName: "properties.policyAssignmentId", + required: true, + type: { + name: "String" + } + }, policyDefinitionReferenceId: { + serializedName: "properties.policyDefinitionReferenceId", + type: { + name: "String" + } + }, complianceState: { + serializedName: "properties.complianceState", + type: { + name: "String" + } + }, expiresOn: { + serializedName: "properties.expiresOn", + type: { + name: "DateTime" + } + }, owner: { + serializedName: "properties.owner", + type: { + name: "String" + } + }, comments: { + serializedName: "properties.comments", + type: { + name: "String" + } + }, evidence: { + serializedName: "properties.evidence", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AttestationEvidence" + } + } + } + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String" + } + }, lastComplianceStateChangeAt: { + serializedName: "properties.lastComplianceStateChangeAt", + readOnly: true, + type: { + name: "DateTime" + } + } }) + } +}; + +var Mappers = /*#__PURE__*/Object.freeze({ + __proto__: null, + PolicyTrackedResourcesQueryResults: PolicyTrackedResourcesQueryResults, + PolicyTrackedResource: PolicyTrackedResource, + PolicyDetails: PolicyDetails, + TrackedResourceModificationDetails: TrackedResourceModificationDetails, + QueryFailure: QueryFailure, + QueryFailureError: QueryFailureError, + RemediationDeploymentsListResult: RemediationDeploymentsListResult, + RemediationDeployment: RemediationDeployment, + ErrorDefinition: ErrorDefinition, + TypedErrorInfo: TypedErrorInfo, + ErrorResponse: ErrorResponse, + Remediation: Remediation, + RemediationFilters: RemediationFilters, + RemediationDeploymentSummary: RemediationDeploymentSummary, + RemediationPropertiesFailureThreshold: RemediationPropertiesFailureThreshold, + SystemData: SystemData, + RemediationListResult: RemediationListResult, + PolicyEventsQueryResults: PolicyEventsQueryResults, + PolicyEvent: PolicyEvent, + ComponentEventDetails: ComponentEventDetails, + PolicyStatesQueryResults: PolicyStatesQueryResults, + PolicyState: PolicyState, + PolicyEvaluationDetails: PolicyEvaluationDetails, + ExpressionEvaluationDetails: ExpressionEvaluationDetails, + IfNotExistsEvaluationDetails: IfNotExistsEvaluationDetails, + ComponentStateDetails: ComponentStateDetails, + SummarizeResults: SummarizeResults, + Summary: Summary, + SummaryResults: SummaryResults, + ComplianceDetail: ComplianceDetail, + PolicyAssignmentSummary: PolicyAssignmentSummary, + PolicyDefinitionSummary: PolicyDefinitionSummary, + PolicyGroupSummary: PolicyGroupSummary, + OperationsListResults: OperationsListResults, + Operation: Operation, + OperationDisplay: OperationDisplay, + PolicyMetadata: PolicyMetadata, + PolicyMetadataSlimProperties: PolicyMetadataSlimProperties, + ErrorResponseAutoGenerated: ErrorResponseAutoGenerated, + ErrorDefinitionAutoGenerated: ErrorDefinitionAutoGenerated, + PolicyMetadataCollection: PolicyMetadataCollection, + SlimPolicyMetadata: SlimPolicyMetadata, + CheckRestrictionsRequest: CheckRestrictionsRequest, + CheckRestrictionsResourceDetails: CheckRestrictionsResourceDetails, + PendingField: PendingField, + CheckRestrictionsResult: CheckRestrictionsResult, + FieldRestrictions: FieldRestrictions, + FieldRestriction: FieldRestriction, + PolicyReference: PolicyReference, + CheckRestrictionsResultContentEvaluationResult: CheckRestrictionsResultContentEvaluationResult, + PolicyEvaluationResult: PolicyEvaluationResult, + AttestationListResult: AttestationListResult, + AttestationEvidence: AttestationEvidence, + Resource: Resource, + ErrorResponseAutoGenerated2: ErrorResponseAutoGenerated2, + ErrorDefinitionAutoGenerated2: ErrorDefinitionAutoGenerated2, + PolicyMetadataProperties: PolicyMetadataProperties, + Attestation: Attestation +}); + +/* + * 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. + */ +const accept = { + parameterPath: "accept", + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Accept", + type: { + name: "String" + } + } +}; +const $host = { + parameterPath: "$host", + mapper: { + serializedName: "$host", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const managementGroupsNamespace = { + parameterPath: "managementGroupsNamespace", + mapper: { + defaultValue: "Microsoft.Management", + isConstant: true, + serializedName: "managementGroupsNamespace", + type: { + name: "String" + } + } +}; +const managementGroupName = { + parameterPath: "managementGroupName", + mapper: { + serializedName: "managementGroupName", + required: true, + type: { + name: "String" + } + } +}; +const policyTrackedResourcesResource = { + parameterPath: "policyTrackedResourcesResource", + mapper: { + defaultValue: "default", + isConstant: true, + serializedName: "policyTrackedResourcesResource", + type: { + name: "String" + } + } +}; +const top = { + parameterPath: ["options", "queryOptions", "top"], + mapper: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "$top", + type: { + name: "Number" + } + } +}; +const filter = { + parameterPath: ["options", "queryOptions", "filter"], + mapper: { + serializedName: "$filter", + type: { + name: "String" + } + } +}; +const apiVersion = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2018-07-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const subscriptionId = { + parameterPath: "subscriptionId", + mapper: { + serializedName: "subscriptionId", + required: true, + type: { + name: "String" + } + } +}; +const resourceGroupName = { + parameterPath: "resourceGroupName", + mapper: { + serializedName: "resourceGroupName", + required: true, + type: { + name: "String" + } + } +}; +const resourceId = { + parameterPath: "resourceId", + mapper: { + serializedName: "resourceId", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const nextLink = { + parameterPath: "nextLink", + mapper: { + serializedName: "nextLink", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const managementGroupId = { + parameterPath: "managementGroupId", + mapper: { + serializedName: "managementGroupId", + required: true, + type: { + name: "String" + } + } +}; +const remediationName = { + parameterPath: "remediationName", + mapper: { + serializedName: "remediationName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion1 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-10-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const contentType = { + parameterPath: ["options", "contentType"], + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Content-Type", + type: { + name: "String" + } + } +}; +const parameters = { + parameterPath: "parameters", + mapper: Remediation +}; +const policyEventsResource = { + parameterPath: "policyEventsResource", + mapper: { + defaultValue: "default", + isConstant: true, + serializedName: "policyEventsResource", + type: { + name: "String" + } + } +}; +const apiVersion2 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2019-10-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const orderBy = { + parameterPath: ["options", "queryOptions", "orderBy"], + mapper: { + serializedName: "$orderby", + type: { + name: "String" + } + } +}; +const select = { + parameterPath: ["options", "queryOptions", "select"], + mapper: { + serializedName: "$select", + type: { + name: "String" + } + } +}; +const fromParam = { + parameterPath: ["options", "queryOptions", "fromParam"], + mapper: { + serializedName: "$from", + type: { + name: "DateTime" + } + } +}; +const to = { + parameterPath: ["options", "queryOptions", "to"], + mapper: { + serializedName: "$to", + type: { + name: "DateTime" + } + } +}; +const apply = { + parameterPath: ["options", "queryOptions", "apply"], + mapper: { + serializedName: "$apply", + type: { + name: "String" + } + } +}; +const skipToken = { + parameterPath: ["options", "queryOptions", "skipToken"], + mapper: { + serializedName: "$skiptoken", + type: { + name: "String" + } + } +}; +const subscriptionId1 = { + parameterPath: "subscriptionId", + mapper: { + serializedName: "subscriptionId", + required: true, + type: { + name: "String" + } + } +}; +const expand = { + parameterPath: ["options", "queryOptions", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String" + } + } +}; +const authorizationNamespace = { + parameterPath: "authorizationNamespace", + mapper: { + defaultValue: "Microsoft.Authorization", + isConstant: true, + serializedName: "authorizationNamespace", + type: { + name: "String" + } + } +}; +const policySetDefinitionName = { + parameterPath: "policySetDefinitionName", + mapper: { + serializedName: "policySetDefinitionName", + required: true, + type: { + name: "String" + } + } +}; +const policyDefinitionName = { + parameterPath: "policyDefinitionName", + mapper: { + serializedName: "policyDefinitionName", + required: true, + type: { + name: "String" + } + } +}; +const policyAssignmentName = { + parameterPath: "policyAssignmentName", + mapper: { + serializedName: "policyAssignmentName", + required: true, + type: { + name: "String" + } + } +}; +const policyStatesResource = { + parameterPath: "policyStatesResource", + mapper: { + serializedName: "policyStatesResource", + required: true, + type: { + name: "String" + } + } +}; +const policyStatesSummaryResource = { + parameterPath: "policyStatesSummaryResource", + mapper: { + defaultValue: "latest", + isConstant: true, + serializedName: "policyStatesSummaryResource", + type: { + name: "String" + } + } +}; +const resourceName = { + parameterPath: "resourceName", + mapper: { + serializedName: "resourceName", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const parameters1 = { + parameterPath: "parameters", + mapper: CheckRestrictionsRequest +}; +const apiVersion3 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2020-07-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const resourceGroupName1 = { + parameterPath: "resourceGroupName", + mapper: { + constraints: { + MaxLength: 90, + MinLength: 1 + }, + serializedName: "resourceGroupName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion4 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-01-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const parameters2 = { + parameterPath: "parameters", + mapper: Attestation +}; +const attestationName = { + parameterPath: "attestationName", + mapper: { + serializedName: "attestationName", + required: true, + type: { + name: "String" + } + } +}; + +/* + * 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 containing PolicyTrackedResources operations. */ +class PolicyTrackedResourcesImpl { + /** + * Initialize a new instance of the class PolicyTrackedResources class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Queries policy tracked resources under the management group. + * @param managementGroupName Management group name. + * @param options The options parameters. + */ + listQueryResultsForManagementGroup(managementGroupName, options) { + const iter = this.listQueryResultsForManagementGroupPagingAll(managementGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForManagementGroupPagingPage(managementGroupName, options); + } + }; + } + listQueryResultsForManagementGroupPagingPage(managementGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForManagementGroupPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForManagementGroup(managementGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForManagementGroupNext(managementGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForManagementGroupPagingAll(managementGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForManagementGroupPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForManagementGroupPagingPage(managementGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Queries policy tracked resources under the subscription. + * @param options The options parameters. + */ + listQueryResultsForSubscription(options) { + const iter = this.listQueryResultsForSubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForSubscriptionPagingPage(options); + } + }; + } + listQueryResultsForSubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForSubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForSubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForSubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForSubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Queries policy tracked resources under the resource group. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + listQueryResultsForResourceGroup(resourceGroupName, options) { + const iter = this.listQueryResultsForResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listQueryResultsForResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupPagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Queries policy tracked resources under the resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + listQueryResultsForResource(resourceId, options) { + const iter = this.listQueryResultsForResourcePagingAll(resourceId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForResourcePagingPage(resourceId, options); + } + }; + } + listQueryResultsForResourcePagingPage(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourcePagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForResource(resourceId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForResourceNext(resourceId, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForResourcePagingAll(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourcePagingAll_1() { + var e_4, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForResourcePagingPage(resourceId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * Queries policy tracked resources under the management group. + * @param managementGroupName Management group name. + * @param options The options parameters. + */ + _listQueryResultsForManagementGroup(managementGroupName, options) { + return this.client.sendOperationRequest({ managementGroupName, options }, listQueryResultsForManagementGroupOperationSpec); + } + /** + * Queries policy tracked resources under the subscription. + * @param options The options parameters. + */ + _listQueryResultsForSubscription(options) { + return this.client.sendOperationRequest({ options }, listQueryResultsForSubscriptionOperationSpec); + } + /** + * Queries policy tracked resources under the resource group. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listQueryResultsForResourceGroupOperationSpec); + } + /** + * Queries policy tracked resources under the resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + _listQueryResultsForResource(resourceId, options) { + return this.client.sendOperationRequest({ resourceId, options }, listQueryResultsForResourceOperationSpec); + } + /** + * ListQueryResultsForManagementGroupNext + * @param managementGroupName Management group name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForManagementGroup method. + * @param options The options parameters. + */ + _listQueryResultsForManagementGroupNext(managementGroupName, nextLink, options) { + return this.client.sendOperationRequest({ managementGroupName, nextLink, options }, listQueryResultsForManagementGroupNextOperationSpec); + } + /** + * ListQueryResultsForSubscriptionNext + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForSubscription method. + * @param options The options parameters. + */ + _listQueryResultsForSubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listQueryResultsForSubscriptionNextOperationSpec); + } + /** + * ListQueryResultsForResourceGroupNext + * @param resourceGroupName Resource group name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForResourceGroup method. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listQueryResultsForResourceGroupNextOperationSpec); + } + /** + * ListQueryResultsForResourceNext + * @param resourceId Resource ID. + * @param nextLink The nextLink from the previous successful call to the ListQueryResultsForResource + * method. + * @param options The options parameters. + */ + _listQueryResultsForResourceNext(resourceId, nextLink, options) { + return this.client.sendOperationRequest({ resourceId, nextLink, options }, listQueryResultsForResourceNextOperationSpec); + } +} +// Operation Specifications +const serializer = coreClient.createSerializer(Mappers, /* isXml */ false); +const listQueryResultsForManagementGroupOperationSpec = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupName}/providers/Microsoft.PolicyInsights/policyTrackedResources/{policyTrackedResourcesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyTrackedResourcesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [top, filter, apiVersion], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupName, + policyTrackedResourcesResource + ], + headerParameters: [accept], + serializer +}; +const listQueryResultsForSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyTrackedResources/{policyTrackedResourcesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyTrackedResourcesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [top, filter, apiVersion], + urlParameters: [ + $host, + policyTrackedResourcesResource, + subscriptionId + ], + headerParameters: [accept], + serializer +}; +const listQueryResultsForResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyTrackedResources/{policyTrackedResourcesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyTrackedResourcesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [top, filter, apiVersion], + urlParameters: [ + $host, + policyTrackedResourcesResource, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer +}; +const listQueryResultsForResourceOperationSpec = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/policyTrackedResources/{policyTrackedResourcesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyTrackedResourcesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [top, filter, apiVersion], + urlParameters: [ + $host, + policyTrackedResourcesResource, + resourceId + ], + headerParameters: [accept], + serializer +}; +const listQueryResultsForManagementGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyTrackedResourcesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [top, filter, apiVersion], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupName, + policyTrackedResourcesResource, + nextLink + ], + headerParameters: [accept], + serializer +}; +const listQueryResultsForSubscriptionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyTrackedResourcesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [top, filter, apiVersion], + urlParameters: [ + $host, + policyTrackedResourcesResource, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer +}; +const listQueryResultsForResourceGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyTrackedResourcesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [top, filter, apiVersion], + urlParameters: [ + $host, + policyTrackedResourcesResource, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer +}; +const listQueryResultsForResourceNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyTrackedResourcesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [top, filter, apiVersion], + urlParameters: [ + $host, + policyTrackedResourcesResource, + resourceId, + nextLink + ], + headerParameters: [accept], + serializer +}; + +/* + * 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 containing Remediations operations. */ +class RemediationsImpl { + /** + * Initialize a new instance of the class Remediations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets all deployments for a remediation at management group scope. + * @param managementGroupId Management group ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + listDeploymentsAtManagementGroup(managementGroupId, remediationName, options) { + const iter = this.listDeploymentsAtManagementGroupPagingAll(managementGroupId, remediationName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listDeploymentsAtManagementGroupPagingPage(managementGroupId, remediationName, options); + } + }; + } + listDeploymentsAtManagementGroupPagingPage(managementGroupId, remediationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listDeploymentsAtManagementGroupPagingPage_1() { + let result = yield tslib.__await(this._listDeploymentsAtManagementGroup(managementGroupId, remediationName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listDeploymentsAtManagementGroupNext(managementGroupId, remediationName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listDeploymentsAtManagementGroupPagingAll(managementGroupId, remediationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listDeploymentsAtManagementGroupPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listDeploymentsAtManagementGroupPagingPage(managementGroupId, remediationName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets all remediations for the management group. + * @param managementGroupId Management group ID. + * @param options The options parameters. + */ + listForManagementGroup(managementGroupId, options) { + const iter = this.listForManagementGroupPagingAll(managementGroupId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listForManagementGroupPagingPage(managementGroupId, options); + } + }; + } + listForManagementGroupPagingPage(managementGroupId, options) { + return tslib.__asyncGenerator(this, arguments, function* listForManagementGroupPagingPage_1() { + let result = yield tslib.__await(this._listForManagementGroup(managementGroupId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listForManagementGroupNext(managementGroupId, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listForManagementGroupPagingAll(managementGroupId, options) { + return tslib.__asyncGenerator(this, arguments, function* listForManagementGroupPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listForManagementGroupPagingPage(managementGroupId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets all deployments for a remediation at subscription scope. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + listDeploymentsAtSubscription(remediationName, options) { + const iter = this.listDeploymentsAtSubscriptionPagingAll(remediationName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listDeploymentsAtSubscriptionPagingPage(remediationName, options); + } + }; + } + listDeploymentsAtSubscriptionPagingPage(remediationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listDeploymentsAtSubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listDeploymentsAtSubscription(remediationName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listDeploymentsAtSubscriptionNext(remediationName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listDeploymentsAtSubscriptionPagingAll(remediationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listDeploymentsAtSubscriptionPagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listDeploymentsAtSubscriptionPagingPage(remediationName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Gets all remediations for the subscription. + * @param options The options parameters. + */ + listForSubscription(options) { + const iter = this.listForSubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listForSubscriptionPagingPage(options); + } + }; + } + listForSubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listForSubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listForSubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listForSubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listForSubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listForSubscriptionPagingAll_1() { + var e_4, _a; + try { + for (var _b = tslib.__asyncValues(this.listForSubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * Gets all deployments for a remediation at resource group scope. + * @param resourceGroupName Resource group name. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + listDeploymentsAtResourceGroup(resourceGroupName, remediationName, options) { + const iter = this.listDeploymentsAtResourceGroupPagingAll(resourceGroupName, remediationName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listDeploymentsAtResourceGroupPagingPage(resourceGroupName, remediationName, options); + } + }; + } + listDeploymentsAtResourceGroupPagingPage(resourceGroupName, remediationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listDeploymentsAtResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listDeploymentsAtResourceGroup(resourceGroupName, remediationName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listDeploymentsAtResourceGroupNext(resourceGroupName, remediationName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listDeploymentsAtResourceGroupPagingAll(resourceGroupName, remediationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listDeploymentsAtResourceGroupPagingAll_1() { + var e_5, _a; + try { + for (var _b = tslib.__asyncValues(this.listDeploymentsAtResourceGroupPagingPage(resourceGroupName, remediationName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_5) throw e_5.error; } + } + }); + } + /** + * Gets all remediations for the subscription. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + listForResourceGroup(resourceGroupName, options) { + const iter = this.listForResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listForResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listForResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listForResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listForResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listForResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingAll_1() { + var e_6, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_6) throw e_6.error; } + } + }); + } + /** + * Gets all deployments for a remediation at resource scope. + * @param resourceId Resource ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + listDeploymentsAtResource(resourceId, remediationName, options) { + const iter = this.listDeploymentsAtResourcePagingAll(resourceId, remediationName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listDeploymentsAtResourcePagingPage(resourceId, remediationName, options); + } + }; + } + listDeploymentsAtResourcePagingPage(resourceId, remediationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listDeploymentsAtResourcePagingPage_1() { + let result = yield tslib.__await(this._listDeploymentsAtResource(resourceId, remediationName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listDeploymentsAtResourceNext(resourceId, remediationName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listDeploymentsAtResourcePagingAll(resourceId, remediationName, options) { + return tslib.__asyncGenerator(this, arguments, function* listDeploymentsAtResourcePagingAll_1() { + var e_7, _a; + try { + for (var _b = tslib.__asyncValues(this.listDeploymentsAtResourcePagingPage(resourceId, remediationName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_7) throw e_7.error; } + } + }); + } + /** + * Gets all remediations for a resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + listForResource(resourceId, options) { + const iter = this.listForResourcePagingAll(resourceId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listForResourcePagingPage(resourceId, options); + } + }; + } + listForResourcePagingPage(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingPage_1() { + let result = yield tslib.__await(this._listForResource(resourceId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listForResourceNext(resourceId, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listForResourcePagingAll(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingAll_1() { + var e_8, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourcePagingPage(resourceId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_8) throw e_8.error; } + } + }); + } + /** + * Gets all deployments for a remediation at management group scope. + * @param managementGroupId Management group ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + _listDeploymentsAtManagementGroup(managementGroupId, remediationName, options) { + return this.client.sendOperationRequest({ managementGroupId, remediationName, options }, listDeploymentsAtManagementGroupOperationSpec); + } + /** + * Cancels a remediation at management group scope. + * @param managementGroupId Management group ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + cancelAtManagementGroup(managementGroupId, remediationName, options) { + return this.client.sendOperationRequest({ managementGroupId, remediationName, options }, cancelAtManagementGroupOperationSpec); + } + /** + * Gets all remediations for the management group. + * @param managementGroupId Management group ID. + * @param options The options parameters. + */ + _listForManagementGroup(managementGroupId, options) { + return this.client.sendOperationRequest({ managementGroupId, options }, listForManagementGroupOperationSpec); + } + /** + * Creates or updates a remediation at management group scope. + * @param managementGroupId Management group ID. + * @param remediationName The name of the remediation. + * @param parameters The remediation parameters. + * @param options The options parameters. + */ + createOrUpdateAtManagementGroup(managementGroupId, remediationName, parameters, options) { + return this.client.sendOperationRequest({ managementGroupId, remediationName, parameters, options }, createOrUpdateAtManagementGroupOperationSpec); + } + /** + * Gets an existing remediation at management group scope. + * @param managementGroupId Management group ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + getAtManagementGroup(managementGroupId, remediationName, options) { + return this.client.sendOperationRequest({ managementGroupId, remediationName, options }, getAtManagementGroupOperationSpec); + } + /** + * Deletes an existing remediation at management group scope. + * @param managementGroupId Management group ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + deleteAtManagementGroup(managementGroupId, remediationName, options) { + return this.client.sendOperationRequest({ managementGroupId, remediationName, options }, deleteAtManagementGroupOperationSpec); + } + /** + * Gets all deployments for a remediation at subscription scope. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + _listDeploymentsAtSubscription(remediationName, options) { + return this.client.sendOperationRequest({ remediationName, options }, listDeploymentsAtSubscriptionOperationSpec); + } + /** + * Cancels a remediation at subscription scope. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + cancelAtSubscription(remediationName, options) { + return this.client.sendOperationRequest({ remediationName, options }, cancelAtSubscriptionOperationSpec); + } + /** + * Gets all remediations for the subscription. + * @param options The options parameters. + */ + _listForSubscription(options) { + return this.client.sendOperationRequest({ options }, listForSubscriptionOperationSpec); + } + /** + * Creates or updates a remediation at subscription scope. + * @param remediationName The name of the remediation. + * @param parameters The remediation parameters. + * @param options The options parameters. + */ + createOrUpdateAtSubscription(remediationName, parameters, options) { + return this.client.sendOperationRequest({ remediationName, parameters, options }, createOrUpdateAtSubscriptionOperationSpec); + } + /** + * Gets an existing remediation at subscription scope. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + getAtSubscription(remediationName, options) { + return this.client.sendOperationRequest({ remediationName, options }, getAtSubscriptionOperationSpec); + } + /** + * Deletes an existing remediation at subscription scope. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + deleteAtSubscription(remediationName, options) { + return this.client.sendOperationRequest({ remediationName, options }, deleteAtSubscriptionOperationSpec); + } + /** + * Gets all deployments for a remediation at resource group scope. + * @param resourceGroupName Resource group name. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + _listDeploymentsAtResourceGroup(resourceGroupName, remediationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, remediationName, options }, listDeploymentsAtResourceGroupOperationSpec); + } + /** + * Cancels a remediation at resource group scope. + * @param resourceGroupName Resource group name. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + cancelAtResourceGroup(resourceGroupName, remediationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, remediationName, options }, cancelAtResourceGroupOperationSpec); + } + /** + * Gets all remediations for the subscription. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + _listForResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listForResourceGroupOperationSpec); + } + /** + * Creates or updates a remediation at resource group scope. + * @param resourceGroupName Resource group name. + * @param remediationName The name of the remediation. + * @param parameters The remediation parameters. + * @param options The options parameters. + */ + createOrUpdateAtResourceGroup(resourceGroupName, remediationName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, remediationName, parameters, options }, createOrUpdateAtResourceGroupOperationSpec); + } + /** + * Gets an existing remediation at resource group scope. + * @param resourceGroupName Resource group name. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + getAtResourceGroup(resourceGroupName, remediationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, remediationName, options }, getAtResourceGroupOperationSpec); + } + /** + * Deletes an existing remediation at resource group scope. + * @param resourceGroupName Resource group name. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + deleteAtResourceGroup(resourceGroupName, remediationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, remediationName, options }, deleteAtResourceGroupOperationSpec); + } + /** + * Gets all deployments for a remediation at resource scope. + * @param resourceId Resource ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + _listDeploymentsAtResource(resourceId, remediationName, options) { + return this.client.sendOperationRequest({ resourceId, remediationName, options }, listDeploymentsAtResourceOperationSpec); + } + /** + * Cancel a remediation at resource scope. + * @param resourceId Resource ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + cancelAtResource(resourceId, remediationName, options) { + return this.client.sendOperationRequest({ resourceId, remediationName, options }, cancelAtResourceOperationSpec); + } + /** + * Gets all remediations for a resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + _listForResource(resourceId, options) { + return this.client.sendOperationRequest({ resourceId, options }, listForResourceOperationSpec); + } + /** + * Creates or updates a remediation at resource scope. + * @param resourceId Resource ID. + * @param remediationName The name of the remediation. + * @param parameters The remediation parameters. + * @param options The options parameters. + */ + createOrUpdateAtResource(resourceId, remediationName, parameters, options) { + return this.client.sendOperationRequest({ resourceId, remediationName, parameters, options }, createOrUpdateAtResourceOperationSpec); + } + /** + * Gets an existing remediation at resource scope. + * @param resourceId Resource ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + getAtResource(resourceId, remediationName, options) { + return this.client.sendOperationRequest({ resourceId, remediationName, options }, getAtResourceOperationSpec); + } + /** + * Deletes an existing remediation at individual resource scope. + * @param resourceId Resource ID. + * @param remediationName The name of the remediation. + * @param options The options parameters. + */ + deleteAtResource(resourceId, remediationName, options) { + return this.client.sendOperationRequest({ resourceId, remediationName, options }, deleteAtResourceOperationSpec); + } + /** + * ListDeploymentsAtManagementGroupNext + * @param managementGroupId Management group ID. + * @param remediationName The name of the remediation. + * @param nextLink The nextLink from the previous successful call to the + * ListDeploymentsAtManagementGroup method. + * @param options The options parameters. + */ + _listDeploymentsAtManagementGroupNext(managementGroupId, remediationName, nextLink, options) { + return this.client.sendOperationRequest({ managementGroupId, remediationName, nextLink, options }, listDeploymentsAtManagementGroupNextOperationSpec); + } + /** + * ListForManagementGroupNext + * @param managementGroupId Management group ID. + * @param nextLink The nextLink from the previous successful call to the ListForManagementGroup method. + * @param options The options parameters. + */ + _listForManagementGroupNext(managementGroupId, nextLink, options) { + return this.client.sendOperationRequest({ managementGroupId, nextLink, options }, listForManagementGroupNextOperationSpec); + } + /** + * ListDeploymentsAtSubscriptionNext + * @param remediationName The name of the remediation. + * @param nextLink The nextLink from the previous successful call to the ListDeploymentsAtSubscription + * method. + * @param options The options parameters. + */ + _listDeploymentsAtSubscriptionNext(remediationName, nextLink, options) { + return this.client.sendOperationRequest({ remediationName, nextLink, options }, listDeploymentsAtSubscriptionNextOperationSpec); + } + /** + * ListForSubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListForSubscription method. + * @param options The options parameters. + */ + _listForSubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listForSubscriptionNextOperationSpec); + } + /** + * ListDeploymentsAtResourceGroupNext + * @param resourceGroupName Resource group name. + * @param remediationName The name of the remediation. + * @param nextLink The nextLink from the previous successful call to the ListDeploymentsAtResourceGroup + * method. + * @param options The options parameters. + */ + _listDeploymentsAtResourceGroupNext(resourceGroupName, remediationName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, remediationName, nextLink, options }, listDeploymentsAtResourceGroupNextOperationSpec); + } + /** + * ListForResourceGroupNext + * @param resourceGroupName Resource group name. + * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. + * @param options The options parameters. + */ + _listForResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listForResourceGroupNextOperationSpec); + } + /** + * ListDeploymentsAtResourceNext + * @param resourceId Resource ID. + * @param remediationName The name of the remediation. + * @param nextLink The nextLink from the previous successful call to the ListDeploymentsAtResource + * method. + * @param options The options parameters. + */ + _listDeploymentsAtResourceNext(resourceId, remediationName, nextLink, options) { + return this.client.sendOperationRequest({ resourceId, remediationName, nextLink, options }, listDeploymentsAtResourceNextOperationSpec); + } + /** + * ListForResourceNext + * @param resourceId Resource ID. + * @param nextLink The nextLink from the previous successful call to the ListForResource method. + * @param options The options parameters. + */ + _listForResourceNext(resourceId, nextLink, options) { + return this.client.sendOperationRequest({ resourceId, nextLink, options }, listForResourceNextOperationSpec); + } +} +// Operation Specifications +const serializer$1 = coreClient.createSerializer(Mappers, /* isXml */ false); +const listDeploymentsAtManagementGroupOperationSpec = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}/listDeployments", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RemediationDeploymentsListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, apiVersion1], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const cancelAtManagementGroupOperationSpec = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}/cancel", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForManagementGroupOperationSpec = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupId}/providers/Microsoft.PolicyInsights/remediations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, filter, apiVersion1], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupId + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const createOrUpdateAtManagementGroupOperationSpec = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Remediation + }, + 201: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + requestBody: parameters, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupId, + remediationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$1 +}; +const getAtManagementGroupOperationSpec = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const deleteAtManagementGroupOperationSpec = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: Remediation + }, + 204: {}, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listDeploymentsAtSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}/listDeployments", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RemediationDeploymentsListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, apiVersion1], + urlParameters: [ + $host, + subscriptionId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const cancelAtSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}/cancel", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/remediations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, filter, apiVersion1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$1 +}; +const createOrUpdateAtSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Remediation + }, + 201: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + requestBody: parameters, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + remediationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$1 +}; +const getAtSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const deleteAtSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: Remediation + }, + 204: {}, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listDeploymentsAtResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/remediations/{remediationName}/listDeployments", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RemediationDeploymentsListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const cancelAtResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/remediations/{remediationName}/cancel", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/remediations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, filter, apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const createOrUpdateAtResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Remediation + }, + 201: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + requestBody: parameters, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + remediationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$1 +}; +const getAtResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const deleteAtResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: Remediation + }, + 204: {}, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listDeploymentsAtResourceOperationSpec = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}/listDeployments", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RemediationDeploymentsListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, apiVersion1], + urlParameters: [ + $host, + resourceId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const cancelAtResourceOperationSpec = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}/cancel", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + resourceId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForResourceOperationSpec = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/remediations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, filter, apiVersion1], + urlParameters: [$host, resourceId], + headerParameters: [accept], + serializer: serializer$1 +}; +const createOrUpdateAtResourceOperationSpec = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Remediation + }, + 201: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + requestBody: parameters, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + resourceId, + remediationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$1 +}; +const getAtResourceOperationSpec = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Remediation + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + resourceId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const deleteAtResourceOperationSpec = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/remediations/{remediationName}", + httpMethod: "DELETE", + responses: { + 200: { + bodyMapper: Remediation + }, + 204: {}, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + resourceId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listDeploymentsAtManagementGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationDeploymentsListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, apiVersion1], + urlParameters: [ + $host, + managementGroupsNamespace, + nextLink, + managementGroupId, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForManagementGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, filter, apiVersion1], + urlParameters: [ + $host, + managementGroupsNamespace, + nextLink, + managementGroupId + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listDeploymentsAtSubscriptionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationDeploymentsListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, apiVersion1], + urlParameters: [ + $host, + subscriptionId, + nextLink, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForSubscriptionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, filter, apiVersion1], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listDeploymentsAtResourceGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationDeploymentsListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForResourceGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, filter, apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listDeploymentsAtResourceNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationDeploymentsListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, apiVersion1], + urlParameters: [ + $host, + resourceId, + nextLink, + remediationName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listForResourceNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RemediationListResult + }, + default: { + bodyMapper: ErrorResponse + } + }, + queryParameters: [top, filter, apiVersion1], + urlParameters: [$host, resourceId, nextLink], + headerParameters: [accept], + serializer: serializer$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 containing PolicyEvents operations. */ +class PolicyEventsImpl { + /** + * Initialize a new instance of the class PolicyEvents class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Queries policy events for the resources under the management group. + * @param managementGroupName Management group name. + * @param options The options parameters. + */ + listQueryResultsForManagementGroup(managementGroupName, options) { + const iter = this.listQueryResultsForManagementGroupPagingAll(managementGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForManagementGroupPagingPage(managementGroupName, options); + } + }; + } + listQueryResultsForManagementGroupPagingPage(managementGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForManagementGroupPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForManagementGroup(managementGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForManagementGroupNext(managementGroupName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForManagementGroupPagingAll(managementGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForManagementGroupPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForManagementGroupPagingPage(managementGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Queries policy events for the resources under the subscription. + * @param subscriptionId Microsoft Azure subscription ID. + * @param options The options parameters. + */ + listQueryResultsForSubscription(subscriptionId, options) { + const iter = this.listQueryResultsForSubscriptionPagingAll(subscriptionId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForSubscriptionPagingPage(subscriptionId, options); + } + }; + } + listQueryResultsForSubscriptionPagingPage(subscriptionId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForSubscription(subscriptionId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForSubscriptionNext(subscriptionId, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForSubscriptionPagingAll(subscriptionId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForSubscriptionPagingPage(subscriptionId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Queries policy events for the resources under the resource group. + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + listQueryResultsForResourceGroup(subscriptionId, resourceGroupName, options) { + const iter = this.listQueryResultsForResourceGroupPagingAll(subscriptionId, resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForResourceGroupPagingPage(subscriptionId, resourceGroupName, options); + } + }; + } + listQueryResultsForResourceGroupPagingPage(subscriptionId, resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForResourceGroup(subscriptionId, resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForResourceGroupNext(subscriptionId, resourceGroupName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForResourceGroupPagingAll(subscriptionId, resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupPagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForResourceGroupPagingPage(subscriptionId, resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Queries policy events for the resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + listQueryResultsForResource(resourceId, options) { + const iter = this.listQueryResultsForResourcePagingAll(resourceId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForResourcePagingPage(resourceId, options); + } + }; + } + listQueryResultsForResourcePagingPage(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourcePagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForResource(resourceId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForResourceNext(resourceId, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForResourcePagingAll(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourcePagingAll_1() { + var e_4, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForResourcePagingPage(resourceId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * Queries policy events for the subscription level policy set definition. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policySetDefinitionName Policy set definition name. + * @param options The options parameters. + */ + listQueryResultsForPolicySetDefinition(subscriptionId, policySetDefinitionName, options) { + const iter = this.listQueryResultsForPolicySetDefinitionPagingAll(subscriptionId, policySetDefinitionName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForPolicySetDefinitionPagingPage(subscriptionId, policySetDefinitionName, options); + } + }; + } + listQueryResultsForPolicySetDefinitionPagingPage(subscriptionId, policySetDefinitionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForPolicySetDefinitionPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForPolicySetDefinition(subscriptionId, policySetDefinitionName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForPolicySetDefinitionNext(subscriptionId, policySetDefinitionName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForPolicySetDefinitionPagingAll(subscriptionId, policySetDefinitionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForPolicySetDefinitionPagingAll_1() { + var e_5, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForPolicySetDefinitionPagingPage(subscriptionId, policySetDefinitionName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_5) throw e_5.error; } + } + }); + } + /** + * Queries policy events for the subscription level policy definition. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyDefinitionName Policy definition name. + * @param options The options parameters. + */ + listQueryResultsForPolicyDefinition(subscriptionId, policyDefinitionName, options) { + const iter = this.listQueryResultsForPolicyDefinitionPagingAll(subscriptionId, policyDefinitionName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForPolicyDefinitionPagingPage(subscriptionId, policyDefinitionName, options); + } + }; + } + listQueryResultsForPolicyDefinitionPagingPage(subscriptionId, policyDefinitionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForPolicyDefinitionPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForPolicyDefinition(subscriptionId, policyDefinitionName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForPolicyDefinitionNext(subscriptionId, policyDefinitionName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForPolicyDefinitionPagingAll(subscriptionId, policyDefinitionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForPolicyDefinitionPagingAll_1() { + var e_6, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForPolicyDefinitionPagingPage(subscriptionId, policyDefinitionName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_6) throw e_6.error; } + } + }); + } + /** + * Queries policy events for the subscription level policy assignment. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + listQueryResultsForSubscriptionLevelPolicyAssignment(subscriptionId, policyAssignmentName, options) { + const iter = this.listQueryResultsForSubscriptionLevelPolicyAssignmentPagingAll(subscriptionId, policyAssignmentName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForSubscriptionLevelPolicyAssignmentPagingPage(subscriptionId, policyAssignmentName, options); + } + }; + } + listQueryResultsForSubscriptionLevelPolicyAssignmentPagingPage(subscriptionId, policyAssignmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionLevelPolicyAssignmentPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForSubscriptionLevelPolicyAssignment(subscriptionId, policyAssignmentName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForSubscriptionLevelPolicyAssignmentNext(subscriptionId, policyAssignmentName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForSubscriptionLevelPolicyAssignmentPagingAll(subscriptionId, policyAssignmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionLevelPolicyAssignmentPagingAll_1() { + var e_7, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForSubscriptionLevelPolicyAssignmentPagingPage(subscriptionId, policyAssignmentName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_7) throw e_7.error; } + } + }); + } + /** + * Queries policy events for the resource group level policy assignment. + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + listQueryResultsForResourceGroupLevelPolicyAssignment(subscriptionId, resourceGroupName, policyAssignmentName, options) { + const iter = this.listQueryResultsForResourceGroupLevelPolicyAssignmentPagingAll(subscriptionId, resourceGroupName, policyAssignmentName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForResourceGroupLevelPolicyAssignmentPagingPage(subscriptionId, resourceGroupName, policyAssignmentName, options); + } + }; + } + listQueryResultsForResourceGroupLevelPolicyAssignmentPagingPage(subscriptionId, resourceGroupName, policyAssignmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupLevelPolicyAssignmentPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForResourceGroupLevelPolicyAssignment(subscriptionId, resourceGroupName, policyAssignmentName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForResourceGroupLevelPolicyAssignmentNext(subscriptionId, resourceGroupName, policyAssignmentName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForResourceGroupLevelPolicyAssignmentPagingAll(subscriptionId, resourceGroupName, policyAssignmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupLevelPolicyAssignmentPagingAll_1() { + var e_8, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForResourceGroupLevelPolicyAssignmentPagingPage(subscriptionId, resourceGroupName, policyAssignmentName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_8) throw e_8.error; } + } + }); + } + /** + * Queries policy events for the resources under the management group. + * @param managementGroupName Management group name. + * @param options The options parameters. + */ + _listQueryResultsForManagementGroup(managementGroupName, options) { + return this.client.sendOperationRequest({ managementGroupName, options }, listQueryResultsForManagementGroupOperationSpec$1); + } + /** + * Queries policy events for the resources under the subscription. + * @param subscriptionId Microsoft Azure subscription ID. + * @param options The options parameters. + */ + _listQueryResultsForSubscription(subscriptionId, options) { + return this.client.sendOperationRequest({ subscriptionId, options }, listQueryResultsForSubscriptionOperationSpec$1); + } + /** + * Queries policy events for the resources under the resource group. + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroup(subscriptionId, resourceGroupName, options) { + return this.client.sendOperationRequest({ subscriptionId, resourceGroupName, options }, listQueryResultsForResourceGroupOperationSpec$1); + } + /** + * Queries policy events for the resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + _listQueryResultsForResource(resourceId, options) { + return this.client.sendOperationRequest({ resourceId, options }, listQueryResultsForResourceOperationSpec$1); + } + /** + * Queries policy events for the subscription level policy set definition. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policySetDefinitionName Policy set definition name. + * @param options The options parameters. + */ + _listQueryResultsForPolicySetDefinition(subscriptionId, policySetDefinitionName, options) { + return this.client.sendOperationRequest({ subscriptionId, policySetDefinitionName, options }, listQueryResultsForPolicySetDefinitionOperationSpec); + } + /** + * Queries policy events for the subscription level policy definition. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyDefinitionName Policy definition name. + * @param options The options parameters. + */ + _listQueryResultsForPolicyDefinition(subscriptionId, policyDefinitionName, options) { + return this.client.sendOperationRequest({ subscriptionId, policyDefinitionName, options }, listQueryResultsForPolicyDefinitionOperationSpec); + } + /** + * Queries policy events for the subscription level policy assignment. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + _listQueryResultsForSubscriptionLevelPolicyAssignment(subscriptionId, policyAssignmentName, options) { + return this.client.sendOperationRequest({ subscriptionId, policyAssignmentName, options }, listQueryResultsForSubscriptionLevelPolicyAssignmentOperationSpec); + } + /** + * Queries policy events for the resource group level policy assignment. + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroupLevelPolicyAssignment(subscriptionId, resourceGroupName, policyAssignmentName, options) { + return this.client.sendOperationRequest({ subscriptionId, resourceGroupName, policyAssignmentName, options }, listQueryResultsForResourceGroupLevelPolicyAssignmentOperationSpec); + } + /** + * ListQueryResultsForManagementGroupNext + * @param managementGroupName Management group name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForManagementGroup method. + * @param options The options parameters. + */ + _listQueryResultsForManagementGroupNext(managementGroupName, nextLink, options) { + return this.client.sendOperationRequest({ managementGroupName, nextLink, options }, listQueryResultsForManagementGroupNextOperationSpec$1); + } + /** + * ListQueryResultsForSubscriptionNext + * @param subscriptionId Microsoft Azure subscription ID. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForSubscription method. + * @param options The options parameters. + */ + _listQueryResultsForSubscriptionNext(subscriptionId, nextLink, options) { + return this.client.sendOperationRequest({ subscriptionId, nextLink, options }, listQueryResultsForSubscriptionNextOperationSpec$1); + } + /** + * ListQueryResultsForResourceGroupNext + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForResourceGroup method. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroupNext(subscriptionId, resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ subscriptionId, resourceGroupName, nextLink, options }, listQueryResultsForResourceGroupNextOperationSpec$1); + } + /** + * ListQueryResultsForResourceNext + * @param resourceId Resource ID. + * @param nextLink The nextLink from the previous successful call to the ListQueryResultsForResource + * method. + * @param options The options parameters. + */ + _listQueryResultsForResourceNext(resourceId, nextLink, options) { + return this.client.sendOperationRequest({ resourceId, nextLink, options }, listQueryResultsForResourceNextOperationSpec$1); + } + /** + * ListQueryResultsForPolicySetDefinitionNext + * @param subscriptionId Microsoft Azure subscription ID. + * @param policySetDefinitionName Policy set definition name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForPolicySetDefinition method. + * @param options The options parameters. + */ + _listQueryResultsForPolicySetDefinitionNext(subscriptionId, policySetDefinitionName, nextLink, options) { + return this.client.sendOperationRequest({ subscriptionId, policySetDefinitionName, nextLink, options }, listQueryResultsForPolicySetDefinitionNextOperationSpec); + } + /** + * ListQueryResultsForPolicyDefinitionNext + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyDefinitionName Policy definition name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForPolicyDefinition method. + * @param options The options parameters. + */ + _listQueryResultsForPolicyDefinitionNext(subscriptionId, policyDefinitionName, nextLink, options) { + return this.client.sendOperationRequest({ subscriptionId, policyDefinitionName, nextLink, options }, listQueryResultsForPolicyDefinitionNextOperationSpec); + } + /** + * ListQueryResultsForSubscriptionLevelPolicyAssignmentNext + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyAssignmentName Policy assignment name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForSubscriptionLevelPolicyAssignment method. + * @param options The options parameters. + */ + _listQueryResultsForSubscriptionLevelPolicyAssignmentNext(subscriptionId, policyAssignmentName, nextLink, options) { + return this.client.sendOperationRequest({ subscriptionId, policyAssignmentName, nextLink, options }, listQueryResultsForSubscriptionLevelPolicyAssignmentNextOperationSpec); + } + /** + * ListQueryResultsForResourceGroupLevelPolicyAssignmentNext + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param policyAssignmentName Policy assignment name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForResourceGroupLevelPolicyAssignment method. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroupLevelPolicyAssignmentNext(subscriptionId, resourceGroupName, policyAssignmentName, nextLink, options) { + return this.client.sendOperationRequest({ + subscriptionId, + resourceGroupName, + policyAssignmentName, + nextLink, + options + }, listQueryResultsForResourceGroupLevelPolicyAssignmentNextOperationSpec); + } +} +// Operation Specifications +const serializer$2 = coreClient.createSerializer(Mappers, /* isXml */ false); +const listQueryResultsForManagementGroupOperationSpec$1 = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupName}/providers/Microsoft.PolicyInsights/policyEvents/{policyEventsResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupName, + policyEventsResource + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForSubscriptionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/{policyEventsResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + policyEventsResource, + subscriptionId1 + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyEvents/{policyEventsResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + resourceGroupName, + policyEventsResource, + subscriptionId1 + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForResourceOperationSpec$1 = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/policyEvents/{policyEventsResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken, + expand + ], + urlParameters: [ + $host, + resourceId, + policyEventsResource + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForPolicySetDefinitionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policySetDefinitions/{policySetDefinitionName}/providers/Microsoft.PolicyInsights/policyEvents/{policyEventsResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + policyEventsResource, + subscriptionId1, + authorizationNamespace, + policySetDefinitionName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForPolicyDefinitionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policyDefinitions/{policyDefinitionName}/providers/Microsoft.PolicyInsights/policyEvents/{policyEventsResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + policyEventsResource, + subscriptionId1, + authorizationNamespace, + policyDefinitionName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForSubscriptionLevelPolicyAssignmentOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policyAssignments/{policyAssignmentName}/providers/Microsoft.PolicyInsights/policyEvents/{policyEventsResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + policyEventsResource, + subscriptionId1, + authorizationNamespace, + policyAssignmentName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForResourceGroupLevelPolicyAssignmentOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{authorizationNamespace}/policyAssignments/{policyAssignmentName}/providers/Microsoft.PolicyInsights/policyEvents/{policyEventsResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + resourceGroupName, + policyEventsResource, + subscriptionId1, + authorizationNamespace, + policyAssignmentName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForManagementGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupName, + nextLink, + policyEventsResource + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForSubscriptionNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + nextLink, + policyEventsResource, + subscriptionId1 + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForResourceGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + resourceGroupName, + nextLink, + policyEventsResource, + subscriptionId1 + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForResourceNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken, + expand + ], + urlParameters: [ + $host, + resourceId, + nextLink, + policyEventsResource + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForPolicySetDefinitionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + nextLink, + policyEventsResource, + subscriptionId1, + authorizationNamespace, + policySetDefinitionName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForPolicyDefinitionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + nextLink, + policyEventsResource, + subscriptionId1, + authorizationNamespace, + policyDefinitionName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForSubscriptionLevelPolicyAssignmentNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + nextLink, + policyEventsResource, + subscriptionId1, + authorizationNamespace, + policyAssignmentName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listQueryResultsForResourceGroupLevelPolicyAssignmentNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyEventsQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + resourceGroupName, + nextLink, + policyEventsResource, + subscriptionId1, + authorizationNamespace, + policyAssignmentName + ], + headerParameters: [accept], + serializer: serializer$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 LroImpl { + constructor(sendOperationFn, args, spec, requestPath = spec.path, requestMethod = spec.httpMethod) { + this.sendOperationFn = sendOperationFn; + this.args = args; + this.spec = spec; + this.requestPath = requestPath; + this.requestMethod = requestMethod; + } + sendInitialRequest() { + return tslib.__awaiter(this, void 0, void 0, function* () { + return this.sendOperationFn(this.args, this.spec); + }); + } + sendPollRequest(path) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const _a = this.spec, restSpec = tslib.__rest(_a, ["requestBody"]); + return this.sendOperationFn(this.args, Object.assign(Object.assign({}, restSpec), { path, httpMethod: "GET" })); + }); + } +} + +/* + * 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 containing PolicyStates operations. */ +class PolicyStatesImpl { + /** + * Initialize a new instance of the class PolicyStates class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Queries policy states for the resources under the management group. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param managementGroupName Management group name. + * @param options The options parameters. + */ + listQueryResultsForManagementGroup(policyStatesResource, managementGroupName, options) { + const iter = this.listQueryResultsForManagementGroupPagingAll(policyStatesResource, managementGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForManagementGroupPagingPage(policyStatesResource, managementGroupName, options); + } + }; + } + listQueryResultsForManagementGroupPagingPage(policyStatesResource, managementGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForManagementGroupPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForManagementGroup(policyStatesResource, managementGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForManagementGroupNext(policyStatesResource, managementGroupName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForManagementGroupPagingAll(policyStatesResource, managementGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForManagementGroupPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForManagementGroupPagingPage(policyStatesResource, managementGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Queries policy states for the resources under the subscription. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param options The options parameters. + */ + listQueryResultsForSubscription(policyStatesResource, subscriptionId, options) { + const iter = this.listQueryResultsForSubscriptionPagingAll(policyStatesResource, subscriptionId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForSubscriptionPagingPage(policyStatesResource, subscriptionId, options); + } + }; + } + listQueryResultsForSubscriptionPagingPage(policyStatesResource, subscriptionId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForSubscription(policyStatesResource, subscriptionId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForSubscriptionNext(policyStatesResource, subscriptionId, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForSubscriptionPagingAll(policyStatesResource, subscriptionId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForSubscriptionPagingPage(policyStatesResource, subscriptionId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Queries policy states for the resources under the resource group. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + listQueryResultsForResourceGroup(policyStatesResource, subscriptionId, resourceGroupName, options) { + const iter = this.listQueryResultsForResourceGroupPagingAll(policyStatesResource, subscriptionId, resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForResourceGroupPagingPage(policyStatesResource, subscriptionId, resourceGroupName, options); + } + }; + } + listQueryResultsForResourceGroupPagingPage(policyStatesResource, subscriptionId, resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForResourceGroup(policyStatesResource, subscriptionId, resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForResourceGroupNext(policyStatesResource, subscriptionId, resourceGroupName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForResourceGroupPagingAll(policyStatesResource, subscriptionId, resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupPagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForResourceGroupPagingPage(policyStatesResource, subscriptionId, resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Queries policy states for the resource. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param resourceId Resource ID. + * @param options The options parameters. + */ + listQueryResultsForResource(policyStatesResource, resourceId, options) { + const iter = this.listQueryResultsForResourcePagingAll(policyStatesResource, resourceId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForResourcePagingPage(policyStatesResource, resourceId, options); + } + }; + } + listQueryResultsForResourcePagingPage(policyStatesResource, resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourcePagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForResource(policyStatesResource, resourceId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForResourceNext(policyStatesResource, resourceId, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForResourcePagingAll(policyStatesResource, resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourcePagingAll_1() { + var e_4, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForResourcePagingPage(policyStatesResource, resourceId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * Queries policy states for the subscription level policy set definition. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policySetDefinitionName Policy set definition name. + * @param options The options parameters. + */ + listQueryResultsForPolicySetDefinition(policyStatesResource, subscriptionId, policySetDefinitionName, options) { + const iter = this.listQueryResultsForPolicySetDefinitionPagingAll(policyStatesResource, subscriptionId, policySetDefinitionName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForPolicySetDefinitionPagingPage(policyStatesResource, subscriptionId, policySetDefinitionName, options); + } + }; + } + listQueryResultsForPolicySetDefinitionPagingPage(policyStatesResource, subscriptionId, policySetDefinitionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForPolicySetDefinitionPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForPolicySetDefinition(policyStatesResource, subscriptionId, policySetDefinitionName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForPolicySetDefinitionNext(policyStatesResource, subscriptionId, policySetDefinitionName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForPolicySetDefinitionPagingAll(policyStatesResource, subscriptionId, policySetDefinitionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForPolicySetDefinitionPagingAll_1() { + var e_5, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForPolicySetDefinitionPagingPage(policyStatesResource, subscriptionId, policySetDefinitionName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_5) throw e_5.error; } + } + }); + } + /** + * Queries policy states for the subscription level policy definition. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyDefinitionName Policy definition name. + * @param options The options parameters. + */ + listQueryResultsForPolicyDefinition(policyStatesResource, subscriptionId, policyDefinitionName, options) { + const iter = this.listQueryResultsForPolicyDefinitionPagingAll(policyStatesResource, subscriptionId, policyDefinitionName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForPolicyDefinitionPagingPage(policyStatesResource, subscriptionId, policyDefinitionName, options); + } + }; + } + listQueryResultsForPolicyDefinitionPagingPage(policyStatesResource, subscriptionId, policyDefinitionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForPolicyDefinitionPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForPolicyDefinition(policyStatesResource, subscriptionId, policyDefinitionName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForPolicyDefinitionNext(policyStatesResource, subscriptionId, policyDefinitionName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForPolicyDefinitionPagingAll(policyStatesResource, subscriptionId, policyDefinitionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForPolicyDefinitionPagingAll_1() { + var e_6, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForPolicyDefinitionPagingPage(policyStatesResource, subscriptionId, policyDefinitionName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_6) throw e_6.error; } + } + }); + } + /** + * Queries policy states for the subscription level policy assignment. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + listQueryResultsForSubscriptionLevelPolicyAssignment(policyStatesResource, subscriptionId, policyAssignmentName, options) { + const iter = this.listQueryResultsForSubscriptionLevelPolicyAssignmentPagingAll(policyStatesResource, subscriptionId, policyAssignmentName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForSubscriptionLevelPolicyAssignmentPagingPage(policyStatesResource, subscriptionId, policyAssignmentName, options); + } + }; + } + listQueryResultsForSubscriptionLevelPolicyAssignmentPagingPage(policyStatesResource, subscriptionId, policyAssignmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionLevelPolicyAssignmentPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForSubscriptionLevelPolicyAssignment(policyStatesResource, subscriptionId, policyAssignmentName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForSubscriptionLevelPolicyAssignmentNext(policyStatesResource, subscriptionId, policyAssignmentName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForSubscriptionLevelPolicyAssignmentPagingAll(policyStatesResource, subscriptionId, policyAssignmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForSubscriptionLevelPolicyAssignmentPagingAll_1() { + var e_7, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForSubscriptionLevelPolicyAssignmentPagingPage(policyStatesResource, subscriptionId, policyAssignmentName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_7) throw e_7.error; } + } + }); + } + /** + * Queries policy states for the resource group level policy assignment. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + listQueryResultsForResourceGroupLevelPolicyAssignment(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, options) { + const iter = this.listQueryResultsForResourceGroupLevelPolicyAssignmentPagingAll(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listQueryResultsForResourceGroupLevelPolicyAssignmentPagingPage(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, options); + } + }; + } + listQueryResultsForResourceGroupLevelPolicyAssignmentPagingPage(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupLevelPolicyAssignmentPagingPage_1() { + let result = yield tslib.__await(this._listQueryResultsForResourceGroupLevelPolicyAssignment(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.odataNextLink; + while (continuationToken) { + result = yield tslib.__await(this._listQueryResultsForResourceGroupLevelPolicyAssignmentNext(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, continuationToken, options)); + continuationToken = result.odataNextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listQueryResultsForResourceGroupLevelPolicyAssignmentPagingAll(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listQueryResultsForResourceGroupLevelPolicyAssignmentPagingAll_1() { + var e_8, _a; + try { + for (var _b = tslib.__asyncValues(this.listQueryResultsForResourceGroupLevelPolicyAssignmentPagingPage(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_8) throw e_8.error; } + } + }); + } + /** + * Queries policy states for the resources under the management group. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param managementGroupName Management group name. + * @param options The options parameters. + */ + _listQueryResultsForManagementGroup(policyStatesResource, managementGroupName, options) { + return this.client.sendOperationRequest({ policyStatesResource, managementGroupName, options }, listQueryResultsForManagementGroupOperationSpec$2); + } + /** + * Summarizes policy states for the resources under the management group. + * @param managementGroupName Management group name. + * @param options The options parameters. + */ + summarizeForManagementGroup(managementGroupName, options) { + return this.client.sendOperationRequest({ managementGroupName, options }, summarizeForManagementGroupOperationSpec); + } + /** + * Queries policy states for the resources under the subscription. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param options The options parameters. + */ + _listQueryResultsForSubscription(policyStatesResource, subscriptionId, options) { + return this.client.sendOperationRequest({ policyStatesResource, subscriptionId, options }, listQueryResultsForSubscriptionOperationSpec$2); + } + /** + * Summarizes policy states for the resources under the subscription. + * @param subscriptionId Microsoft Azure subscription ID. + * @param options The options parameters. + */ + summarizeForSubscription(subscriptionId, options) { + return this.client.sendOperationRequest({ subscriptionId, options }, summarizeForSubscriptionOperationSpec); + } + /** + * Queries policy states for the resources under the resource group. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroup(policyStatesResource, subscriptionId, resourceGroupName, options) { + return this.client.sendOperationRequest({ policyStatesResource, subscriptionId, resourceGroupName, options }, listQueryResultsForResourceGroupOperationSpec$2); + } + /** + * Summarizes policy states for the resources under the resource group. + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + summarizeForResourceGroup(subscriptionId, resourceGroupName, options) { + return this.client.sendOperationRequest({ subscriptionId, resourceGroupName, options }, summarizeForResourceGroupOperationSpec); + } + /** + * Queries policy states for the resource. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param resourceId Resource ID. + * @param options The options parameters. + */ + _listQueryResultsForResource(policyStatesResource, resourceId, options) { + return this.client.sendOperationRequest({ policyStatesResource, resourceId, options }, listQueryResultsForResourceOperationSpec$2); + } + /** + * Summarizes policy states for the resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + summarizeForResource(resourceId, options) { + return this.client.sendOperationRequest({ resourceId, options }, summarizeForResourceOperationSpec); + } + /** + * Triggers a policy evaluation scan for all the resources under the subscription + * @param subscriptionId Microsoft Azure subscription ID. + * @param options The options parameters. + */ + beginTriggerSubscriptionEvaluation(subscriptionId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON() + } + }; + }); + const lro = new LroImpl(sendOperation, { subscriptionId, options }, triggerSubscriptionEvaluationOperationSpec); + return new coreLro.LroEngine(lro, { + resumeFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + lroResourceLocationConfig: "location" + }); + }); + } + /** + * Triggers a policy evaluation scan for all the resources under the subscription + * @param subscriptionId Microsoft Azure subscription ID. + * @param options The options parameters. + */ + beginTriggerSubscriptionEvaluationAndWait(subscriptionId, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginTriggerSubscriptionEvaluation(subscriptionId, options); + return poller.pollUntilDone(); + }); + } + /** + * Triggers a policy evaluation scan for all the resources under the resource group. + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + beginTriggerResourceGroupEvaluation(subscriptionId, resourceGroupName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON() + } + }; + }); + const lro = new LroImpl(sendOperation, { subscriptionId, resourceGroupName, options }, triggerResourceGroupEvaluationOperationSpec); + return new coreLro.LroEngine(lro, { + resumeFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + lroResourceLocationConfig: "location" + }); + }); + } + /** + * Triggers a policy evaluation scan for all the resources under the resource group. + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param options The options parameters. + */ + beginTriggerResourceGroupEvaluationAndWait(subscriptionId, resourceGroupName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginTriggerResourceGroupEvaluation(subscriptionId, resourceGroupName, options); + return poller.pollUntilDone(); + }); + } + /** + * Queries policy states for the subscription level policy set definition. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policySetDefinitionName Policy set definition name. + * @param options The options parameters. + */ + _listQueryResultsForPolicySetDefinition(policyStatesResource, subscriptionId, policySetDefinitionName, options) { + return this.client.sendOperationRequest({ + policyStatesResource, + subscriptionId, + policySetDefinitionName, + options + }, listQueryResultsForPolicySetDefinitionOperationSpec$1); + } + /** + * Summarizes policy states for the subscription level policy set definition. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policySetDefinitionName Policy set definition name. + * @param options The options parameters. + */ + summarizeForPolicySetDefinition(subscriptionId, policySetDefinitionName, options) { + return this.client.sendOperationRequest({ subscriptionId, policySetDefinitionName, options }, summarizeForPolicySetDefinitionOperationSpec); + } + /** + * Queries policy states for the subscription level policy definition. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyDefinitionName Policy definition name. + * @param options The options parameters. + */ + _listQueryResultsForPolicyDefinition(policyStatesResource, subscriptionId, policyDefinitionName, options) { + return this.client.sendOperationRequest({ policyStatesResource, subscriptionId, policyDefinitionName, options }, listQueryResultsForPolicyDefinitionOperationSpec$1); + } + /** + * Summarizes policy states for the subscription level policy definition. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyDefinitionName Policy definition name. + * @param options The options parameters. + */ + summarizeForPolicyDefinition(subscriptionId, policyDefinitionName, options) { + return this.client.sendOperationRequest({ subscriptionId, policyDefinitionName, options }, summarizeForPolicyDefinitionOperationSpec); + } + /** + * Queries policy states for the subscription level policy assignment. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + _listQueryResultsForSubscriptionLevelPolicyAssignment(policyStatesResource, subscriptionId, policyAssignmentName, options) { + return this.client.sendOperationRequest({ policyStatesResource, subscriptionId, policyAssignmentName, options }, listQueryResultsForSubscriptionLevelPolicyAssignmentOperationSpec$1); + } + /** + * Summarizes policy states for the subscription level policy assignment. + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + summarizeForSubscriptionLevelPolicyAssignment(subscriptionId, policyAssignmentName, options) { + return this.client.sendOperationRequest({ subscriptionId, policyAssignmentName, options }, summarizeForSubscriptionLevelPolicyAssignmentOperationSpec); + } + /** + * Queries policy states for the resource group level policy assignment. + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroupLevelPolicyAssignment(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, options) { + return this.client.sendOperationRequest({ + policyStatesResource, + subscriptionId, + resourceGroupName, + policyAssignmentName, + options + }, listQueryResultsForResourceGroupLevelPolicyAssignmentOperationSpec$1); + } + /** + * Summarizes policy states for the resource group level policy assignment. + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param policyAssignmentName Policy assignment name. + * @param options The options parameters. + */ + summarizeForResourceGroupLevelPolicyAssignment(subscriptionId, resourceGroupName, policyAssignmentName, options) { + return this.client.sendOperationRequest({ subscriptionId, resourceGroupName, policyAssignmentName, options }, summarizeForResourceGroupLevelPolicyAssignmentOperationSpec); + } + /** + * ListQueryResultsForManagementGroupNext + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param managementGroupName Management group name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForManagementGroup method. + * @param options The options parameters. + */ + _listQueryResultsForManagementGroupNext(policyStatesResource, managementGroupName, nextLink, options) { + return this.client.sendOperationRequest({ policyStatesResource, managementGroupName, nextLink, options }, listQueryResultsForManagementGroupNextOperationSpec$2); + } + /** + * ListQueryResultsForSubscriptionNext + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForSubscription method. + * @param options The options parameters. + */ + _listQueryResultsForSubscriptionNext(policyStatesResource, subscriptionId, nextLink, options) { + return this.client.sendOperationRequest({ policyStatesResource, subscriptionId, nextLink, options }, listQueryResultsForSubscriptionNextOperationSpec$2); + } + /** + * ListQueryResultsForResourceGroupNext + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForResourceGroup method. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroupNext(policyStatesResource, subscriptionId, resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ + policyStatesResource, + subscriptionId, + resourceGroupName, + nextLink, + options + }, listQueryResultsForResourceGroupNextOperationSpec$2); + } + /** + * ListQueryResultsForResourceNext + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param resourceId Resource ID. + * @param nextLink The nextLink from the previous successful call to the ListQueryResultsForResource + * method. + * @param options The options parameters. + */ + _listQueryResultsForResourceNext(policyStatesResource, resourceId, nextLink, options) { + return this.client.sendOperationRequest({ policyStatesResource, resourceId, nextLink, options }, listQueryResultsForResourceNextOperationSpec$2); + } + /** + * ListQueryResultsForPolicySetDefinitionNext + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policySetDefinitionName Policy set definition name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForPolicySetDefinition method. + * @param options The options parameters. + */ + _listQueryResultsForPolicySetDefinitionNext(policyStatesResource, subscriptionId, policySetDefinitionName, nextLink, options) { + return this.client.sendOperationRequest({ + policyStatesResource, + subscriptionId, + policySetDefinitionName, + nextLink, + options + }, listQueryResultsForPolicySetDefinitionNextOperationSpec$1); + } + /** + * ListQueryResultsForPolicyDefinitionNext + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyDefinitionName Policy definition name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForPolicyDefinition method. + * @param options The options parameters. + */ + _listQueryResultsForPolicyDefinitionNext(policyStatesResource, subscriptionId, policyDefinitionName, nextLink, options) { + return this.client.sendOperationRequest({ + policyStatesResource, + subscriptionId, + policyDefinitionName, + nextLink, + options + }, listQueryResultsForPolicyDefinitionNextOperationSpec$1); + } + /** + * ListQueryResultsForSubscriptionLevelPolicyAssignmentNext + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param policyAssignmentName Policy assignment name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForSubscriptionLevelPolicyAssignment method. + * @param options The options parameters. + */ + _listQueryResultsForSubscriptionLevelPolicyAssignmentNext(policyStatesResource, subscriptionId, policyAssignmentName, nextLink, options) { + return this.client.sendOperationRequest({ + policyStatesResource, + subscriptionId, + policyAssignmentName, + nextLink, + options + }, listQueryResultsForSubscriptionLevelPolicyAssignmentNextOperationSpec$1); + } + /** + * ListQueryResultsForResourceGroupLevelPolicyAssignmentNext + * @param policyStatesResource The virtual resource under PolicyStates resource type. In a given time + * range, 'latest' represents the latest policy state(s), whereas 'default' represents all policy + * state(s). + * @param subscriptionId Microsoft Azure subscription ID. + * @param resourceGroupName Resource group name. + * @param policyAssignmentName Policy assignment name. + * @param nextLink The nextLink from the previous successful call to the + * ListQueryResultsForResourceGroupLevelPolicyAssignment method. + * @param options The options parameters. + */ + _listQueryResultsForResourceGroupLevelPolicyAssignmentNext(policyStatesResource, subscriptionId, resourceGroupName, policyAssignmentName, nextLink, options) { + return this.client.sendOperationRequest({ + policyStatesResource, + subscriptionId, + resourceGroupName, + policyAssignmentName, + nextLink, + options + }, listQueryResultsForResourceGroupLevelPolicyAssignmentNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$3 = coreClient.createSerializer(Mappers, /* isXml */ false); +const listQueryResultsForManagementGroupOperationSpec$2 = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const summarizeForManagementGroupOperationSpec = { + path: "/providers/{managementGroupsNamespace}/managementGroups/{managementGroupName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesSummaryResource}/summarize", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SummarizeResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + fromParam, + to + ], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupName, + policyStatesSummaryResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForSubscriptionOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + subscriptionId1, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const summarizeForSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesSummaryResource}/summarize", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SummarizeResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + fromParam, + to + ], + urlParameters: [ + $host, + subscriptionId1, + policyStatesSummaryResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForResourceGroupOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId1, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const summarizeForResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesSummaryResource}/summarize", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SummarizeResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + fromParam, + to + ], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId1, + policyStatesSummaryResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForResourceOperationSpec$2 = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken, + expand + ], + urlParameters: [ + $host, + resourceId, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const summarizeForResourceOperationSpec = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesSummaryResource}/summarize", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SummarizeResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + fromParam, + to + ], + urlParameters: [ + $host, + resourceId, + policyStatesSummaryResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const triggerSubscriptionEvaluationOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [apiVersion2], + urlParameters: [$host, subscriptionId1], + headerParameters: [accept], + serializer: serializer$3 +}; +const triggerResourceGroupEvaluationOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId1 + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForPolicySetDefinitionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policySetDefinitions/{policySetDefinitionName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + subscriptionId1, + authorizationNamespace, + policySetDefinitionName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const summarizeForPolicySetDefinitionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policySetDefinitions/{policySetDefinitionName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesSummaryResource}/summarize", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SummarizeResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + fromParam, + to + ], + urlParameters: [ + $host, + subscriptionId1, + authorizationNamespace, + policySetDefinitionName, + policyStatesSummaryResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForPolicyDefinitionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policyDefinitions/{policyDefinitionName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + subscriptionId1, + authorizationNamespace, + policyDefinitionName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const summarizeForPolicyDefinitionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policyDefinitions/{policyDefinitionName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesSummaryResource}/summarize", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SummarizeResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + fromParam, + to + ], + urlParameters: [ + $host, + subscriptionId1, + authorizationNamespace, + policyDefinitionName, + policyStatesSummaryResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForSubscriptionLevelPolicyAssignmentOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policyAssignments/{policyAssignmentName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + subscriptionId1, + authorizationNamespace, + policyAssignmentName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const summarizeForSubscriptionLevelPolicyAssignmentOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/{authorizationNamespace}/policyAssignments/{policyAssignmentName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesSummaryResource}/summarize", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SummarizeResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + fromParam, + to + ], + urlParameters: [ + $host, + subscriptionId1, + authorizationNamespace, + policyAssignmentName, + policyStatesSummaryResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForResourceGroupLevelPolicyAssignmentOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{authorizationNamespace}/policyAssignments/{policyAssignmentName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesResource}/queryResults", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId1, + authorizationNamespace, + policyAssignmentName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const summarizeForResourceGroupLevelPolicyAssignmentOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{authorizationNamespace}/policyAssignments/{policyAssignmentName}/providers/Microsoft.PolicyInsights/policyStates/{policyStatesSummaryResource}/summarize", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: SummarizeResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + fromParam, + to + ], + urlParameters: [ + $host, + resourceGroupName, + subscriptionId1, + authorizationNamespace, + policyAssignmentName, + policyStatesSummaryResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForManagementGroupNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + managementGroupsNamespace, + managementGroupName, + nextLink, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForSubscriptionNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + nextLink, + subscriptionId1, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForResourceGroupNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + resourceGroupName, + nextLink, + subscriptionId1, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForResourceNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken, + expand + ], + urlParameters: [ + $host, + resourceId, + nextLink, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForPolicySetDefinitionNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + nextLink, + subscriptionId1, + authorizationNamespace, + policySetDefinitionName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForPolicyDefinitionNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + nextLink, + subscriptionId1, + authorizationNamespace, + policyDefinitionName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForSubscriptionLevelPolicyAssignmentNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + nextLink, + subscriptionId1, + authorizationNamespace, + policyAssignmentName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const listQueryResultsForResourceGroupLevelPolicyAssignmentNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyStatesQueryResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [ + top, + filter, + apiVersion2, + orderBy, + select, + fromParam, + to, + apply, + skipToken + ], + urlParameters: [ + $host, + resourceGroupName, + nextLink, + subscriptionId1, + authorizationNamespace, + policyAssignmentName, + policyStatesResource + ], + headerParameters: [accept], + serializer: serializer$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 containing Operations operations. */ +class OperationsImpl { + /** + * Initialize a new instance of the class Operations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists available operations. + * @param options The options parameters. + */ + list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec); + } +} +// Operation Specifications +const serializer$4 = coreClient.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec = { + path: "/providers/Microsoft.PolicyInsights/operations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OperationsListResults + }, + default: { + bodyMapper: QueryFailure + } + }, + queryParameters: [apiVersion2], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$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 containing PolicyMetadataOperations operations. */ +class PolicyMetadataOperationsImpl { + /** + * Initialize a new instance of the class PolicyMetadataOperations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Get a list of the policy metadata resources. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get policy metadata resource. + * @param resourceName The name of the policy metadata resource. + * @param options The options parameters. + */ + getResource(resourceName, options) { + return this.client.sendOperationRequest({ resourceName, options }, getResourceOperationSpec); + } + /** + * Get a list of the policy metadata resources. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$1); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec); + } +} +// Operation Specifications +const serializer$5 = coreClient.createSerializer(Mappers, /* isXml */ false); +const getResourceOperationSpec = { + path: "/providers/Microsoft.PolicyInsights/policyMetadata/{resourceName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyMetadata + }, + default: { + bodyMapper: ErrorResponseAutoGenerated + } + }, + queryParameters: [apiVersion2], + urlParameters: [$host, resourceName], + headerParameters: [accept], + serializer: serializer$5 +}; +const listOperationSpec$1 = { + path: "/providers/Microsoft.PolicyInsights/policyMetadata", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyMetadataCollection + }, + default: { + bodyMapper: ErrorResponseAutoGenerated + } + }, + queryParameters: [top, apiVersion2], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$5 +}; +const listNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PolicyMetadataCollection + }, + default: { + bodyMapper: ErrorResponseAutoGenerated + } + }, + queryParameters: [top, apiVersion2], + urlParameters: [$host, nextLink], + headerParameters: [accept], + serializer: serializer$5 +}; + +/* + * 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 containing PolicyRestrictions operations. */ +class PolicyRestrictionsImpl { + /** + * Initialize a new instance of the class PolicyRestrictions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Checks what restrictions Azure Policy will place on a resource within a subscription. + * @param parameters The check policy restrictions parameters. + * @param options The options parameters. + */ + checkAtSubscriptionScope(parameters, options) { + return this.client.sendOperationRequest({ parameters, options }, checkAtSubscriptionScopeOperationSpec); + } + /** + * Checks what restrictions Azure Policy will place on a resource within a resource group. Use this + * when the resource group the resource will be created in is already known. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param parameters The check policy restrictions parameters. + * @param options The options parameters. + */ + checkAtResourceGroupScope(resourceGroupName, parameters, options) { + return this.client.sendOperationRequest({ resourceGroupName, parameters, options }, checkAtResourceGroupScopeOperationSpec); + } +} +// Operation Specifications +const serializer$6 = coreClient.createSerializer(Mappers, /* isXml */ false); +const checkAtSubscriptionScopeOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/checkPolicyRestrictions", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: CheckRestrictionsResult + }, + default: { + bodyMapper: ErrorResponseAutoGenerated + } + }, + requestBody: parameters1, + queryParameters: [apiVersion3], + urlParameters: [$host, subscriptionId], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$6 +}; +const checkAtResourceGroupScopeOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/checkPolicyRestrictions", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: CheckRestrictionsResult + }, + default: { + bodyMapper: ErrorResponseAutoGenerated + } + }, + requestBody: parameters1, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName1 + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$6 +}; + +/* + * 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 containing Attestations operations. */ +class AttestationsImpl { + /** + * Initialize a new instance of the class Attestations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets all attestations for the subscription. + * @param options The options parameters. + */ + listForSubscription(options) { + const iter = this.listForSubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listForSubscriptionPagingPage(options); + } + }; + } + listForSubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listForSubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listForSubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listForSubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listForSubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listForSubscriptionPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listForSubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets all attestations for the resource group. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param options The options parameters. + */ + listForResourceGroup(resourceGroupName, options) { + const iter = this.listForResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listForResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listForResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listForResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listForResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listForResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourceGroupPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets all attestations for a resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + listForResource(resourceId, options) { + const iter = this.listForResourcePagingAll(resourceId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listForResourcePagingPage(resourceId, options); + } + }; + } + listForResourcePagingPage(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingPage_1() { + let result = yield tslib.__await(this._listForResource(resourceId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listForResourceNext(resourceId, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listForResourcePagingAll(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listForResourcePagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listForResourcePagingPage(resourceId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Gets all attestations for the subscription. + * @param options The options parameters. + */ + _listForSubscription(options) { + return this.client.sendOperationRequest({ options }, listForSubscriptionOperationSpec$1); + } + /** + * Creates or updates an attestation at subscription scope. + * @param attestationName The name of the attestation. + * @param parameters The attestation parameters. + * @param options The options parameters. + */ + beginCreateOrUpdateAtSubscription(attestationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON() + } + }; + }); + const lro = new LroImpl(sendOperation, { attestationName, parameters, options }, createOrUpdateAtSubscriptionOperationSpec$1); + return new coreLro.LroEngine(lro, { + resumeFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs + }); + }); + } + /** + * Creates or updates an attestation at subscription scope. + * @param attestationName The name of the attestation. + * @param parameters The attestation parameters. + * @param options The options parameters. + */ + beginCreateOrUpdateAtSubscriptionAndWait(attestationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdateAtSubscription(attestationName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets an existing attestation at subscription scope. + * @param attestationName The name of the attestation. + * @param options The options parameters. + */ + getAtSubscription(attestationName, options) { + return this.client.sendOperationRequest({ attestationName, options }, getAtSubscriptionOperationSpec$1); + } + /** + * Deletes an existing attestation at subscription scope. + * @param attestationName The name of the attestation. + * @param options The options parameters. + */ + deleteAtSubscription(attestationName, options) { + return this.client.sendOperationRequest({ attestationName, options }, deleteAtSubscriptionOperationSpec$1); + } + /** + * Gets all attestations for the resource group. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param options The options parameters. + */ + _listForResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listForResourceGroupOperationSpec$1); + } + /** + * Creates or updates an attestation at resource group scope. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param attestationName The name of the attestation. + * @param parameters The attestation parameters. + * @param options The options parameters. + */ + beginCreateOrUpdateAtResourceGroup(resourceGroupName, attestationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON() + } + }; + }); + const lro = new LroImpl(sendOperation, { resourceGroupName, attestationName, parameters, options }, createOrUpdateAtResourceGroupOperationSpec$1); + return new coreLro.LroEngine(lro, { + resumeFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs + }); + }); + } + /** + * Creates or updates an attestation at resource group scope. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param attestationName The name of the attestation. + * @param parameters The attestation parameters. + * @param options The options parameters. + */ + beginCreateOrUpdateAtResourceGroupAndWait(resourceGroupName, attestationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdateAtResourceGroup(resourceGroupName, attestationName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets an existing attestation at resource group scope. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param attestationName The name of the attestation. + * @param options The options parameters. + */ + getAtResourceGroup(resourceGroupName, attestationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, attestationName, options }, getAtResourceGroupOperationSpec$1); + } + /** + * Deletes an existing attestation at resource group scope. + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param attestationName The name of the attestation. + * @param options The options parameters. + */ + deleteAtResourceGroup(resourceGroupName, attestationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, attestationName, options }, deleteAtResourceGroupOperationSpec$1); + } + /** + * Gets all attestations for a resource. + * @param resourceId Resource ID. + * @param options The options parameters. + */ + _listForResource(resourceId, options) { + return this.client.sendOperationRequest({ resourceId, options }, listForResourceOperationSpec$1); + } + /** + * Creates or updates an attestation at resource scope. + * @param resourceId Resource ID. + * @param attestationName The name of the attestation. + * @param parameters The attestation parameters. + * @param options The options parameters. + */ + beginCreateOrUpdateAtResource(resourceId, attestationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON() + } + }; + }); + const lro = new LroImpl(sendOperation, { resourceId, attestationName, parameters, options }, createOrUpdateAtResourceOperationSpec$1); + return new coreLro.LroEngine(lro, { + resumeFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs + }); + }); + } + /** + * Creates or updates an attestation at resource scope. + * @param resourceId Resource ID. + * @param attestationName The name of the attestation. + * @param parameters The attestation parameters. + * @param options The options parameters. + */ + beginCreateOrUpdateAtResourceAndWait(resourceId, attestationName, parameters, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginCreateOrUpdateAtResource(resourceId, attestationName, parameters, options); + return poller.pollUntilDone(); + }); + } + /** + * Gets an existing attestation at resource scope. + * @param resourceId Resource ID. + * @param attestationName The name of the attestation. + * @param options The options parameters. + */ + getAtResource(resourceId, attestationName, options) { + return this.client.sendOperationRequest({ resourceId, attestationName, options }, getAtResourceOperationSpec$1); + } + /** + * Deletes an existing attestation at individual resource scope. + * @param resourceId Resource ID. + * @param attestationName The name of the attestation. + * @param options The options parameters. + */ + deleteAtResource(resourceId, attestationName, options) { + return this.client.sendOperationRequest({ resourceId, attestationName, options }, deleteAtResourceOperationSpec$1); + } + /** + * ListForSubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListForSubscription method. + * @param options The options parameters. + */ + _listForSubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listForSubscriptionNextOperationSpec$1); + } + /** + * ListForResourceGroupNext + * @param resourceGroupName The name of the resource group. The name is case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. + * @param options The options parameters. + */ + _listForResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listForResourceGroupNextOperationSpec$1); + } + /** + * ListForResourceNext + * @param resourceId Resource ID. + * @param nextLink The nextLink from the previous successful call to the ListForResource method. + * @param options The options parameters. + */ + _listForResourceNext(resourceId, nextLink, options) { + return this.client.sendOperationRequest({ resourceId, nextLink, options }, listForResourceNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$7 = coreClient.createSerializer(Mappers, /* isXml */ false); +const listForSubscriptionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/attestations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AttestationListResult + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [top, filter, apiVersion4], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$7 +}; +const createOrUpdateAtSubscriptionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Attestation + }, + 201: { + bodyMapper: Attestation + }, + 202: { + bodyMapper: Attestation + }, + 204: { + bodyMapper: Attestation + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + requestBody: parameters2, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + attestationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$7 +}; +const getAtSubscriptionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Attestation + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + attestationName + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const deleteAtSubscriptionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + attestationName + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const listForResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/attestations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AttestationListResult + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [top, filter, apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName1 + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const createOrUpdateAtResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Attestation + }, + 201: { + bodyMapper: Attestation + }, + 202: { + bodyMapper: Attestation + }, + 204: { + bodyMapper: Attestation + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + requestBody: parameters2, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName1, + attestationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$7 +}; +const getAtResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Attestation + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName1, + attestationName + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const deleteAtResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName1, + attestationName + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const listForResourceOperationSpec$1 = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/attestations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AttestationListResult + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [top, filter, apiVersion4], + urlParameters: [$host, resourceId], + headerParameters: [accept], + serializer: serializer$7 +}; +const createOrUpdateAtResourceOperationSpec$1 = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Attestation + }, + 201: { + bodyMapper: Attestation + }, + 202: { + bodyMapper: Attestation + }, + 204: { + bodyMapper: Attestation + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + requestBody: parameters2, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + resourceId, + attestationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$7 +}; +const getAtResourceOperationSpec$1 = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Attestation + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + resourceId, + attestationName + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const deleteAtResourceOperationSpec$1 = { + path: "/{resourceId}/providers/Microsoft.PolicyInsights/attestations/{attestationName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + resourceId, + attestationName + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const listForSubscriptionNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AttestationListResult + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [top, filter, apiVersion4], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const listForResourceGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AttestationListResult + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [top, filter, apiVersion4], + urlParameters: [ + $host, + subscriptionId, + nextLink, + resourceGroupName1 + ], + headerParameters: [accept], + serializer: serializer$7 +}; +const listForResourceNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AttestationListResult + }, + default: { + bodyMapper: ErrorResponseAutoGenerated2 + } + }, + queryParameters: [top, filter, apiVersion4], + urlParameters: [$host, resourceId, nextLink], + headerParameters: [accept], + serializer: serializer$7 +}; + +/* + * 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 PolicyInsightsClient extends coreClient.ServiceClient { + /** + * Initializes a new instance of the PolicyInsightsClient class. + * @param credentials Subscription credentials which uniquely identify client subscription. + * @param subscriptionId Microsoft Azure subscription ID. + * @param options The parameter options + */ + constructor(credentials, subscriptionId, options) { + if (credentials === undefined) { + throw new Error("'credentials' cannot be null"); + } + if (subscriptionId === undefined) { + throw new Error("'subscriptionId' cannot be null"); + } + // Initializing default values for options + if (!options) { + options = {}; + } + const defaults = { + requestContentType: "application/json; charset=utf-8", + credential: credentials + }; + const packageDetails = `azsdk-js-arm-policyinsights/5.0.0`; + const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix + ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` + : `${packageDetails}`; + if (!options.credentialScopes) { + options.credentialScopes = ["https://management.azure.com/.default"]; + } + const optionsWithDefaults = Object.assign(Object.assign(Object.assign({}, defaults), options), { userAgentOptions: { + userAgentPrefix + }, baseUri: options.endpoint || "https://management.azure.com" }); + super(optionsWithDefaults); + // Parameter assignments + this.subscriptionId = subscriptionId; + // Assigning values to Constant parameters + this.$host = options.$host || "https://management.azure.com"; + this.policyTrackedResources = new PolicyTrackedResourcesImpl(this); + this.remediations = new RemediationsImpl(this); + this.policyEvents = new PolicyEventsImpl(this); + this.policyStates = new PolicyStatesImpl(this); + this.operations = new OperationsImpl(this); + this.policyMetadataOperations = new PolicyMetadataOperationsImpl(this); + this.policyRestrictions = new PolicyRestrictionsImpl(this); + this.attestations = new AttestationsImpl(this); + } +} + +exports.PolicyInsightsClient = PolicyInsightsClient; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 704: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var coreClient = __nccwpck_require__(160); +var tslib = __nccwpck_require__(1860); +var coreLro = __nccwpck_require__(1754); + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n["default"] = e; + return Object.freeze(n); +} + +var coreClient__namespace = /*#__PURE__*/_interopNamespace(coreClient); + +/* + * 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. + */ +/** Known values of {@link CreatedByType} that the service accepts. */ +exports.KnownCreatedByType = void 0; +(function (KnownCreatedByType) { + KnownCreatedByType["User"] = "User"; + KnownCreatedByType["Application"] = "Application"; + KnownCreatedByType["ManagedIdentity"] = "ManagedIdentity"; + KnownCreatedByType["Key"] = "Key"; +})(exports.KnownCreatedByType || (exports.KnownCreatedByType = {})); +/** Known values of {@link SupportedCloudEnum} that the service accepts. */ +exports.KnownSupportedCloudEnum = void 0; +(function (KnownSupportedCloudEnum) { + KnownSupportedCloudEnum["AWS"] = "AWS"; + KnownSupportedCloudEnum["GCP"] = "GCP"; +})(exports.KnownSupportedCloudEnum || (exports.KnownSupportedCloudEnum = {})); +/** Known values of {@link SeverityEnum} that the service accepts. */ +exports.KnownSeverityEnum = void 0; +(function (KnownSeverityEnum) { + KnownSeverityEnum["High"] = "High"; + KnownSeverityEnum["Medium"] = "Medium"; + KnownSeverityEnum["Low"] = "Low"; +})(exports.KnownSeverityEnum || (exports.KnownSeverityEnum = {})); +/** Known values of {@link ResourceStatus} that the service accepts. */ +exports.KnownResourceStatus = void 0; +(function (KnownResourceStatus) { + /** This assessment on the resource is healthy */ + KnownResourceStatus["Healthy"] = "Healthy"; + /** This assessment is not applicable to this resource */ + KnownResourceStatus["NotApplicable"] = "NotApplicable"; + /** This assessment is turned off by policy on this subscription */ + KnownResourceStatus["OffByPolicy"] = "OffByPolicy"; + /** This assessment on the resource is not healthy */ + KnownResourceStatus["NotHealthy"] = "NotHealthy"; +})(exports.KnownResourceStatus || (exports.KnownResourceStatus = {})); +/** Known values of {@link PricingTier} that the service accepts. */ +exports.KnownPricingTier = void 0; +(function (KnownPricingTier) { + /** Get free Azure security center experience with basic security features */ + KnownPricingTier["Free"] = "Free"; + /** Get the standard Azure security center experience with advanced security features */ + KnownPricingTier["Standard"] = "Standard"; +})(exports.KnownPricingTier || (exports.KnownPricingTier = {})); +/** Known values of {@link ValueType} that the service accepts. */ +exports.KnownValueType = void 0; +(function (KnownValueType) { + /** An IP range in CIDR format (e.g. '192.168.0.1/8'). */ + KnownValueType["IpCidr"] = "IpCidr"; + /** Any string value. */ + KnownValueType["String"] = "String"; +})(exports.KnownValueType || (exports.KnownValueType = {})); +/** Known values of {@link SecuritySolutionStatus} that the service accepts. */ +exports.KnownSecuritySolutionStatus = void 0; +(function (KnownSecuritySolutionStatus) { + KnownSecuritySolutionStatus["Enabled"] = "Enabled"; + KnownSecuritySolutionStatus["Disabled"] = "Disabled"; +})(exports.KnownSecuritySolutionStatus || (exports.KnownSecuritySolutionStatus = {})); +/** Known values of {@link ExportData} that the service accepts. */ +exports.KnownExportData = void 0; +(function (KnownExportData) { + /** Agent raw events */ + KnownExportData["RawEvents"] = "RawEvents"; +})(exports.KnownExportData || (exports.KnownExportData = {})); +/** Known values of {@link DataSource} that the service accepts. */ +exports.KnownDataSource = void 0; +(function (KnownDataSource) { + /** Devices twin data */ + KnownDataSource["TwinData"] = "TwinData"; +})(exports.KnownDataSource || (exports.KnownDataSource = {})); +/** Known values of {@link RecommendationType} that the service accepts. */ +exports.KnownRecommendationType = void 0; +(function (KnownRecommendationType) { + /** Authentication schema used for pull an edge module from an ACR repository does not use Service Principal Authentication. */ + KnownRecommendationType["IoTAcrauthentication"] = "IoT_ACRAuthentication"; + /** IoT agent message size capacity is currently underutilized, causing an increase in the number of sent messages. Adjust message intervals for better utilization. */ + KnownRecommendationType["IoTAgentSendsUnutilizedMessages"] = "IoT_AgentSendsUnutilizedMessages"; + /** Identified security related system configuration issues. */ + KnownRecommendationType["IoTBaseline"] = "IoT_Baseline"; + /** You can optimize Edge Hub memory usage by turning off protocol heads for any protocols not used by Edge modules in your solution. */ + KnownRecommendationType["IoTEdgeHubMemOptimize"] = "IoT_EdgeHubMemOptimize"; + /** Logging is disabled for this edge module. */ + KnownRecommendationType["IoTEdgeLoggingOptions"] = "IoT_EdgeLoggingOptions"; + /** A minority within a device security group has inconsistent Edge Module settings with the rest of their group. */ + KnownRecommendationType["IoTInconsistentModuleSettings"] = "IoT_InconsistentModuleSettings"; + /** Install the Azure Security of Things Agent. */ + KnownRecommendationType["IoTInstallAgent"] = "IoT_InstallAgent"; + /** IP Filter Configuration should have rules defined for allowed traffic and should deny all other traffic by default. */ + KnownRecommendationType["IoTIpfilterDenyAll"] = "IoT_IPFilter_DenyAll"; + /** An Allow IP Filter rules source IP range is too large. Overly permissive rules might expose your IoT hub to malicious intenders. */ + KnownRecommendationType["IoTIpfilterPermissiveRule"] = "IoT_IPFilter_PermissiveRule"; + /** A listening endpoint was found on the device. */ + KnownRecommendationType["IoTOpenPorts"] = "IoT_OpenPorts"; + /** An Allowed firewall policy was found (INPUT/OUTPUT). The policy should Deny all traffic by default and define rules to allow necessary communication to/from the device. */ + KnownRecommendationType["IoTPermissiveFirewallPolicy"] = "IoT_PermissiveFirewallPolicy"; + /** A rule in the firewall has been found that contains a permissive pattern for a wide range of IP addresses or Ports. */ + KnownRecommendationType["IoTPermissiveInputFirewallRules"] = "IoT_PermissiveInputFirewallRules"; + /** A rule in the firewall has been found that contains a permissive pattern for a wide range of IP addresses or Ports. */ + KnownRecommendationType["IoTPermissiveOutputFirewallRules"] = "IoT_PermissiveOutputFirewallRules"; + /** Edge module is configured to run in privileged mode, with extensive Linux capabilities or with host-level network access (send/receive data to host machine). */ + KnownRecommendationType["IoTPrivilegedDockerOptions"] = "IoT_PrivilegedDockerOptions"; + /** Same authentication credentials to the IoT Hub used by multiple devices. This could indicate an illegitimate device impersonating a legitimate device. It also exposes the risk of device impersonation by an attacker. */ + KnownRecommendationType["IoTSharedCredentials"] = "IoT_SharedCredentials"; + /** Insecure TLS configurations detected. Immediate upgrade recommended. */ + KnownRecommendationType["IoTVulnerableTLSCipherSuite"] = "IoT_VulnerableTLSCipherSuite"; +})(exports.KnownRecommendationType || (exports.KnownRecommendationType = {})); +/** Known values of {@link RecommendationConfigStatus} that the service accepts. */ +exports.KnownRecommendationConfigStatus = void 0; +(function (KnownRecommendationConfigStatus) { + KnownRecommendationConfigStatus["Disabled"] = "Disabled"; + KnownRecommendationConfigStatus["Enabled"] = "Enabled"; +})(exports.KnownRecommendationConfigStatus || (exports.KnownRecommendationConfigStatus = {})); +/** Known values of {@link UnmaskedIpLoggingStatus} that the service accepts. */ +exports.KnownUnmaskedIpLoggingStatus = void 0; +(function (KnownUnmaskedIpLoggingStatus) { + /** Unmasked IP logging is disabled */ + KnownUnmaskedIpLoggingStatus["Disabled"] = "Disabled"; + /** Unmasked IP logging is enabled */ + KnownUnmaskedIpLoggingStatus["Enabled"] = "Enabled"; +})(exports.KnownUnmaskedIpLoggingStatus || (exports.KnownUnmaskedIpLoggingStatus = {})); +/** Known values of {@link AdditionalWorkspaceType} that the service accepts. */ +exports.KnownAdditionalWorkspaceType = void 0; +(function (KnownAdditionalWorkspaceType) { + KnownAdditionalWorkspaceType["Sentinel"] = "Sentinel"; +})(exports.KnownAdditionalWorkspaceType || (exports.KnownAdditionalWorkspaceType = {})); +/** Known values of {@link AdditionalWorkspaceDataType} that the service accepts. */ +exports.KnownAdditionalWorkspaceDataType = void 0; +(function (KnownAdditionalWorkspaceDataType) { + KnownAdditionalWorkspaceDataType["Alerts"] = "Alerts"; + KnownAdditionalWorkspaceDataType["RawEvents"] = "RawEvents"; +})(exports.KnownAdditionalWorkspaceDataType || (exports.KnownAdditionalWorkspaceDataType = {})); +/** Known values of {@link ReportedSeverity} that the service accepts. */ +exports.KnownReportedSeverity = void 0; +(function (KnownReportedSeverity) { + KnownReportedSeverity["Informational"] = "Informational"; + KnownReportedSeverity["Low"] = "Low"; + KnownReportedSeverity["Medium"] = "Medium"; + KnownReportedSeverity["High"] = "High"; +})(exports.KnownReportedSeverity || (exports.KnownReportedSeverity = {})); +/** Known values of {@link TaskUpdateActionType} that the service accepts. */ +exports.KnownTaskUpdateActionType = void 0; +(function (KnownTaskUpdateActionType) { + KnownTaskUpdateActionType["Activate"] = "Activate"; + KnownTaskUpdateActionType["Dismiss"] = "Dismiss"; + KnownTaskUpdateActionType["Start"] = "Start"; + KnownTaskUpdateActionType["Resolve"] = "Resolve"; + KnownTaskUpdateActionType["Close"] = "Close"; +})(exports.KnownTaskUpdateActionType || (exports.KnownTaskUpdateActionType = {})); +/** Known values of {@link AutoProvision} that the service accepts. */ +exports.KnownAutoProvision = void 0; +(function (KnownAutoProvision) { + /** Install missing security agent on VMs automatically */ + KnownAutoProvision["On"] = "On"; + /** Do not install security agent on the VMs automatically */ + KnownAutoProvision["Off"] = "Off"; +})(exports.KnownAutoProvision || (exports.KnownAutoProvision = {})); +/** Known values of {@link InformationProtectionPolicyName} that the service accepts. */ +exports.KnownInformationProtectionPolicyName = void 0; +(function (KnownInformationProtectionPolicyName) { + KnownInformationProtectionPolicyName["Effective"] = "effective"; + KnownInformationProtectionPolicyName["Custom"] = "custom"; +})(exports.KnownInformationProtectionPolicyName || (exports.KnownInformationProtectionPolicyName = {})); +/** Known values of {@link AlertNotifications} that the service accepts. */ +exports.KnownAlertNotifications = void 0; +(function (KnownAlertNotifications) { + /** Get notifications on new alerts */ + KnownAlertNotifications["On"] = "On"; + /** Don't get notifications on new alerts */ + KnownAlertNotifications["Off"] = "Off"; +})(exports.KnownAlertNotifications || (exports.KnownAlertNotifications = {})); +/** Known values of {@link AlertsToAdmins} that the service accepts. */ +exports.KnownAlertsToAdmins = void 0; +(function (KnownAlertsToAdmins) { + /** Send notification on new alerts to the subscription's admins */ + KnownAlertsToAdmins["On"] = "On"; + /** Don't send notification on new alerts to the subscription's admins */ + KnownAlertsToAdmins["Off"] = "Off"; +})(exports.KnownAlertsToAdmins || (exports.KnownAlertsToAdmins = {})); +/** Known values of {@link State} that the service accepts. */ +exports.KnownState = void 0; +(function (KnownState) { + /** All supported regulatory compliance controls in the given standard have a passed state */ + KnownState["Passed"] = "Passed"; + /** At least one supported regulatory compliance control in the given standard has a state of failed */ + KnownState["Failed"] = "Failed"; + /** All supported regulatory compliance controls in the given standard have a state of skipped */ + KnownState["Skipped"] = "Skipped"; + /** No supported regulatory compliance data for the given standard */ + KnownState["Unsupported"] = "Unsupported"; +})(exports.KnownState || (exports.KnownState = {})); +/** Known values of {@link SubAssessmentStatusCode} that the service accepts. */ +exports.KnownSubAssessmentStatusCode = void 0; +(function (KnownSubAssessmentStatusCode) { + /** The resource is healthy */ + KnownSubAssessmentStatusCode["Healthy"] = "Healthy"; + /** The resource has a security issue that needs to be addressed */ + KnownSubAssessmentStatusCode["Unhealthy"] = "Unhealthy"; + /** Assessment for this resource did not happen */ + KnownSubAssessmentStatusCode["NotApplicable"] = "NotApplicable"; +})(exports.KnownSubAssessmentStatusCode || (exports.KnownSubAssessmentStatusCode = {})); +/** Known values of {@link Severity} that the service accepts. */ +exports.KnownSeverity = void 0; +(function (KnownSeverity) { + KnownSeverity["Low"] = "Low"; + KnownSeverity["Medium"] = "Medium"; + KnownSeverity["High"] = "High"; +})(exports.KnownSeverity || (exports.KnownSeverity = {})); +/** Known values of {@link Source} that the service accepts. */ +exports.KnownSource = void 0; +(function (KnownSource) { + /** Resource is in Azure */ + KnownSource["Azure"] = "Azure"; + /** Resource in an on premise machine connected to Azure cloud */ + KnownSource["OnPremise"] = "OnPremise"; + /** SQL Resource in an on premise machine connected to Azure cloud */ + KnownSource["OnPremiseSql"] = "OnPremiseSql"; +})(exports.KnownSource || (exports.KnownSource = {})); +/** Known values of {@link AssessedResourceType} that the service accepts. */ +exports.KnownAssessedResourceType = void 0; +(function (KnownAssessedResourceType) { + KnownAssessedResourceType["SqlServerVulnerability"] = "SqlServerVulnerability"; + KnownAssessedResourceType["ContainerRegistryVulnerability"] = "ContainerRegistryVulnerability"; + KnownAssessedResourceType["ServerVulnerability"] = "ServerVulnerability"; +})(exports.KnownAssessedResourceType || (exports.KnownAssessedResourceType = {})); +/** Known values of {@link EventSource} that the service accepts. */ +exports.KnownEventSource = void 0; +(function (KnownEventSource) { + KnownEventSource["Assessments"] = "Assessments"; + KnownEventSource["AssessmentsSnapshot"] = "AssessmentsSnapshot"; + KnownEventSource["SubAssessments"] = "SubAssessments"; + KnownEventSource["SubAssessmentsSnapshot"] = "SubAssessmentsSnapshot"; + KnownEventSource["Alerts"] = "Alerts"; + KnownEventSource["SecureScores"] = "SecureScores"; + KnownEventSource["SecureScoresSnapshot"] = "SecureScoresSnapshot"; + KnownEventSource["SecureScoreControls"] = "SecureScoreControls"; + KnownEventSource["SecureScoreControlsSnapshot"] = "SecureScoreControlsSnapshot"; + KnownEventSource["RegulatoryComplianceAssessment"] = "RegulatoryComplianceAssessment"; + KnownEventSource["RegulatoryComplianceAssessmentSnapshot"] = "RegulatoryComplianceAssessmentSnapshot"; +})(exports.KnownEventSource || (exports.KnownEventSource = {})); +/** Known values of {@link PropertyType} that the service accepts. */ +exports.KnownPropertyType = void 0; +(function (KnownPropertyType) { + KnownPropertyType["String"] = "String"; + KnownPropertyType["Integer"] = "Integer"; + KnownPropertyType["Number"] = "Number"; + KnownPropertyType["Boolean"] = "Boolean"; +})(exports.KnownPropertyType || (exports.KnownPropertyType = {})); +/** Known values of {@link Operator} that the service accepts. */ +exports.KnownOperator = void 0; +(function (KnownOperator) { + /** Applies for decimal and non-decimal operands */ + KnownOperator["Equals"] = "Equals"; + /** Applies only for decimal operands */ + KnownOperator["GreaterThan"] = "GreaterThan"; + /** Applies only for decimal operands */ + KnownOperator["GreaterThanOrEqualTo"] = "GreaterThanOrEqualTo"; + /** Applies only for decimal operands */ + KnownOperator["LesserThan"] = "LesserThan"; + /** Applies only for decimal operands */ + KnownOperator["LesserThanOrEqualTo"] = "LesserThanOrEqualTo"; + /** Applies for decimal and non-decimal operands */ + KnownOperator["NotEquals"] = "NotEquals"; + /** Applies only for non-decimal operands */ + KnownOperator["Contains"] = "Contains"; + /** Applies only for non-decimal operands */ + KnownOperator["StartsWith"] = "StartsWith"; + /** Applies only for non-decimal operands */ + KnownOperator["EndsWith"] = "EndsWith"; +})(exports.KnownOperator || (exports.KnownOperator = {})); +/** Known values of {@link ActionType} that the service accepts. */ +exports.KnownActionType = void 0; +(function (KnownActionType) { + KnownActionType["LogicApp"] = "LogicApp"; + KnownActionType["EventHub"] = "EventHub"; + KnownActionType["Workspace"] = "Workspace"; +})(exports.KnownActionType || (exports.KnownActionType = {})); +/** Known values of {@link ServerVulnerabilityAssessmentPropertiesProvisioningState} that the service accepts. */ +exports.KnownServerVulnerabilityAssessmentPropertiesProvisioningState = void 0; +(function (KnownServerVulnerabilityAssessmentPropertiesProvisioningState) { + KnownServerVulnerabilityAssessmentPropertiesProvisioningState["Succeeded"] = "Succeeded"; + KnownServerVulnerabilityAssessmentPropertiesProvisioningState["Failed"] = "Failed"; + KnownServerVulnerabilityAssessmentPropertiesProvisioningState["Canceled"] = "Canceled"; + KnownServerVulnerabilityAssessmentPropertiesProvisioningState["Provisioning"] = "Provisioning"; + KnownServerVulnerabilityAssessmentPropertiesProvisioningState["Deprovisioning"] = "Deprovisioning"; +})(exports.KnownServerVulnerabilityAssessmentPropertiesProvisioningState || (exports.KnownServerVulnerabilityAssessmentPropertiesProvisioningState = {})); +/** Known values of {@link Tactics} that the service accepts. */ +exports.KnownTactics = void 0; +(function (KnownTactics) { + KnownTactics["Reconnaissance"] = "Reconnaissance"; + KnownTactics["ResourceDevelopment"] = "Resource Development"; + KnownTactics["InitialAccess"] = "Initial Access"; + KnownTactics["Execution"] = "Execution"; + KnownTactics["Persistence"] = "Persistence"; + KnownTactics["PrivilegeEscalation"] = "Privilege Escalation"; + KnownTactics["DefenseEvasion"] = "Defense Evasion"; + KnownTactics["CredentialAccess"] = "Credential Access"; + KnownTactics["Discovery"] = "Discovery"; + KnownTactics["LateralMovement"] = "Lateral Movement"; + KnownTactics["Collection"] = "Collection"; + KnownTactics["CommandAndControl"] = "Command and Control"; + KnownTactics["Exfiltration"] = "Exfiltration"; + KnownTactics["Impact"] = "Impact"; +})(exports.KnownTactics || (exports.KnownTactics = {})); +/** Known values of {@link Techniques} that the service accepts. */ +exports.KnownTechniques = void 0; +(function (KnownTechniques) { + KnownTechniques["AbuseElevationControlMechanism"] = "Abuse Elevation Control Mechanism"; + KnownTechniques["AccessTokenManipulation"] = "Access Token Manipulation"; + KnownTechniques["AccountDiscovery"] = "Account Discovery"; + KnownTechniques["AccountManipulation"] = "Account Manipulation"; + KnownTechniques["ActiveScanning"] = "Active Scanning"; + KnownTechniques["ApplicationLayerProtocol"] = "Application Layer Protocol"; + KnownTechniques["AudioCapture"] = "Audio Capture"; + KnownTechniques["BootOrLogonAutostartExecution"] = "Boot or Logon Autostart Execution"; + KnownTechniques["BootOrLogonInitializationScripts"] = "Boot or Logon Initialization Scripts"; + KnownTechniques["BruteForce"] = "Brute Force"; + KnownTechniques["CloudInfrastructureDiscovery"] = "Cloud Infrastructure Discovery"; + KnownTechniques["CloudServiceDashboard"] = "Cloud Service Dashboard"; + KnownTechniques["CloudServiceDiscovery"] = "Cloud Service Discovery"; + KnownTechniques["CommandAndScriptingInterpreter"] = "Command and Scripting Interpreter"; + KnownTechniques["CompromiseClientSoftwareBinary"] = "Compromise Client Software Binary"; + KnownTechniques["CompromiseInfrastructure"] = "Compromise Infrastructure"; + KnownTechniques["ContainerAndResourceDiscovery"] = "Container and Resource Discovery"; + KnownTechniques["CreateAccount"] = "Create Account"; + KnownTechniques["CreateOrModifySystemProcess"] = "Create or Modify System Process"; + KnownTechniques["CredentialsFromPasswordStores"] = "Credentials from Password Stores"; + KnownTechniques["DataDestruction"] = "Data Destruction"; + KnownTechniques["DataEncryptedForImpact"] = "Data Encrypted for Impact"; + KnownTechniques["DataFromCloudStorageObject"] = "Data from Cloud Storage Object"; + KnownTechniques["DataFromConfigurationRepository"] = "Data from Configuration Repository"; + KnownTechniques["DataFromInformationRepositories"] = "Data from Information Repositories"; + KnownTechniques["DataFromLocalSystem"] = "Data from Local System"; + KnownTechniques["DataManipulation"] = "Data Manipulation"; + KnownTechniques["DataStaged"] = "Data Staged"; + KnownTechniques["Defacement"] = "Defacement"; + KnownTechniques["DeobfuscateDecodeFilesOrInformation"] = "Deobfuscate/Decode Files or Information"; + KnownTechniques["DiskWipe"] = "Disk Wipe"; + KnownTechniques["DomainTrustDiscovery"] = "Domain Trust Discovery"; + KnownTechniques["DriveByCompromise"] = "Drive-by Compromise"; + KnownTechniques["DynamicResolution"] = "Dynamic Resolution"; + KnownTechniques["EndpointDenialOfService"] = "Endpoint Denial of Service"; + KnownTechniques["EventTriggeredExecution"] = "Event Triggered Execution"; + KnownTechniques["ExfiltrationOverAlternativeProtocol"] = "Exfiltration Over Alternative Protocol"; + KnownTechniques["ExploitPublicFacingApplication"] = "Exploit Public-Facing Application"; + KnownTechniques["ExploitationForClientExecution"] = "Exploitation for Client Execution"; + KnownTechniques["ExploitationForCredentialAccess"] = "Exploitation for Credential Access"; + KnownTechniques["ExploitationForDefenseEvasion"] = "Exploitation for Defense Evasion"; + KnownTechniques["ExploitationForPrivilegeEscalation"] = "Exploitation for Privilege Escalation"; + KnownTechniques["ExploitationOfRemoteServices"] = "Exploitation of Remote Services"; + KnownTechniques["ExternalRemoteServices"] = "External Remote Services"; + KnownTechniques["FallbackChannels"] = "Fallback Channels"; + KnownTechniques["FileAndDirectoryDiscovery"] = "File and Directory Discovery"; + KnownTechniques["GatherVictimNetworkInformation"] = "Gather Victim Network Information"; + KnownTechniques["HideArtifacts"] = "Hide Artifacts"; + KnownTechniques["HijackExecutionFlow"] = "Hijack Execution Flow"; + KnownTechniques["ImpairDefenses"] = "Impair Defenses"; + KnownTechniques["ImplantContainerImage"] = "Implant Container Image"; + KnownTechniques["IndicatorRemovalOnHost"] = "Indicator Removal on Host"; + KnownTechniques["IndirectCommandExecution"] = "Indirect Command Execution"; + KnownTechniques["IngressToolTransfer"] = "Ingress Tool Transfer"; + KnownTechniques["InputCapture"] = "Input Capture"; + KnownTechniques["InterProcessCommunication"] = "Inter-Process Communication"; + KnownTechniques["LateralToolTransfer"] = "Lateral Tool Transfer"; + KnownTechniques["ManInTheMiddle"] = "Man-in-the-Middle"; + KnownTechniques["Masquerading"] = "Masquerading"; + KnownTechniques["ModifyAuthenticationProcess"] = "Modify Authentication Process"; + KnownTechniques["ModifyRegistry"] = "Modify Registry"; + KnownTechniques["NetworkDenialOfService"] = "Network Denial of Service"; + KnownTechniques["NetworkServiceScanning"] = "Network Service Scanning"; + KnownTechniques["NetworkSniffing"] = "Network Sniffing"; + KnownTechniques["NonApplicationLayerProtocol"] = "Non-Application Layer Protocol"; + KnownTechniques["NonStandardPort"] = "Non-Standard Port"; + KnownTechniques["ObtainCapabilities"] = "Obtain Capabilities"; + KnownTechniques["ObfuscatedFilesOrInformation"] = "Obfuscated Files or Information"; + KnownTechniques["OfficeApplicationStartup"] = "Office Application Startup"; + KnownTechniques["OSCredentialDumping"] = "OS Credential Dumping"; + KnownTechniques["PermissionGroupsDiscovery"] = "Permission Groups Discovery"; + KnownTechniques["Phishing"] = "Phishing"; + KnownTechniques["PreOSBoot"] = "Pre-OS Boot"; + KnownTechniques["ProcessDiscovery"] = "Process Discovery"; + KnownTechniques["ProcessInjection"] = "Process Injection"; + KnownTechniques["ProtocolTunneling"] = "Protocol Tunneling"; + KnownTechniques["Proxy"] = "Proxy"; + KnownTechniques["QueryRegistry"] = "Query Registry"; + KnownTechniques["RemoteAccessSoftware"] = "Remote Access Software"; + KnownTechniques["RemoteServiceSessionHijacking"] = "Remote Service Session Hijacking"; + KnownTechniques["RemoteServices"] = "Remote Services"; + KnownTechniques["RemoteSystemDiscovery"] = "Remote System Discovery"; + KnownTechniques["ResourceHijacking"] = "Resource Hijacking"; + KnownTechniques["ScheduledTaskJob"] = "Scheduled Task/Job"; + KnownTechniques["ScreenCapture"] = "Screen Capture"; + KnownTechniques["SearchVictimOwnedWebsites"] = "Search Victim-Owned Websites"; + KnownTechniques["ServerSoftwareComponent"] = "Server Software Component"; + KnownTechniques["ServiceStop"] = "Service Stop"; + KnownTechniques["SignedBinaryProxyExecution"] = "Signed Binary Proxy Execution"; + KnownTechniques["SoftwareDeploymentTools"] = "Software Deployment Tools"; + KnownTechniques["SQLStoredProcedures"] = "SQL Stored Procedures"; + KnownTechniques["StealOrForgeKerberosTickets"] = "Steal or Forge Kerberos Tickets"; + KnownTechniques["SubvertTrustControls"] = "Subvert Trust Controls"; + KnownTechniques["SupplyChainCompromise"] = "Supply Chain Compromise"; + KnownTechniques["SystemInformationDiscovery"] = "System Information Discovery"; + KnownTechniques["TaintSharedContent"] = "Taint Shared Content"; + KnownTechniques["TrafficSignaling"] = "Traffic Signaling"; + KnownTechniques["TransferDataToCloudAccount"] = "Transfer Data to Cloud Account"; + KnownTechniques["TrustedRelationship"] = "Trusted Relationship"; + KnownTechniques["UnsecuredCredentials"] = "Unsecured Credentials"; + KnownTechniques["UserExecution"] = "User Execution"; + KnownTechniques["ValidAccounts"] = "Valid Accounts"; + KnownTechniques["WindowsManagementInstrumentation"] = "Windows Management Instrumentation"; + KnownTechniques["FileAndDirectoryPermissionsModification"] = "File and Directory Permissions Modification"; +})(exports.KnownTechniques || (exports.KnownTechniques = {})); +/** Known values of {@link Categories} that the service accepts. */ +exports.KnownCategories = void 0; +(function (KnownCategories) { + KnownCategories["Compute"] = "Compute"; + KnownCategories["Networking"] = "Networking"; + KnownCategories["Data"] = "Data"; + KnownCategories["IdentityAndAccess"] = "IdentityAndAccess"; + KnownCategories["IoT"] = "IoT"; +})(exports.KnownCategories || (exports.KnownCategories = {})); +/** Known values of {@link UserImpact} that the service accepts. */ +exports.KnownUserImpact = void 0; +(function (KnownUserImpact) { + KnownUserImpact["Low"] = "Low"; + KnownUserImpact["Moderate"] = "Moderate"; + KnownUserImpact["High"] = "High"; +})(exports.KnownUserImpact || (exports.KnownUserImpact = {})); +/** Known values of {@link ImplementationEffort} that the service accepts. */ +exports.KnownImplementationEffort = void 0; +(function (KnownImplementationEffort) { + KnownImplementationEffort["Low"] = "Low"; + KnownImplementationEffort["Moderate"] = "Moderate"; + KnownImplementationEffort["High"] = "High"; +})(exports.KnownImplementationEffort || (exports.KnownImplementationEffort = {})); +/** Known values of {@link Threats} that the service accepts. */ +exports.KnownThreats = void 0; +(function (KnownThreats) { + KnownThreats["AccountBreach"] = "accountBreach"; + KnownThreats["DataExfiltration"] = "dataExfiltration"; + KnownThreats["DataSpillage"] = "dataSpillage"; + KnownThreats["MaliciousInsider"] = "maliciousInsider"; + KnownThreats["ElevationOfPrivilege"] = "elevationOfPrivilege"; + KnownThreats["ThreatResistance"] = "threatResistance"; + KnownThreats["MissingCoverage"] = "missingCoverage"; + KnownThreats["DenialOfService"] = "denialOfService"; +})(exports.KnownThreats || (exports.KnownThreats = {})); +/** Known values of {@link AssessmentType} that the service accepts. */ +exports.KnownAssessmentType = void 0; +(function (KnownAssessmentType) { + /** Azure Security Center managed assessments */ + KnownAssessmentType["BuiltIn"] = "BuiltIn"; + /** User defined policies that are automatically ingested from Azure Policy to Azure Security Center */ + KnownAssessmentType["CustomPolicy"] = "CustomPolicy"; + /** User assessments pushed directly by the user or other third party to Azure Security Center */ + KnownAssessmentType["CustomerManaged"] = "CustomerManaged"; + /** An assessment that was created by a verified 3rd party if the user connected it to ASC */ + KnownAssessmentType["VerifiedPartner"] = "VerifiedPartner"; +})(exports.KnownAssessmentType || (exports.KnownAssessmentType = {})); +/** Known values of {@link AssessmentStatusCode} that the service accepts. */ +exports.KnownAssessmentStatusCode = void 0; +(function (KnownAssessmentStatusCode) { + /** The resource is healthy */ + KnownAssessmentStatusCode["Healthy"] = "Healthy"; + /** The resource has a security issue that needs to be addressed */ + KnownAssessmentStatusCode["Unhealthy"] = "Unhealthy"; + /** Assessment for this resource did not happen */ + KnownAssessmentStatusCode["NotApplicable"] = "NotApplicable"; +})(exports.KnownAssessmentStatusCode || (exports.KnownAssessmentStatusCode = {})); +/** Known values of {@link ExpandEnum} that the service accepts. */ +exports.KnownExpandEnum = void 0; +(function (KnownExpandEnum) { + /** All links associated with an assessment */ + KnownExpandEnum["Links"] = "links"; + /** Assessment metadata */ + KnownExpandEnum["Metadata"] = "metadata"; +})(exports.KnownExpandEnum || (exports.KnownExpandEnum = {})); +/** Known values of {@link EnforcementMode} that the service accepts. */ +exports.KnownEnforcementMode = void 0; +(function (KnownEnforcementMode) { + KnownEnforcementMode["Audit"] = "Audit"; + KnownEnforcementMode["Enforce"] = "Enforce"; + KnownEnforcementMode["None"] = "None"; +})(exports.KnownEnforcementMode || (exports.KnownEnforcementMode = {})); +/** Known values of {@link ConfigurationStatus} that the service accepts. */ +exports.KnownConfigurationStatus = void 0; +(function (KnownConfigurationStatus) { + KnownConfigurationStatus["Configured"] = "Configured"; + KnownConfigurationStatus["NotConfigured"] = "NotConfigured"; + KnownConfigurationStatus["InProgress"] = "InProgress"; + KnownConfigurationStatus["Failed"] = "Failed"; + KnownConfigurationStatus["NoStatus"] = "NoStatus"; +})(exports.KnownConfigurationStatus || (exports.KnownConfigurationStatus = {})); +/** Known values of {@link RecommendationStatus} that the service accepts. */ +exports.KnownRecommendationStatus = void 0; +(function (KnownRecommendationStatus) { + KnownRecommendationStatus["Recommended"] = "Recommended"; + KnownRecommendationStatus["NotRecommended"] = "NotRecommended"; + KnownRecommendationStatus["NotAvailable"] = "NotAvailable"; + KnownRecommendationStatus["NoStatus"] = "NoStatus"; +})(exports.KnownRecommendationStatus || (exports.KnownRecommendationStatus = {})); +/** Known values of {@link AdaptiveApplicationControlIssue} that the service accepts. */ +exports.KnownAdaptiveApplicationControlIssue = void 0; +(function (KnownAdaptiveApplicationControlIssue) { + KnownAdaptiveApplicationControlIssue["ViolationsAudited"] = "ViolationsAudited"; + KnownAdaptiveApplicationControlIssue["ViolationsBlocked"] = "ViolationsBlocked"; + KnownAdaptiveApplicationControlIssue["MsiAndScriptViolationsAudited"] = "MsiAndScriptViolationsAudited"; + KnownAdaptiveApplicationControlIssue["MsiAndScriptViolationsBlocked"] = "MsiAndScriptViolationsBlocked"; + KnownAdaptiveApplicationControlIssue["ExecutableViolationsAudited"] = "ExecutableViolationsAudited"; + KnownAdaptiveApplicationControlIssue["RulesViolatedManually"] = "RulesViolatedManually"; +})(exports.KnownAdaptiveApplicationControlIssue || (exports.KnownAdaptiveApplicationControlIssue = {})); +/** Known values of {@link SourceSystem} that the service accepts. */ +exports.KnownSourceSystem = void 0; +(function (KnownSourceSystem) { + KnownSourceSystem["AzureAppLocker"] = "Azure_AppLocker"; + KnownSourceSystem["AzureAuditD"] = "Azure_AuditD"; + KnownSourceSystem["NonAzureAppLocker"] = "NonAzure_AppLocker"; + KnownSourceSystem["NonAzureAuditD"] = "NonAzure_AuditD"; + KnownSourceSystem["None"] = "None"; +})(exports.KnownSourceSystem || (exports.KnownSourceSystem = {})); +/** Known values of {@link RecommendationAction} that the service accepts. */ +exports.KnownRecommendationAction = void 0; +(function (KnownRecommendationAction) { + KnownRecommendationAction["Recommended"] = "Recommended"; + KnownRecommendationAction["Add"] = "Add"; + KnownRecommendationAction["Remove"] = "Remove"; +})(exports.KnownRecommendationAction || (exports.KnownRecommendationAction = {})); +/** Known values of {@link EnforcementSupport} that the service accepts. */ +exports.KnownEnforcementSupport = void 0; +(function (KnownEnforcementSupport) { + KnownEnforcementSupport["Supported"] = "Supported"; + KnownEnforcementSupport["NotSupported"] = "NotSupported"; + KnownEnforcementSupport["Unknown"] = "Unknown"; +})(exports.KnownEnforcementSupport || (exports.KnownEnforcementSupport = {})); +/** Known values of {@link FileType} that the service accepts. */ +exports.KnownFileType = void 0; +(function (KnownFileType) { + KnownFileType["Exe"] = "Exe"; + KnownFileType["Dll"] = "Dll"; + KnownFileType["Msi"] = "Msi"; + KnownFileType["Script"] = "Script"; + KnownFileType["Executable"] = "Executable"; + KnownFileType["Unknown"] = "Unknown"; +})(exports.KnownFileType || (exports.KnownFileType = {})); +/** Known values of {@link Direction} that the service accepts. */ +exports.KnownDirection = void 0; +(function (KnownDirection) { + KnownDirection["Inbound"] = "Inbound"; + KnownDirection["Outbound"] = "Outbound"; +})(exports.KnownDirection || (exports.KnownDirection = {})); +/** Known values of {@link TransportProtocol} that the service accepts. */ +exports.KnownTransportProtocol = void 0; +(function (KnownTransportProtocol) { + KnownTransportProtocol["TCP"] = "TCP"; + KnownTransportProtocol["UDP"] = "UDP"; +})(exports.KnownTransportProtocol || (exports.KnownTransportProtocol = {})); +/** Known values of {@link ConnectionType} that the service accepts. */ +exports.KnownConnectionType = void 0; +(function (KnownConnectionType) { + KnownConnectionType["Internal"] = "Internal"; + KnownConnectionType["External"] = "External"; +})(exports.KnownConnectionType || (exports.KnownConnectionType = {})); +/** Known values of {@link Protocol} that the service accepts. */ +exports.KnownProtocol = void 0; +(function (KnownProtocol) { + KnownProtocol["TCP"] = "TCP"; + KnownProtocol["UDP"] = "UDP"; + KnownProtocol["All"] = "*"; +})(exports.KnownProtocol || (exports.KnownProtocol = {})); +/** Known values of {@link Status} that the service accepts. */ +exports.KnownStatus = void 0; +(function (KnownStatus) { + KnownStatus["Revoked"] = "Revoked"; + KnownStatus["Initiated"] = "Initiated"; +})(exports.KnownStatus || (exports.KnownStatus = {})); +/** Known values of {@link StatusReason} that the service accepts. */ +exports.KnownStatusReason = void 0; +(function (KnownStatusReason) { + KnownStatusReason["Expired"] = "Expired"; + KnownStatusReason["UserRequested"] = "UserRequested"; + KnownStatusReason["NewerRequestInitiated"] = "NewerRequestInitiated"; +})(exports.KnownStatusReason || (exports.KnownStatusReason = {})); +/** Known values of {@link SecurityFamily} that the service accepts. */ +exports.KnownSecurityFamily = void 0; +(function (KnownSecurityFamily) { + KnownSecurityFamily["Waf"] = "Waf"; + KnownSecurityFamily["Ngfw"] = "Ngfw"; + KnownSecurityFamily["SaasWaf"] = "SaasWaf"; + KnownSecurityFamily["Va"] = "Va"; +})(exports.KnownSecurityFamily || (exports.KnownSecurityFamily = {})); +/** Known values of {@link ExternalSecuritySolutionKind} that the service accepts. */ +exports.KnownExternalSecuritySolutionKind = void 0; +(function (KnownExternalSecuritySolutionKind) { + KnownExternalSecuritySolutionKind["CEF"] = "CEF"; + KnownExternalSecuritySolutionKind["ATA"] = "ATA"; + KnownExternalSecuritySolutionKind["AAD"] = "AAD"; +})(exports.KnownExternalSecuritySolutionKind || (exports.KnownExternalSecuritySolutionKind = {})); +/** Known values of {@link ExpandControlsEnum} that the service accepts. */ +exports.KnownExpandControlsEnum = void 0; +(function (KnownExpandControlsEnum) { + /** Add definition object for each control */ + KnownExpandControlsEnum["Definition"] = "definition"; +})(exports.KnownExpandControlsEnum || (exports.KnownExpandControlsEnum = {})); +/** Known values of {@link ControlType} that the service accepts. */ +exports.KnownControlType = void 0; +(function (KnownControlType) { + /** Azure Security Center managed assessments */ + KnownControlType["BuiltIn"] = "BuiltIn"; + /** Non Azure Security Center managed assessments */ + KnownControlType["Custom"] = "Custom"; +})(exports.KnownControlType || (exports.KnownControlType = {})); +/** Known values of {@link ProvisioningState} that the service accepts. */ +exports.KnownProvisioningState = void 0; +(function (KnownProvisioningState) { + KnownProvisioningState["Succeeded"] = "Succeeded"; + KnownProvisioningState["Failed"] = "Failed"; + KnownProvisioningState["Updating"] = "Updating"; +})(exports.KnownProvisioningState || (exports.KnownProvisioningState = {})); +/** Known values of {@link HybridComputeProvisioningState} that the service accepts. */ +exports.KnownHybridComputeProvisioningState = void 0; +(function (KnownHybridComputeProvisioningState) { + /** Valid service principal details. */ + KnownHybridComputeProvisioningState["Valid"] = "Valid"; + /** Invalid service principal details. */ + KnownHybridComputeProvisioningState["Invalid"] = "Invalid"; + /** the service principal details are expired */ + KnownHybridComputeProvisioningState["Expired"] = "Expired"; +})(exports.KnownHybridComputeProvisioningState || (exports.KnownHybridComputeProvisioningState = {})); +/** Known values of {@link AuthenticationProvisioningState} that the service accepts. */ +exports.KnownAuthenticationProvisioningState = void 0; +(function (KnownAuthenticationProvisioningState) { + /** Valid connector */ + KnownAuthenticationProvisioningState["Valid"] = "Valid"; + /** Invalid connector */ + KnownAuthenticationProvisioningState["Invalid"] = "Invalid"; + /** the connection has expired */ + KnownAuthenticationProvisioningState["Expired"] = "Expired"; + /** Incorrect policy of the connector */ + KnownAuthenticationProvisioningState["IncorrectPolicy"] = "IncorrectPolicy"; +})(exports.KnownAuthenticationProvisioningState || (exports.KnownAuthenticationProvisioningState = {})); +/** Known values of {@link PermissionProperty} that the service accepts. */ +exports.KnownPermissionProperty = void 0; +(function (KnownPermissionProperty) { + /** This permission provides read only access to AWS Security Hub resources. */ + KnownPermissionProperty["AWSAWSSecurityHubReadOnlyAccess"] = "AWS::AWSSecurityHubReadOnlyAccess"; + /** This permission grants access to read security configuration metadata. */ + KnownPermissionProperty["AWSSecurityAudit"] = "AWS::SecurityAudit"; + /** The permission provides for EC2 Automation service to execute activities defined within Automation documents. */ + KnownPermissionProperty["AWSAmazonSSMAutomationRole"] = "AWS::AmazonSSMAutomationRole"; + /** This permission provides read only access to GCP Security Command Center. */ + KnownPermissionProperty["GCPSecurityCenterAdminViewer"] = "GCP::Security Center Admin Viewer"; +})(exports.KnownPermissionProperty || (exports.KnownPermissionProperty = {})); +/** Known values of {@link AuthenticationType} that the service accepts. */ +exports.KnownAuthenticationType = void 0; +(function (KnownAuthenticationType) { + /** AWS cloud account connector user credentials authentication */ + KnownAuthenticationType["AwsCreds"] = "awsCreds"; + /** AWS account connector assume role authentication */ + KnownAuthenticationType["AwsAssumeRole"] = "awsAssumeRole"; + /** GCP account connector service to service authentication */ + KnownAuthenticationType["GcpCredentials"] = "gcpCredentials"; +})(exports.KnownAuthenticationType || (exports.KnownAuthenticationType = {})); +/** Known values of {@link ScanTriggerType} that the service accepts. */ +exports.KnownScanTriggerType = void 0; +(function (KnownScanTriggerType) { + /** OnDemand */ + KnownScanTriggerType["OnDemand"] = "OnDemand"; + /** Recurring */ + KnownScanTriggerType["Recurring"] = "Recurring"; +})(exports.KnownScanTriggerType || (exports.KnownScanTriggerType = {})); +/** Known values of {@link ScanState} that the service accepts. */ +exports.KnownScanState = void 0; +(function (KnownScanState) { + /** Failed */ + KnownScanState["Failed"] = "Failed"; + /** FailedToRun */ + KnownScanState["FailedToRun"] = "FailedToRun"; + /** InProgress */ + KnownScanState["InProgress"] = "InProgress"; + /** Passed */ + KnownScanState["Passed"] = "Passed"; +})(exports.KnownScanState || (exports.KnownScanState = {})); +/** Known values of {@link RuleStatus} that the service accepts. */ +exports.KnownRuleStatus = void 0; +(function (KnownRuleStatus) { + /** NonFinding */ + KnownRuleStatus["NonFinding"] = "NonFinding"; + /** Finding */ + KnownRuleStatus["Finding"] = "Finding"; + /** InternalError */ + KnownRuleStatus["InternalError"] = "InternalError"; +})(exports.KnownRuleStatus || (exports.KnownRuleStatus = {})); +/** Known values of {@link RuleSeverity} that the service accepts. */ +exports.KnownRuleSeverity = void 0; +(function (KnownRuleSeverity) { + /** High */ + KnownRuleSeverity["High"] = "High"; + /** Medium */ + KnownRuleSeverity["Medium"] = "Medium"; + /** Low */ + KnownRuleSeverity["Low"] = "Low"; + /** Informational */ + KnownRuleSeverity["Informational"] = "Informational"; + /** Obsolete */ + KnownRuleSeverity["Obsolete"] = "Obsolete"; +})(exports.KnownRuleSeverity || (exports.KnownRuleSeverity = {})); +/** Known values of {@link RuleType} that the service accepts. */ +exports.KnownRuleType = void 0; +(function (KnownRuleType) { + /** Binary */ + KnownRuleType["Binary"] = "Binary"; + /** BaselineExpected */ + KnownRuleType["BaselineExpected"] = "BaselineExpected"; + /** PositiveList */ + KnownRuleType["PositiveList"] = "PositiveList"; + /** NegativeList */ + KnownRuleType["NegativeList"] = "NegativeList"; +})(exports.KnownRuleType || (exports.KnownRuleType = {})); +/** Known values of {@link AlertSeverity} that the service accepts. */ +exports.KnownAlertSeverity = void 0; +(function (KnownAlertSeverity) { + /** Informational */ + KnownAlertSeverity["Informational"] = "Informational"; + /** Low */ + KnownAlertSeverity["Low"] = "Low"; + /** Medium */ + KnownAlertSeverity["Medium"] = "Medium"; + /** High */ + KnownAlertSeverity["High"] = "High"; +})(exports.KnownAlertSeverity || (exports.KnownAlertSeverity = {})); +/** Known values of {@link Intent} that the service accepts. */ +exports.KnownIntent = void 0; +(function (KnownIntent) { + /** Unknown */ + KnownIntent["Unknown"] = "Unknown"; + /** PreAttack could be either an attempt to access a certain resource regardless of a malicious intent, or a failed attempt to gain access to a target system to gather information prior to exploitation. This step is usually detected as an attempt, originating from outside the network, to scan the target system and find a way in. Further details on the PreAttack stage can be read in [MITRE Pre-Att&ck matrix](https://attack.mitre.org/matrices/pre/). */ + KnownIntent["PreAttack"] = "PreAttack"; + /** InitialAccess is the stage where an attacker manages to get foothold on the attacked resource. */ + KnownIntent["InitialAccess"] = "InitialAccess"; + /** Persistence is any access, action, or configuration change to a system that gives a threat actor a persistent presence on that system. */ + KnownIntent["Persistence"] = "Persistence"; + /** Privilege escalation is the result of actions that allow an adversary to obtain a higher level of permissions on a system or network. */ + KnownIntent["PrivilegeEscalation"] = "PrivilegeEscalation"; + /** Defense evasion consists of techniques an adversary may use to evade detection or avoid other defenses. */ + KnownIntent["DefenseEvasion"] = "DefenseEvasion"; + /** Credential access represents techniques resulting in access to or control over system, domain, or service credentials that are used within an enterprise environment. */ + KnownIntent["CredentialAccess"] = "CredentialAccess"; + /** Discovery consists of techniques that allow the adversary to gain knowledge about the system and internal network. */ + KnownIntent["Discovery"] = "Discovery"; + /** Lateral movement consists of techniques that enable an adversary to access and control remote systems on a network and could, but does not necessarily, include execution of tools on remote systems. */ + KnownIntent["LateralMovement"] = "LateralMovement"; + /** The execution tactic represents techniques that result in execution of adversary-controlled code on a local or remote system. */ + KnownIntent["Execution"] = "Execution"; + /** Collection consists of techniques used to identify and gather information, such as sensitive files, from a target network prior to exfiltration. */ + KnownIntent["Collection"] = "Collection"; + /** Exfiltration refers to techniques and attributes that result or aid in the adversary removing files and information from a target network. */ + KnownIntent["Exfiltration"] = "Exfiltration"; + /** The command and control tactic represents how adversaries communicate with systems under their control within a target network. */ + KnownIntent["CommandAndControl"] = "CommandAndControl"; + /** Impact events primarily try to directly reduce the availability or integrity of a system, service, or network; including manipulation of data to impact a business or operational process. */ + KnownIntent["Impact"] = "Impact"; + /** Probing could be either an attempt to access a certain resource regardless of a malicious intent, or a failed attempt to gain access to a target system to gather information prior to exploitation. */ + KnownIntent["Probing"] = "Probing"; + /** Exploitation is the stage where an attacker manages to get a foothold on the attacked resource. This stage is relevant for compute hosts and resources such as user accounts, certificates etc. */ + KnownIntent["Exploitation"] = "Exploitation"; +})(exports.KnownIntent || (exports.KnownIntent = {})); +/** Known values of {@link ResourceIdentifierType} that the service accepts. */ +exports.KnownResourceIdentifierType = void 0; +(function (KnownResourceIdentifierType) { + KnownResourceIdentifierType["AzureResource"] = "AzureResource"; + KnownResourceIdentifierType["LogAnalytics"] = "LogAnalytics"; +})(exports.KnownResourceIdentifierType || (exports.KnownResourceIdentifierType = {})); +/** Known values of {@link AlertStatus} that the service accepts. */ +exports.KnownAlertStatus = void 0; +(function (KnownAlertStatus) { + /** An alert which doesn't specify a value is assigned the status 'Active' */ + KnownAlertStatus["Active"] = "Active"; + /** Alert closed after handling */ + KnownAlertStatus["Resolved"] = "Resolved"; + /** Alert dismissed as false positive */ + KnownAlertStatus["Dismissed"] = "Dismissed"; +})(exports.KnownAlertStatus || (exports.KnownAlertStatus = {})); +/** Known values of {@link Kind} that the service accepts. */ +exports.KnownKind = void 0; +(function (KnownKind) { + /** Simulate alerts according to bundles */ + KnownKind["Bundles"] = "Bundles"; +})(exports.KnownKind || (exports.KnownKind = {})); +/** Known values of {@link SettingKind} that the service accepts. */ +exports.KnownSettingKind = void 0; +(function (KnownSettingKind) { + KnownSettingKind["DataExportSettings"] = "DataExportSettings"; + KnownSettingKind["AlertSuppressionSetting"] = "AlertSuppressionSetting"; + KnownSettingKind["AlertSyncSettings"] = "AlertSyncSettings"; +})(exports.KnownSettingKind || (exports.KnownSettingKind = {})); +/** Known values of {@link SettingName} that the service accepts. */ +exports.KnownSettingName = void 0; +(function (KnownSettingName) { + KnownSettingName["Mcas"] = "MCAS"; + KnownSettingName["Wdatp"] = "WDATP"; + KnownSettingName["WdatpExcludeLinuxPublicPreview"] = "WDATP_EXCLUDE_LINUX_PUBLIC_PREVIEW"; + KnownSettingName["Sentinel"] = "Sentinel"; +})(exports.KnownSettingName || (exports.KnownSettingName = {})); +/** Known values of {@link EndOfSupportStatus} that the service accepts. */ +exports.KnownEndOfSupportStatus = void 0; +(function (KnownEndOfSupportStatus) { + KnownEndOfSupportStatus["None"] = "None"; + KnownEndOfSupportStatus["NoLongerSupported"] = "noLongerSupported"; + KnownEndOfSupportStatus["VersionNoLongerSupported"] = "versionNoLongerSupported"; + KnownEndOfSupportStatus["UpcomingNoLongerSupported"] = "upcomingNoLongerSupported"; + KnownEndOfSupportStatus["UpcomingVersionNoLongerSupported"] = "upcomingVersionNoLongerSupported"; +})(exports.KnownEndOfSupportStatus || (exports.KnownEndOfSupportStatus = {})); +/** Known values of {@link CloudName} that the service accepts. */ +exports.KnownCloudName = void 0; +(function (KnownCloudName) { + KnownCloudName["Azure"] = "Azure"; + KnownCloudName["AWS"] = "AWS"; + KnownCloudName["GCP"] = "GCP"; +})(exports.KnownCloudName || (exports.KnownCloudName = {})); +/** Known values of {@link OfferingType} that the service accepts. */ +exports.KnownOfferingType = void 0; +(function (KnownOfferingType) { + KnownOfferingType["CspmMonitorAws"] = "CspmMonitorAws"; + KnownOfferingType["DefenderForContainersAws"] = "DefenderForContainersAws"; + KnownOfferingType["DefenderForServersAws"] = "DefenderForServersAws"; + KnownOfferingType["InformationProtectionAws"] = "InformationProtectionAws"; +})(exports.KnownOfferingType || (exports.KnownOfferingType = {})); +/** Known values of {@link OrganizationMembershipType} that the service accepts. */ +exports.KnownOrganizationMembershipType = void 0; +(function (KnownOrganizationMembershipType) { + KnownOrganizationMembershipType["Member"] = "Member"; + KnownOrganizationMembershipType["Organization"] = "Organization"; +})(exports.KnownOrganizationMembershipType || (exports.KnownOrganizationMembershipType = {})); +/** Known values of {@link AadConnectivityState} that the service accepts. */ +exports.KnownAadConnectivityState = void 0; +(function (KnownAadConnectivityState) { + KnownAadConnectivityState["Discovered"] = "Discovered"; + KnownAadConnectivityState["NotLicensed"] = "NotLicensed"; + KnownAadConnectivityState["Connected"] = "Connected"; +})(exports.KnownAadConnectivityState || (exports.KnownAadConnectivityState = {})); +/** Known values of {@link BundleType} that the service accepts. */ +exports.KnownBundleType = void 0; +(function (KnownBundleType) { + KnownBundleType["AppServices"] = "AppServices"; + KnownBundleType["DNS"] = "DNS"; + KnownBundleType["KeyVaults"] = "KeyVaults"; + KnownBundleType["KubernetesService"] = "KubernetesService"; + KnownBundleType["ResourceManager"] = "ResourceManager"; + KnownBundleType["SqlServers"] = "SqlServers"; + KnownBundleType["StorageAccounts"] = "StorageAccounts"; + KnownBundleType["VirtualMachines"] = "VirtualMachines"; +})(exports.KnownBundleType || (exports.KnownBundleType = {})); + +/* + * 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. + */ +const MdeOnboardingDataList = { + type: { + name: "Composite", + className: "MdeOnboardingDataList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "MdeOnboardingData" + } + } + } + } + } + } +}; +const Resource = { + type: { + name: "Composite", + className: "Resource", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const CloudError = { + type: { + name: "Composite", + className: "CloudError", + modelProperties: { + code: { + serializedName: "error.code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "error.message", + readOnly: true, + type: { + name: "String" + } + }, + target: { + serializedName: "error.target", + readOnly: true, + type: { + name: "String" + } + }, + details: { + serializedName: "error.details", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CloudErrorBody" + } + } + } + }, + additionalInfo: { + serializedName: "error.additionalInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorAdditionalInfo" + } + } + } + } + } + } +}; +const CloudErrorBody = { + type: { + name: "Composite", + className: "CloudErrorBody", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + message: { + serializedName: "message", + readOnly: true, + type: { + name: "String" + } + }, + target: { + serializedName: "target", + readOnly: true, + type: { + name: "String" + } + }, + details: { + serializedName: "details", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CloudErrorBody" + } + } + } + }, + additionalInfo: { + serializedName: "additionalInfo", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ErrorAdditionalInfo" + } + } + } + } + } + } +}; +const ErrorAdditionalInfo = { + type: { + name: "Composite", + className: "ErrorAdditionalInfo", + modelProperties: { + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, + info: { + serializedName: "info", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + } + } + } +}; +const SystemData = { + type: { + name: "Composite", + className: "SystemData", + modelProperties: { + createdBy: { + serializedName: "createdBy", + type: { + name: "String" + } + }, + createdByType: { + serializedName: "createdByType", + type: { + name: "String" + } + }, + createdAt: { + serializedName: "createdAt", + type: { + name: "DateTime" + } + }, + lastModifiedBy: { + serializedName: "lastModifiedBy", + type: { + name: "String" + } + }, + lastModifiedByType: { + serializedName: "lastModifiedByType", + type: { + name: "String" + } + }, + lastModifiedAt: { + serializedName: "lastModifiedAt", + type: { + name: "DateTime" + } + } + } + } +}; +const CustomAssessmentAutomationsListResult = { + type: { + name: "Composite", + className: "CustomAssessmentAutomationsListResult", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CustomAssessmentAutomation" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const CustomEntityStoreAssignmentRequest = { + type: { + name: "Composite", + className: "CustomEntityStoreAssignmentRequest", + modelProperties: { + principal: { + serializedName: "properties.principal", + type: { + name: "String" + } + } + } + } +}; +const CustomEntityStoreAssignmentsListResult = { + type: { + name: "Composite", + className: "CustomEntityStoreAssignmentsListResult", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CustomEntityStoreAssignment" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const ComplianceResultList = { + type: { + name: "Composite", + className: "ComplianceResultList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ComplianceResult" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const PricingList = { + type: { + name: "Composite", + className: "PricingList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Pricing" + } + } + } + } + } + } +}; +const DeviceSecurityGroupList = { + type: { + name: "Composite", + className: "DeviceSecurityGroupList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DeviceSecurityGroup" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const CustomAlertRule = { + type: { + name: "Composite", + className: "CustomAlertRule", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: { + serializedName: "ruleType", + clientName: "ruleType" + }, + modelProperties: { + displayName: { + serializedName: "displayName", + readOnly: true, + type: { + name: "String" + } + }, + description: { + serializedName: "description", + readOnly: true, + type: { + name: "String" + } + }, + isEnabled: { + serializedName: "isEnabled", + required: true, + type: { + name: "Boolean" + } + }, + ruleType: { + serializedName: "ruleType", + required: true, + type: { + name: "String" + } + } + } + } +}; +const IoTSecuritySolutionsList = { + type: { + name: "Composite", + className: "IoTSecuritySolutionsList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecuritySolutionModel" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const UserDefinedResourcesProperties = { + type: { + name: "Composite", + className: "UserDefinedResourcesProperties", + modelProperties: { + query: { + serializedName: "query", + required: true, + nullable: true, + type: { + name: "String" + } + }, + querySubscriptions: { + serializedName: "querySubscriptions", + required: true, + nullable: true, + type: { + name: "Sequence", + element: { + constraints: { + Pattern: new RegExp("^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$") + }, + type: { + name: "String" + } + } + } + } + } + } +}; +const RecommendationConfigurationProperties = { + type: { + name: "Composite", + className: "RecommendationConfigurationProperties", + modelProperties: { + recommendationType: { + serializedName: "recommendationType", + required: true, + type: { + name: "String" + } + }, + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + status: { + defaultValue: "Enabled", + serializedName: "status", + required: true, + type: { + name: "String" + } + } + } + } +}; +const AdditionalWorkspacesProperties = { + type: { + name: "Composite", + className: "AdditionalWorkspacesProperties", + modelProperties: { + workspace: { + serializedName: "workspace", + type: { + name: "String" + } + }, + type: { + defaultValue: "Sentinel", + serializedName: "type", + type: { + name: "String" + } + }, + dataTypes: { + serializedName: "dataTypes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const TagsResource = { + type: { + name: "Composite", + className: "TagsResource", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } } + } + } + } + } +}; +const IoTSecuritySolutionAnalyticsModelList = { + type: { + name: "Composite", + className: "IoTSecuritySolutionAnalyticsModelList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecuritySolutionAnalyticsModel" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const IoTSeverityMetrics = { + type: { + name: "Composite", + className: "IoTSeverityMetrics", + modelProperties: { + high: { + serializedName: "high", + type: { + name: "Number" + } + }, + medium: { + serializedName: "medium", + type: { + name: "Number" + } + }, + low: { + serializedName: "low", + type: { + name: "Number" + } + } + } + } +}; +const IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem = { + type: { + name: "Composite", + className: "IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem", + modelProperties: { + date: { + serializedName: "date", + type: { + name: "DateTime" + } + }, + devicesMetrics: { + serializedName: "devicesMetrics", + type: { + name: "Composite", + className: "IoTSeverityMetrics" + } + } + } + } +}; +const IoTSecurityAlertedDevice = { + type: { + name: "Composite", + className: "IoTSecurityAlertedDevice", + modelProperties: { + deviceId: { + serializedName: "deviceId", + readOnly: true, + type: { + name: "String" + } + }, + alertsCount: { + serializedName: "alertsCount", + readOnly: true, + type: { + name: "Number" + } + } + } + } +}; +const IoTSecurityDeviceAlert = { + type: { + name: "Composite", + className: "IoTSecurityDeviceAlert", + modelProperties: { + alertDisplayName: { + serializedName: "alertDisplayName", + readOnly: true, + type: { + name: "String" + } + }, + reportedSeverity: { + serializedName: "reportedSeverity", + readOnly: true, + type: { + name: "String" + } + }, + alertsCount: { + serializedName: "alertsCount", + readOnly: true, + type: { + name: "Number" + } + } + } + } +}; +const IoTSecurityDeviceRecommendation = { + type: { + name: "Composite", + className: "IoTSecurityDeviceRecommendation", + modelProperties: { + recommendationDisplayName: { + serializedName: "recommendationDisplayName", + readOnly: true, + type: { + name: "String" + } + }, + reportedSeverity: { + serializedName: "reportedSeverity", + readOnly: true, + type: { + name: "String" + } + }, + devicesCount: { + serializedName: "devicesCount", + readOnly: true, + type: { + name: "Number" + } + } + } + } +}; +const IoTSecurityAggregatedAlertList = { + type: { + name: "Composite", + className: "IoTSecurityAggregatedAlertList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecurityAggregatedAlert" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const IoTSecurityAggregatedAlertPropertiesTopDevicesListItem = { + type: { + name: "Composite", + className: "IoTSecurityAggregatedAlertPropertiesTopDevicesListItem", + modelProperties: { + deviceId: { + serializedName: "deviceId", + readOnly: true, + type: { + name: "String" + } + }, + alertsCount: { + serializedName: "alertsCount", + readOnly: true, + type: { + name: "Number" + } + }, + lastOccurrence: { + serializedName: "lastOccurrence", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const IoTSecurityAggregatedRecommendationList = { + type: { + name: "Composite", + className: "IoTSecurityAggregatedRecommendationList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecurityAggregatedRecommendation" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const AscLocationList = { + type: { + name: "Composite", + className: "AscLocationList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AscLocation" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const OperationList = { + type: { + name: "Composite", + className: "OperationList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Operation" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const Operation = { + type: { + name: "Composite", + className: "Operation", + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + }, + origin: { + serializedName: "origin", + readOnly: true, + type: { + name: "String" + } + }, + display: { + serializedName: "display", + type: { + name: "Composite", + className: "OperationDisplay" + } + } + } + } +}; +const OperationDisplay = { + type: { + name: "Composite", + className: "OperationDisplay", + modelProperties: { + provider: { + serializedName: "provider", + readOnly: true, + type: { + name: "String" + } + }, + resource: { + serializedName: "resource", + readOnly: true, + type: { + name: "String" + } + }, + operation: { + serializedName: "operation", + readOnly: true, + type: { + name: "String" + } + }, + description: { + serializedName: "description", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityTaskList = { + type: { + name: "Composite", + className: "SecurityTaskList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecurityTask" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityTaskParameters = { + type: { + name: "Composite", + className: "SecurityTaskParameters", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + name: { + serializedName: "name", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const AutoProvisioningSettingList = { + type: { + name: "Composite", + className: "AutoProvisioningSettingList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AutoProvisioningSetting" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ComplianceList = { + type: { + name: "Composite", + className: "ComplianceList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Compliance" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ComplianceSegment = { + type: { + name: "Composite", + className: "ComplianceSegment", + modelProperties: { + segmentType: { + serializedName: "segmentType", + readOnly: true, + type: { + name: "String" + } + }, + percentage: { + serializedName: "percentage", + readOnly: true, + type: { + name: "Number" + } + } + } + } +}; +const SensitivityLabel = { + type: { + name: "Composite", + className: "SensitivityLabel", + modelProperties: { + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + }, + rank: { + serializedName: "rank", + type: { + name: "Enum", + allowedValues: ["None", "Low", "Medium", "High", "Critical"] + } + }, + order: { + serializedName: "order", + type: { + name: "Number" + } + }, + enabled: { + serializedName: "enabled", + type: { + name: "Boolean" + } + } + } + } +}; +const InformationType = { + type: { + name: "Composite", + className: "InformationType", + modelProperties: { + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + }, + order: { + serializedName: "order", + type: { + name: "Number" + } + }, + recommendedLabelId: { + serializedName: "recommendedLabelId", + type: { + name: "Uuid" + } + }, + enabled: { + serializedName: "enabled", + type: { + name: "Boolean" + } + }, + custom: { + serializedName: "custom", + type: { + name: "Boolean" + } + }, + keywords: { + serializedName: "keywords", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InformationProtectionKeyword" + } + } + } + } + } + } +}; +const InformationProtectionKeyword = { + type: { + name: "Composite", + className: "InformationProtectionKeyword", + modelProperties: { + pattern: { + serializedName: "pattern", + type: { + name: "String" + } + }, + custom: { + serializedName: "custom", + type: { + name: "Boolean" + } + }, + canBeNumeric: { + serializedName: "canBeNumeric", + type: { + name: "Boolean" + } + }, + excluded: { + serializedName: "excluded", + type: { + name: "Boolean" + } + } + } + } +}; +const InformationProtectionPolicyList = { + type: { + name: "Composite", + className: "InformationProtectionPolicyList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "InformationProtectionPolicy" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityContactList = { + type: { + name: "Composite", + className: "SecurityContactList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecurityContact" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const WorkspaceSettingList = { + type: { + name: "Composite", + className: "WorkspaceSettingList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "WorkspaceSetting" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const RegulatoryComplianceStandardList = { + type: { + name: "Composite", + className: "RegulatoryComplianceStandardList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RegulatoryComplianceStandard" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const RegulatoryComplianceControlList = { + type: { + name: "Composite", + className: "RegulatoryComplianceControlList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RegulatoryComplianceControl" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const RegulatoryComplianceAssessmentList = { + type: { + name: "Composite", + className: "RegulatoryComplianceAssessmentList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RegulatoryComplianceAssessment" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecuritySubAssessmentList = { + type: { + name: "Composite", + className: "SecuritySubAssessmentList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecuritySubAssessment" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SubAssessmentStatus = { + type: { + name: "Composite", + className: "SubAssessmentStatus", + modelProperties: { + code: { + serializedName: "code", + readOnly: true, + type: { + name: "String" + } + }, + cause: { + serializedName: "cause", + readOnly: true, + type: { + name: "String" + } + }, + description: { + serializedName: "description", + readOnly: true, + type: { + name: "String" + } + }, + severity: { + serializedName: "severity", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ResourceDetails = { + type: { + name: "Composite", + className: "ResourceDetails", + uberParent: "ResourceDetails", + polymorphicDiscriminator: { + serializedName: "source", + clientName: "source" + }, + modelProperties: { + source: { + serializedName: "source", + required: true, + type: { + name: "String" + } + } + } + } +}; +const AdditionalData = { + type: { + name: "Composite", + className: "AdditionalData", + uberParent: "AdditionalData", + polymorphicDiscriminator: { + serializedName: "assessedResourceType", + clientName: "assessedResourceType" + }, + modelProperties: { + assessedResourceType: { + serializedName: "assessedResourceType", + required: true, + type: { + name: "String" + } + } + } + } +}; +const AutomationList = { + type: { + name: "Composite", + className: "AutomationList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Automation" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const AutomationScope = { + type: { + name: "Composite", + className: "AutomationScope", + modelProperties: { + description: { + serializedName: "description", + type: { + name: "String" + } + }, + scopePath: { + serializedName: "scopePath", + type: { + name: "String" + } + } + } + } +}; +const AutomationSource = { + type: { + name: "Composite", + className: "AutomationSource", + modelProperties: { + eventSource: { + serializedName: "eventSource", + type: { + name: "String" + } + }, + ruleSets: { + serializedName: "ruleSets", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AutomationRuleSet" + } + } + } + } + } + } +}; +const AutomationRuleSet = { + type: { + name: "Composite", + className: "AutomationRuleSet", + modelProperties: { + rules: { + serializedName: "rules", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AutomationTriggeringRule" + } + } + } + } + } + } +}; +const AutomationTriggeringRule = { + type: { + name: "Composite", + className: "AutomationTriggeringRule", + modelProperties: { + propertyJPath: { + serializedName: "propertyJPath", + type: { + name: "String" + } + }, + propertyType: { + serializedName: "propertyType", + type: { + name: "String" + } + }, + expectedValue: { + serializedName: "expectedValue", + type: { + name: "String" + } + }, + operator: { + serializedName: "operator", + type: { + name: "String" + } + } + } + } +}; +const AutomationAction = { + type: { + name: "Composite", + className: "AutomationAction", + uberParent: "AutomationAction", + polymorphicDiscriminator: { + serializedName: "actionType", + clientName: "actionType" + }, + modelProperties: { + actionType: { + serializedName: "actionType", + required: true, + type: { + name: "String" + } + } + } + } +}; +const AzureTrackedResourceLocation = { + type: { + name: "Composite", + className: "AzureTrackedResourceLocation", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String" + } + } + } + } +}; +const KindAutoGenerated = { + type: { + name: "Composite", + className: "KindAutoGenerated", + modelProperties: { + kind: { + serializedName: "kind", + type: { + name: "String" + } + } + } + } +}; +const ETag = { + type: { + name: "Composite", + className: "ETag", + modelProperties: { + etag: { + serializedName: "etag", + type: { + name: "String" + } + } + } + } +}; +const Tags = { + type: { + name: "Composite", + className: "Tags", + modelProperties: { + tags: { + serializedName: "tags", + type: { + name: "Dictionary", + value: { type: { name: "String" } } + } + } + } + } +}; +const AutomationValidationStatus = { + type: { + name: "Composite", + className: "AutomationValidationStatus", + modelProperties: { + isValid: { + serializedName: "isValid", + type: { + name: "Boolean" + } + }, + message: { + serializedName: "message", + type: { + name: "String" + } + } + } + } +}; +const AlertsSuppressionRulesList = { + type: { + name: "Composite", + className: "AlertsSuppressionRulesList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AlertsSuppressionRule" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SuppressionAlertsScope = { + type: { + name: "Composite", + className: "SuppressionAlertsScope", + modelProperties: { + allOf: { + serializedName: "allOf", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ScopeElement" + } + } + } + } + } + } +}; +const ScopeElement = { + type: { + name: "Composite", + className: "ScopeElement", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + field: { + serializedName: "field", + type: { + name: "String" + } + } + } + } +}; +const ServerVulnerabilityAssessmentsList = { + type: { + name: "Composite", + className: "ServerVulnerabilityAssessmentsList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ServerVulnerabilityAssessment" + } + } + } + } + } + } +}; +const SecurityAssessmentMetadataResponseList = { + type: { + name: "Composite", + className: "SecurityAssessmentMetadataResponseList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecurityAssessmentMetadataResponse" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityAssessmentMetadataPropertiesResponsePublishDates = { + type: { + name: "Composite", + className: "SecurityAssessmentMetadataPropertiesResponsePublishDates", + modelProperties: { + ga: { + constraints: { + Pattern: new RegExp("^([0-9]{2}\\/){2}[0-9]{4}$") + }, + serializedName: "GA", + type: { + name: "String" + } + }, + public: { + constraints: { + Pattern: new RegExp("^([0-9]{2}\\/){2}[0-9]{4}$") + }, + serializedName: "public", + required: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityAssessmentMetadataProperties = { + type: { + name: "Composite", + className: "SecurityAssessmentMetadataProperties", + modelProperties: { + displayName: { + serializedName: "displayName", + required: true, + type: { + name: "String" + } + }, + policyDefinitionId: { + serializedName: "policyDefinitionId", + readOnly: true, + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + }, + remediationDescription: { + serializedName: "remediationDescription", + type: { + name: "String" + } + }, + categories: { + serializedName: "categories", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + severity: { + serializedName: "severity", + required: true, + type: { + name: "String" + } + }, + userImpact: { + serializedName: "userImpact", + type: { + name: "String" + } + }, + implementationEffort: { + serializedName: "implementationEffort", + type: { + name: "String" + } + }, + threats: { + serializedName: "threats", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + preview: { + serializedName: "preview", + type: { + name: "Boolean" + } + }, + assessmentType: { + serializedName: "assessmentType", + required: true, + type: { + name: "String" + } + }, + partnerData: { + serializedName: "partnerData", + type: { + name: "Composite", + className: "SecurityAssessmentMetadataPartnerData" + } + } + } + } +}; +const SecurityAssessmentMetadataPartnerData = { + type: { + name: "Composite", + className: "SecurityAssessmentMetadataPartnerData", + modelProperties: { + partnerName: { + serializedName: "partnerName", + required: true, + type: { + name: "String" + } + }, + productName: { + serializedName: "productName", + type: { + name: "String" + } + }, + secret: { + serializedName: "secret", + required: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityAssessmentList = { + type: { + name: "Composite", + className: "SecurityAssessmentList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecurityAssessmentResponse" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const AssessmentStatus = { + type: { + name: "Composite", + className: "AssessmentStatus", + modelProperties: { + code: { + serializedName: "code", + required: true, + type: { + name: "String" + } + }, + cause: { + serializedName: "cause", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + } + } + } +}; +const SecurityAssessmentPropertiesBase = { + type: { + name: "Composite", + className: "SecurityAssessmentPropertiesBase", + modelProperties: { + resourceDetails: { + serializedName: "resourceDetails", + type: { + name: "Composite", + className: "ResourceDetails" + } + }, + displayName: { + serializedName: "displayName", + readOnly: true, + type: { + name: "String" + } + }, + additionalData: { + serializedName: "additionalData", + type: { + name: "Dictionary", + value: { type: { name: "String" } } + } + }, + links: { + serializedName: "links", + type: { + name: "Composite", + className: "AssessmentLinks" + } + }, + metadata: { + serializedName: "metadata", + type: { + name: "Composite", + className: "SecurityAssessmentMetadataProperties" + } + }, + partnersData: { + serializedName: "partnersData", + type: { + name: "Composite", + className: "SecurityAssessmentPartnerData" + } + } + } + } +}; +const AssessmentLinks = { + type: { + name: "Composite", + className: "AssessmentLinks", + modelProperties: { + azurePortalUri: { + serializedName: "azurePortalUri", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityAssessmentPartnerData = { + type: { + name: "Composite", + className: "SecurityAssessmentPartnerData", + modelProperties: { + partnerName: { + serializedName: "partnerName", + required: true, + type: { + name: "String" + } + }, + secret: { + serializedName: "secret", + required: true, + type: { + name: "String" + } + } + } + } +}; +const AdaptiveApplicationControlGroups = { + type: { + name: "Composite", + className: "AdaptiveApplicationControlGroups", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AdaptiveApplicationControlGroup" + } + } + } + } + } + } +}; +const ProtectionMode = { + type: { + name: "Composite", + className: "ProtectionMode", + modelProperties: { + exe: { + serializedName: "exe", + type: { + name: "String" + } + }, + msi: { + serializedName: "msi", + type: { + name: "String" + } + }, + script: { + serializedName: "script", + type: { + name: "String" + } + }, + executable: { + serializedName: "executable", + type: { + name: "String" + } + } + } + } +}; +const AdaptiveApplicationControlIssueSummary = { + type: { + name: "Composite", + className: "AdaptiveApplicationControlIssueSummary", + modelProperties: { + issue: { + serializedName: "issue", + type: { + name: "String" + } + }, + numberOfVms: { + serializedName: "numberOfVms", + type: { + name: "Number" + } + } + } + } +}; +const VmRecommendation = { + type: { + name: "Composite", + className: "VmRecommendation", + modelProperties: { + configurationStatus: { + serializedName: "configurationStatus", + type: { + name: "String" + } + }, + recommendationAction: { + serializedName: "recommendationAction", + type: { + name: "String" + } + }, + resourceId: { + serializedName: "resourceId", + type: { + name: "String" + } + }, + enforcementSupport: { + serializedName: "enforcementSupport", + type: { + name: "String" + } + } + } + } +}; +const PathRecommendation = { + type: { + name: "Composite", + className: "PathRecommendation", + modelProperties: { + path: { + serializedName: "path", + type: { + name: "String" + } + }, + action: { + serializedName: "action", + type: { + name: "String" + } + }, + type: { + serializedName: "type", + type: { + name: "String" + } + }, + publisherInfo: { + serializedName: "publisherInfo", + type: { + name: "Composite", + className: "PublisherInfo" + } + }, + common: { + serializedName: "common", + type: { + name: "Boolean" + } + }, + userSids: { + serializedName: "userSids", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + usernames: { + serializedName: "usernames", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "UserRecommendation" + } + } + } + }, + fileType: { + serializedName: "fileType", + type: { + name: "String" + } + }, + configurationStatus: { + serializedName: "configurationStatus", + type: { + name: "String" + } + } + } + } +}; +const PublisherInfo = { + type: { + name: "Composite", + className: "PublisherInfo", + modelProperties: { + publisherName: { + serializedName: "publisherName", + type: { + name: "String" + } + }, + productName: { + serializedName: "productName", + type: { + name: "String" + } + }, + binaryName: { + serializedName: "binaryName", + type: { + name: "String" + } + }, + version: { + serializedName: "version", + type: { + name: "String" + } + } + } + } +}; +const UserRecommendation = { + type: { + name: "Composite", + className: "UserRecommendation", + modelProperties: { + username: { + serializedName: "username", + type: { + name: "String" + } + }, + recommendationAction: { + serializedName: "recommendationAction", + type: { + name: "String" + } + } + } + } +}; +const Location = { + type: { + name: "Composite", + className: "Location", + modelProperties: { + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const AdaptiveNetworkHardeningsList = { + type: { + name: "Composite", + className: "AdaptiveNetworkHardeningsList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AdaptiveNetworkHardening" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; +const Rule = { + type: { + name: "Composite", + className: "Rule", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + direction: { + serializedName: "direction", + type: { + name: "String" + } + }, + destinationPort: { + constraints: { + InclusiveMaximum: 65535, + InclusiveMinimum: 0 + }, + serializedName: "destinationPort", + type: { + name: "Number" + } + }, + protocols: { + serializedName: "protocols", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + ipAddresses: { + serializedName: "ipAddresses", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const EffectiveNetworkSecurityGroups = { + type: { + name: "Composite", + className: "EffectiveNetworkSecurityGroups", + modelProperties: { + networkInterface: { + serializedName: "networkInterface", + type: { + name: "String" + } + }, + networkSecurityGroups: { + serializedName: "networkSecurityGroups", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const AdaptiveNetworkHardeningEnforceRequest = { + type: { + name: "Composite", + className: "AdaptiveNetworkHardeningEnforceRequest", + modelProperties: { + rules: { + serializedName: "rules", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Rule" + } + } + } + }, + networkSecurityGroups: { + serializedName: "networkSecurityGroups", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const AllowedConnectionsList = { + type: { + name: "Composite", + className: "AllowedConnectionsList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AllowedConnectionsResource" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ConnectableResource = { + type: { + name: "Composite", + className: "ConnectableResource", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + }, + inboundConnectedResources: { + serializedName: "inboundConnectedResources", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ConnectedResource" + } + } + } + }, + outboundConnectedResources: { + serializedName: "outboundConnectedResources", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ConnectedResource" + } + } + } + } + } + } +}; +const ConnectedResource = { + type: { + name: "Composite", + className: "ConnectedResource", + modelProperties: { + connectedResourceId: { + serializedName: "connectedResourceId", + readOnly: true, + type: { + name: "String" + } + }, + tcpPorts: { + serializedName: "tcpPorts", + readOnly: true, + type: { + name: "String" + } + }, + udpPorts: { + serializedName: "udpPorts", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const TopologyList = { + type: { + name: "Composite", + className: "TopologyList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TopologyResource" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const TopologySingleResource = { + type: { + name: "Composite", + className: "TopologySingleResource", + modelProperties: { + resourceId: { + serializedName: "resourceId", + readOnly: true, + type: { + name: "String" + } + }, + severity: { + serializedName: "severity", + readOnly: true, + type: { + name: "String" + } + }, + recommendationsExist: { + serializedName: "recommendationsExist", + readOnly: true, + type: { + name: "Boolean" + } + }, + networkZones: { + serializedName: "networkZones", + readOnly: true, + type: { + name: "String" + } + }, + topologyScore: { + serializedName: "topologyScore", + readOnly: true, + type: { + name: "Number" + } + }, + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String" + } + }, + parents: { + serializedName: "parents", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TopologySingleResourceParent" + } + } + } + }, + children: { + serializedName: "children", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TopologySingleResourceChild" + } + } + } + } + } + } +}; +const TopologySingleResourceParent = { + type: { + name: "Composite", + className: "TopologySingleResourceParent", + modelProperties: { + resourceId: { + serializedName: "resourceId", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const TopologySingleResourceChild = { + type: { + name: "Composite", + className: "TopologySingleResourceChild", + modelProperties: { + resourceId: { + serializedName: "resourceId", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const JitNetworkAccessPoliciesList = { + type: { + name: "Composite", + className: "JitNetworkAccessPoliciesList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "JitNetworkAccessPolicy" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const JitNetworkAccessPolicyVirtualMachine = { + type: { + name: "Composite", + className: "JitNetworkAccessPolicyVirtualMachine", + modelProperties: { + id: { + serializedName: "id", + required: true, + type: { + name: "String" + } + }, + ports: { + serializedName: "ports", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "JitNetworkAccessPortRule" + } + } + } + }, + publicIpAddress: { + serializedName: "publicIpAddress", + type: { + name: "String" + } + } + } + } +}; +const JitNetworkAccessPortRule = { + type: { + name: "Composite", + className: "JitNetworkAccessPortRule", + modelProperties: { + number: { + constraints: { + InclusiveMaximum: 65535, + InclusiveMinimum: 0 + }, + serializedName: "number", + required: true, + type: { + name: "Number" + } + }, + protocol: { + serializedName: "protocol", + required: true, + type: { + name: "String" + } + }, + allowedSourceAddressPrefix: { + serializedName: "allowedSourceAddressPrefix", + type: { + name: "String" + } + }, + allowedSourceAddressPrefixes: { + serializedName: "allowedSourceAddressPrefixes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + maxRequestAccessDuration: { + serializedName: "maxRequestAccessDuration", + required: true, + type: { + name: "String" + } + } + } + } +}; +const JitNetworkAccessRequest = { + type: { + name: "Composite", + className: "JitNetworkAccessRequest", + modelProperties: { + virtualMachines: { + serializedName: "virtualMachines", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "JitNetworkAccessRequestVirtualMachine" + } + } + } + }, + startTimeUtc: { + serializedName: "startTimeUtc", + required: true, + type: { + name: "DateTime" + } + }, + requestor: { + serializedName: "requestor", + required: true, + type: { + name: "String" + } + }, + justification: { + serializedName: "justification", + type: { + name: "String" + } + } + } + } +}; +const JitNetworkAccessRequestVirtualMachine = { + type: { + name: "Composite", + className: "JitNetworkAccessRequestVirtualMachine", + modelProperties: { + id: { + serializedName: "id", + required: true, + type: { + name: "String" + } + }, + ports: { + serializedName: "ports", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "JitNetworkAccessRequestPort" + } + } + } + } + } + } +}; +const JitNetworkAccessRequestPort = { + type: { + name: "Composite", + className: "JitNetworkAccessRequestPort", + modelProperties: { + number: { + constraints: { + InclusiveMaximum: 65535, + InclusiveMinimum: 0 + }, + serializedName: "number", + required: true, + type: { + name: "Number" + } + }, + allowedSourceAddressPrefix: { + serializedName: "allowedSourceAddressPrefix", + type: { + name: "String" + } + }, + allowedSourceAddressPrefixes: { + serializedName: "allowedSourceAddressPrefixes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + endTimeUtc: { + serializedName: "endTimeUtc", + required: true, + type: { + name: "DateTime" + } + }, + status: { + serializedName: "status", + required: true, + type: { + name: "String" + } + }, + statusReason: { + serializedName: "statusReason", + required: true, + type: { + name: "String" + } + }, + mappedPort: { + serializedName: "mappedPort", + type: { + name: "Number" + } + } + } + } +}; +const JitNetworkAccessPolicyInitiateRequest = { + type: { + name: "Composite", + className: "JitNetworkAccessPolicyInitiateRequest", + modelProperties: { + virtualMachines: { + serializedName: "virtualMachines", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "JitNetworkAccessPolicyInitiateVirtualMachine" + } + } + } + }, + justification: { + serializedName: "justification", + type: { + name: "String" + } + } + } + } +}; +const JitNetworkAccessPolicyInitiateVirtualMachine = { + type: { + name: "Composite", + className: "JitNetworkAccessPolicyInitiateVirtualMachine", + modelProperties: { + id: { + serializedName: "id", + required: true, + type: { + name: "String" + } + }, + ports: { + serializedName: "ports", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "JitNetworkAccessPolicyInitiatePort" + } + } + } + } + } + } +}; +const JitNetworkAccessPolicyInitiatePort = { + type: { + name: "Composite", + className: "JitNetworkAccessPolicyInitiatePort", + modelProperties: { + number: { + constraints: { + InclusiveMaximum: 65535, + InclusiveMinimum: 0 + }, + serializedName: "number", + required: true, + type: { + name: "Number" + } + }, + allowedSourceAddressPrefix: { + serializedName: "allowedSourceAddressPrefix", + type: { + name: "String" + } + }, + endTimeUtc: { + serializedName: "endTimeUtc", + required: true, + type: { + name: "DateTime" + } + } + } + } +}; +const DiscoveredSecuritySolutionList = { + type: { + name: "Composite", + className: "DiscoveredSecuritySolutionList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DiscoveredSecuritySolution" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecuritySolutionsReferenceDataList = { + type: { + name: "Composite", + className: "SecuritySolutionsReferenceDataList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecuritySolutionsReferenceData" + } + } + } + } + } + } +}; +const ExternalSecuritySolutionList = { + type: { + name: "Composite", + className: "ExternalSecuritySolutionList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ExternalSecuritySolution" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ExternalSecuritySolutionKindAutoGenerated = { + type: { + name: "Composite", + className: "ExternalSecuritySolutionKindAutoGenerated", + modelProperties: { + kind: { + serializedName: "kind", + type: { + name: "String" + } + } + } + } +}; +const SecureScoresList = { + type: { + name: "Composite", + className: "SecureScoresList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecureScoreItem" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecureScoreControlList = { + type: { + name: "Composite", + className: "SecureScoreControlList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecureScoreControlDetails" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecureScoreControlDefinitionSource = { + type: { + name: "Composite", + className: "SecureScoreControlDefinitionSource", + modelProperties: { + sourceType: { + serializedName: "sourceType", + type: { + name: "String" + } + } + } + } +}; +const AzureResourceLink = { + type: { + name: "Composite", + className: "AzureResourceLink", + modelProperties: { + id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecureScoreControlDefinitionList = { + type: { + name: "Composite", + className: "SecureScoreControlDefinitionList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecureScoreControlDefinitionItem" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecuritySolutionList = { + type: { + name: "Composite", + className: "SecuritySolutionList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecuritySolution" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ConnectorSettingList = { + type: { + name: "Composite", + className: "ConnectorSettingList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ConnectorSetting" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const HybridComputeSettingsProperties = { + type: { + name: "Composite", + className: "HybridComputeSettingsProperties", + modelProperties: { + hybridComputeProvisioningState: { + serializedName: "hybridComputeProvisioningState", + readOnly: true, + type: { + name: "String" + } + }, + autoProvision: { + serializedName: "autoProvision", + required: true, + type: { + name: "String" + } + }, + resourceGroupName: { + serializedName: "resourceGroupName", + type: { + name: "String" + } + }, + region: { + serializedName: "region", + type: { + name: "String" + } + }, + proxyServer: { + serializedName: "proxyServer", + type: { + name: "Composite", + className: "ProxyServerProperties" + } + }, + servicePrincipal: { + serializedName: "servicePrincipal", + type: { + name: "Composite", + className: "ServicePrincipalProperties" + } + } + } + } +}; +const ProxyServerProperties = { + type: { + name: "Composite", + className: "ProxyServerProperties", + modelProperties: { + ip: { + serializedName: "ip", + type: { + name: "String" + } + }, + port: { + serializedName: "port", + type: { + name: "String" + } + } + } + } +}; +const ServicePrincipalProperties = { + type: { + name: "Composite", + className: "ServicePrincipalProperties", + modelProperties: { + applicationId: { + serializedName: "applicationId", + type: { + name: "String" + } + }, + secret: { + serializedName: "secret", + type: { + name: "String" + } + } + } + } +}; +const AuthenticationDetailsProperties = { + type: { + name: "Composite", + className: "AuthenticationDetailsProperties", + uberParent: "AuthenticationDetailsProperties", + polymorphicDiscriminator: { + serializedName: "authenticationType", + clientName: "authenticationType" + }, + modelProperties: { + authenticationProvisioningState: { + serializedName: "authenticationProvisioningState", + readOnly: true, + type: { + name: "String" + } + }, + grantedPermissions: { + serializedName: "grantedPermissions", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + authenticationType: { + serializedName: "authenticationType", + required: true, + type: { + name: "String" + } + } + } + } +}; +const ScanProperties = { + type: { + name: "Composite", + className: "ScanProperties", + modelProperties: { + triggerType: { + serializedName: "triggerType", + type: { + name: "String" + } + }, + state: { + serializedName: "state", + type: { + name: "String" + } + }, + server: { + serializedName: "server", + type: { + name: "String" + } + }, + database: { + serializedName: "database", + type: { + name: "String" + } + }, + sqlVersion: { + serializedName: "sqlVersion", + type: { + name: "String" + } + }, + startTime: { + serializedName: "startTime", + type: { + name: "DateTime" + } + }, + endTime: { + serializedName: "endTime", + type: { + name: "DateTime" + } + }, + highSeverityFailedRulesCount: { + serializedName: "highSeverityFailedRulesCount", + type: { + name: "Number" + } + }, + mediumSeverityFailedRulesCount: { + serializedName: "mediumSeverityFailedRulesCount", + type: { + name: "Number" + } + }, + lowSeverityFailedRulesCount: { + serializedName: "lowSeverityFailedRulesCount", + type: { + name: "Number" + } + }, + totalPassedRulesCount: { + serializedName: "totalPassedRulesCount", + type: { + name: "Number" + } + }, + totalFailedRulesCount: { + serializedName: "totalFailedRulesCount", + type: { + name: "Number" + } + }, + totalRulesCount: { + serializedName: "totalRulesCount", + type: { + name: "Number" + } + }, + isBaselineApplied: { + serializedName: "isBaselineApplied", + type: { + name: "Boolean" + } + } + } + } +}; +const Scans = { + type: { + name: "Composite", + className: "Scans", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Scan" + } + } + } + } + } + } +}; +const ScanResultProperties = { + type: { + name: "Composite", + className: "ScanResultProperties", + modelProperties: { + ruleId: { + serializedName: "ruleId", + type: { + name: "String" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + }, + isTrimmed: { + serializedName: "isTrimmed", + type: { + name: "Boolean" + } + }, + queryResults: { + serializedName: "queryResults", + type: { + name: "Sequence", + element: { + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + }, + remediation: { + serializedName: "remediation", + type: { + name: "Composite", + className: "Remediation" + } + }, + baselineAdjustedResult: { + serializedName: "baselineAdjustedResult", + type: { + name: "Composite", + className: "BaselineAdjustedResult" + } + }, + ruleMetadata: { + serializedName: "ruleMetadata", + type: { + name: "Composite", + className: "VaRule" + } + } + } + } +}; +const Remediation = { + type: { + name: "Composite", + className: "Remediation", + modelProperties: { + description: { + serializedName: "description", + type: { + name: "String" + } + }, + scripts: { + serializedName: "scripts", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + automated: { + serializedName: "automated", + type: { + name: "Boolean" + } + }, + portalLink: { + serializedName: "portalLink", + type: { + name: "String" + } + } + } + } +}; +const BaselineAdjustedResult = { + type: { + name: "Composite", + className: "BaselineAdjustedResult", + modelProperties: { + baseline: { + serializedName: "baseline", + type: { + name: "Composite", + className: "Baseline" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + }, + resultsNotInBaseline: { + serializedName: "resultsNotInBaseline", + type: { + name: "Sequence", + element: { + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + }, + resultsOnlyInBaseline: { + serializedName: "resultsOnlyInBaseline", + type: { + name: "Sequence", + element: { + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } + } + } +}; +const Baseline = { + type: { + name: "Composite", + className: "Baseline", + modelProperties: { + expectedResults: { + serializedName: "expectedResults", + type: { + name: "Sequence", + element: { + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + }, + updatedTime: { + serializedName: "updatedTime", + type: { + name: "DateTime" + } + } + } + } +}; +const VaRule = { + type: { + name: "Composite", + className: "VaRule", + modelProperties: { + ruleId: { + serializedName: "ruleId", + type: { + name: "String" + } + }, + severity: { + serializedName: "severity", + type: { + name: "String" + } + }, + category: { + serializedName: "category", + type: { + name: "String" + } + }, + ruleType: { + serializedName: "ruleType", + type: { + name: "String" + } + }, + title: { + serializedName: "title", + type: { + name: "String" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + }, + rationale: { + serializedName: "rationale", + type: { + name: "String" + } + }, + queryCheck: { + serializedName: "queryCheck", + type: { + name: "Composite", + className: "QueryCheck" + } + }, + benchmarkReferences: { + serializedName: "benchmarkReferences", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "BenchmarkReference" + } + } + } + } + } + } +}; +const QueryCheck = { + type: { + name: "Composite", + className: "QueryCheck", + modelProperties: { + query: { + serializedName: "query", + type: { + name: "String" + } + }, + expectedResult: { + serializedName: "expectedResult", + type: { + name: "Sequence", + element: { + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + }, + columnNames: { + serializedName: "columnNames", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const BenchmarkReference = { + type: { + name: "Composite", + className: "BenchmarkReference", + modelProperties: { + benchmark: { + serializedName: "benchmark", + type: { + name: "String" + } + }, + reference: { + serializedName: "reference", + type: { + name: "String" + } + } + } + } +}; +const ScanResults = { + type: { + name: "Composite", + className: "ScanResults", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ScanResult" + } + } + } + } + } + } +}; +const RuleResultsInput = { + type: { + name: "Composite", + className: "RuleResultsInput", + modelProperties: { + latestScan: { + serializedName: "latestScan", + type: { + name: "Boolean" + } + }, + results: { + serializedName: "results", + type: { + name: "Sequence", + element: { + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } + } + } +}; +const RuleResultsProperties = { + type: { + name: "Composite", + className: "RuleResultsProperties", + modelProperties: { + results: { + serializedName: "results", + type: { + name: "Sequence", + element: { + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } + } + } +}; +const RulesResults = { + type: { + name: "Composite", + className: "RulesResults", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RuleResults" + } + } + } + } + } + } +}; +const RulesResultsInput = { + type: { + name: "Composite", + className: "RulesResultsInput", + modelProperties: { + latestScan: { + serializedName: "latestScan", + type: { + name: "Boolean" + } + }, + results: { + serializedName: "results", + type: { + name: "Dictionary", + value: { + type: { + name: "Sequence", + element: { + type: { + name: "Sequence", + element: { type: { name: "String" } } + } + } + } + } + } + } + } + } +}; +const AlertList = { + type: { + name: "Composite", + className: "AlertList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Alert" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ResourceIdentifier = { + type: { + name: "Composite", + className: "ResourceIdentifier", + uberParent: "ResourceIdentifier", + polymorphicDiscriminator: { + serializedName: "type", + clientName: "type" + }, + modelProperties: { + type: { + serializedName: "type", + required: true, + type: { + name: "String" + } + } + } + } +}; +const AlertEntity = { + type: { + name: "Composite", + className: "AlertEntity", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const AlertSimulatorRequestBody = { + type: { + name: "Composite", + className: "AlertSimulatorRequestBody", + modelProperties: { + properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "AlertSimulatorRequestProperties" + } + } + } + } +}; +const AlertSimulatorRequestProperties = { + serializedName: "AlertSimulatorRequestProperties", + type: { + name: "Composite", + className: "AlertSimulatorRequestProperties", + uberParent: "AlertSimulatorRequestProperties", + additionalProperties: { type: { name: "Object" } }, + polymorphicDiscriminator: { + serializedName: "kind", + clientName: "kind" + }, + modelProperties: { + kind: { + serializedName: "kind", + required: true, + type: { + name: "String" + } + } + } + } +}; +const SettingsList = { + type: { + name: "Composite", + className: "SettingsList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Setting" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const IngestionSettingList = { + type: { + name: "Composite", + className: "IngestionSettingList", + modelProperties: { + value: { + serializedName: "value", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IngestionSetting" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const IngestionSettingToken = { + type: { + name: "Composite", + className: "IngestionSettingToken", + modelProperties: { + token: { + serializedName: "token", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ConnectionStrings = { + type: { + name: "Composite", + className: "ConnectionStrings", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IngestionConnectionString" + } + } + } + } + } + } +}; +const IngestionConnectionString = { + type: { + name: "Composite", + className: "IngestionConnectionString", + modelProperties: { + location: { + serializedName: "location", + readOnly: true, + type: { + name: "String" + } + }, + value: { + serializedName: "value", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SoftwaresList = { + type: { + name: "Composite", + className: "SoftwaresList", + modelProperties: { + value: { + serializedName: "value", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Software" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityConnectorsList = { + type: { + name: "Composite", + className: "SecurityConnectorsList", + modelProperties: { + value: { + serializedName: "value", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "SecurityConnector" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const CloudOffering = { + type: { + name: "Composite", + className: "CloudOffering", + uberParent: "CloudOffering", + polymorphicDiscriminator: { + serializedName: "offeringType", + clientName: "offeringType" + }, + modelProperties: { + offeringType: { + serializedName: "offeringType", + required: true, + type: { + name: "String" + } + }, + description: { + serializedName: "description", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const SecurityConnectorPropertiesOrganizationalData = { + type: { + name: "Composite", + className: "SecurityConnectorPropertiesOrganizationalData", + modelProperties: { + organizationMembershipType: { + serializedName: "organizationMembershipType", + type: { + name: "String" + } + }, + parentHierarchyId: { + serializedName: "parentHierarchyId", + type: { + name: "String" + } + }, + stacksetName: { + serializedName: "stacksetName", + type: { + name: "String" + } + }, + excludedAccountIds: { + serializedName: "excludedAccountIds", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; +const Cvss = { + type: { + name: "Composite", + className: "Cvss", + modelProperties: { + base: { + serializedName: "base", + readOnly: true, + type: { + name: "Number" + } + } + } + } +}; +const Cve = { + type: { + name: "Composite", + className: "Cve", + modelProperties: { + title: { + serializedName: "title", + readOnly: true, + type: { + name: "String" + } + }, + link: { + serializedName: "link", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const VendorReference = { + type: { + name: "Composite", + className: "VendorReference", + modelProperties: { + title: { + serializedName: "title", + readOnly: true, + type: { + name: "String" + } + }, + link: { + serializedName: "link", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; +const ExternalSecuritySolutionProperties = { + type: { + name: "Composite", + className: "ExternalSecuritySolutionProperties", + additionalProperties: { type: { name: "Object" } }, + modelProperties: { + deviceVendor: { + serializedName: "deviceVendor", + type: { + name: "String" + } + }, + deviceType: { + serializedName: "deviceType", + type: { + name: "String" + } + }, + workspace: { + serializedName: "workspace", + type: { + name: "Composite", + className: "ConnectedWorkspace" + } + } + } + } +}; +const ConnectedWorkspace = { + type: { + name: "Composite", + className: "ConnectedWorkspace", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + } + } + } +}; +const AadConnectivityStateAutoGenerated = { + type: { + name: "Composite", + className: "AadConnectivityStateAutoGenerated", + modelProperties: { + connectivityState: { + serializedName: "connectivityState", + type: { + name: "String" + } + } + } + } +}; +const SecureScoreControlScore = { + type: { + name: "Composite", + className: "SecureScoreControlScore", + modelProperties: { + max: { + constraints: { + InclusiveMaximum: 10, + InclusiveMinimum: 0 + }, + serializedName: "max", + readOnly: true, + type: { + name: "Number" + } + }, + current: { + constraints: { + InclusiveMaximum: 10, + InclusiveMinimum: 0 + }, + serializedName: "current", + readOnly: true, + type: { + name: "Number" + } + }, + percentage: { + constraints: { + InclusiveMaximum: 1, + InclusiveMinimum: 0 + }, + serializedName: "percentage", + readOnly: true, + type: { + name: "Number" + } + } + } + } +}; +const CspmMonitorAwsOfferingNativeCloudConnection = { + type: { + name: "Composite", + className: "CspmMonitorAwsOfferingNativeCloudConnection", + modelProperties: { + cloudRoleArn: { + serializedName: "cloudRoleArn", + type: { + name: "String" + } + } + } + } +}; +const DefenderForContainersAwsOfferingKubernetesService = { + type: { + name: "Composite", + className: "DefenderForContainersAwsOfferingKubernetesService", + modelProperties: { + cloudRoleArn: { + serializedName: "cloudRoleArn", + type: { + name: "String" + } + } + } + } +}; +const DefenderForContainersAwsOfferingKubernetesScubaReader = { + type: { + name: "Composite", + className: "DefenderForContainersAwsOfferingKubernetesScubaReader", + modelProperties: { + cloudRoleArn: { + serializedName: "cloudRoleArn", + type: { + name: "String" + } + } + } + } +}; +const DefenderForContainersAwsOfferingCloudWatchToKinesis = { + type: { + name: "Composite", + className: "DefenderForContainersAwsOfferingCloudWatchToKinesis", + modelProperties: { + cloudRoleArn: { + serializedName: "cloudRoleArn", + type: { + name: "String" + } + } + } + } +}; +const DefenderForContainersAwsOfferingKinesisToS3 = { + type: { + name: "Composite", + className: "DefenderForContainersAwsOfferingKinesisToS3", + modelProperties: { + cloudRoleArn: { + serializedName: "cloudRoleArn", + type: { + name: "String" + } + } + } + } +}; +const DefenderForServersAwsOfferingDefenderForServers = { + type: { + name: "Composite", + className: "DefenderForServersAwsOfferingDefenderForServers", + modelProperties: { + cloudRoleArn: { + serializedName: "cloudRoleArn", + type: { + name: "String" + } + } + } + } +}; +const DefenderForServersAwsOfferingArcAutoProvisioning = { + type: { + name: "Composite", + className: "DefenderForServersAwsOfferingArcAutoProvisioning", + modelProperties: { + enabled: { + serializedName: "enabled", + type: { + name: "Boolean" + } + }, + servicePrincipalSecretMetadata: { + serializedName: "servicePrincipalSecretMetadata", + type: { + name: "Composite", + className: "DefenderForServersAwsOfferingArcAutoProvisioningServicePrincipalSecretMetadata" + } + } + } + } +}; +const DefenderForServersAwsOfferingArcAutoProvisioningServicePrincipalSecretMetadata = { + type: { + name: "Composite", + className: "DefenderForServersAwsOfferingArcAutoProvisioningServicePrincipalSecretMetadata", + modelProperties: { + expiryDate: { + serializedName: "expiryDate", + type: { + name: "String" + } + }, + parameterStoreRegion: { + serializedName: "parameterStoreRegion", + type: { + name: "String" + } + }, + parameterNameInStore: { + serializedName: "parameterNameInStore", + type: { + name: "String" + } + } + } + } +}; +const InformationProtectionAwsOfferingInformationProtection = { + type: { + name: "Composite", + className: "InformationProtectionAwsOfferingInformationProtection", + modelProperties: { + cloudRoleArn: { + serializedName: "cloudRoleArn", + type: { + name: "String" + } + } + } + } +}; +const MdeOnboardingData = { + type: { + name: "Composite", + className: "MdeOnboardingData", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { onboardingPackageWindows: { + serializedName: "properties.onboardingPackageWindows", + type: { + name: "ByteArray" + } + }, onboardingPackageLinux: { + serializedName: "properties.onboardingPackageLinux", + type: { + name: "ByteArray" + } + } }) + } +}; +const CustomAssessmentAutomation = { + type: { + name: "Composite", + className: "CustomAssessmentAutomation", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, compressedQuery: { + serializedName: "properties.compressedQuery", + type: { + name: "String" + } + }, supportedCloud: { + serializedName: "properties.supportedCloud", + type: { + name: "String" + } + }, severity: { + serializedName: "properties.severity", + type: { + name: "String" + } + }, displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, remediationDescription: { + serializedName: "properties.remediationDescription", + type: { + name: "String" + } + }, assessmentKey: { + serializedName: "properties.assessmentKey", + type: { + name: "String" + } + } }) + } +}; +const CustomAssessmentAutomationRequest = { + type: { + name: "Composite", + className: "CustomAssessmentAutomationRequest", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { compressedQuery: { + serializedName: "properties.compressedQuery", + type: { + name: "String" + } + }, supportedCloud: { + serializedName: "properties.supportedCloud", + type: { + name: "String" + } + }, severity: { + serializedName: "properties.severity", + type: { + name: "String" + } + }, displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, remediationDescription: { + serializedName: "properties.remediationDescription", + type: { + name: "String" + } + } }) + } +}; +const CustomEntityStoreAssignment = { + type: { + name: "Composite", + className: "CustomEntityStoreAssignment", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, principal: { + serializedName: "properties.principal", + type: { + name: "String" + } + }, entityStoreDatabaseLink: { + serializedName: "properties.entityStoreDatabaseLink", + type: { + name: "String" + } + } }) + } +}; +const ComplianceResult = { + type: { + name: "Composite", + className: "ComplianceResult", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { resourceStatus: { + serializedName: "properties.resourceStatus", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const Pricing = { + type: { + name: "Composite", + className: "Pricing", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { pricingTier: { + serializedName: "properties.pricingTier", + type: { + name: "String" + } + }, subPlan: { + serializedName: "properties.subPlan", + type: { + name: "String" + } + }, freeTrialRemainingTime: { + serializedName: "properties.freeTrialRemainingTime", + readOnly: true, + type: { + name: "TimeSpan" + } + } }) + } +}; +const AdvancedThreatProtectionSetting = { + type: { + name: "Composite", + className: "AdvancedThreatProtectionSetting", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { isEnabled: { + serializedName: "properties.isEnabled", + type: { + name: "Boolean" + } + } }) + } +}; +const DeviceSecurityGroup = { + type: { + name: "Composite", + className: "DeviceSecurityGroup", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { thresholdRules: { + serializedName: "properties.thresholdRules", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ThresholdCustomAlertRule" + } + } + } + }, timeWindowRules: { + serializedName: "properties.timeWindowRules", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TimeWindowCustomAlertRule" + } + } + } + }, allowlistRules: { + serializedName: "properties.allowlistRules", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AllowlistCustomAlertRule" + } + } + } + }, denylistRules: { + serializedName: "properties.denylistRules", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DenylistCustomAlertRule" + } + } + } + } }) + } +}; +const IoTSecuritySolutionModel = { + type: { + name: "Composite", + className: "IoTSecuritySolutionModel", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), TagsResource.type.modelProperties), { location: { + serializedName: "location", + type: { + name: "String" + } + }, systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, workspace: { + serializedName: "properties.workspace", + type: { + name: "String" + } + }, displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, status: { + defaultValue: "Enabled", + serializedName: "properties.status", + type: { + name: "String" + } + }, export: { + serializedName: "properties.export", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, disabledDataSources: { + serializedName: "properties.disabledDataSources", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, iotHubs: { + serializedName: "properties.iotHubs", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, userDefinedResources: { + serializedName: "properties.userDefinedResources", + type: { + name: "Composite", + className: "UserDefinedResourcesProperties" + } + }, autoDiscoveredResources: { + serializedName: "properties.autoDiscoveredResources", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, recommendationsConfiguration: { + serializedName: "properties.recommendationsConfiguration", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RecommendationConfigurationProperties" + } + } + } + }, unmaskedIpLoggingStatus: { + defaultValue: "Disabled", + serializedName: "properties.unmaskedIpLoggingStatus", + type: { + name: "String" + } + }, additionalWorkspaces: { + serializedName: "properties.additionalWorkspaces", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AdditionalWorkspacesProperties" + } + } + } + } }) + } +}; +const IoTSecuritySolutionAnalyticsModel = { + type: { + name: "Composite", + className: "IoTSecuritySolutionAnalyticsModel", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { metrics: { + serializedName: "properties.metrics", + type: { + name: "Composite", + className: "IoTSeverityMetrics" + } + }, unhealthyDeviceCount: { + serializedName: "properties.unhealthyDeviceCount", + readOnly: true, + type: { + name: "Number" + } + }, devicesMetrics: { + serializedName: "properties.devicesMetrics", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem" + } + } + } + }, topAlertedDevices: { + serializedName: "properties.topAlertedDevices", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecurityAlertedDevice" + } + } + } + }, mostPrevalentDeviceAlerts: { + serializedName: "properties.mostPrevalentDeviceAlerts", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecurityDeviceAlert" + } + } + } + }, mostPrevalentDeviceRecommendations: { + serializedName: "properties.mostPrevalentDeviceRecommendations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecurityDeviceRecommendation" + } + } + } + } }) + } +}; +const IoTSecurityAggregatedAlert = { + type: { + name: "Composite", + className: "IoTSecurityAggregatedAlert", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), TagsResource.type.modelProperties), { alertType: { + serializedName: "properties.alertType", + readOnly: true, + type: { + name: "String" + } + }, alertDisplayName: { + serializedName: "properties.alertDisplayName", + readOnly: true, + type: { + name: "String" + } + }, aggregatedDateUtc: { + serializedName: "properties.aggregatedDateUtc", + readOnly: true, + type: { + name: "Date" + } + }, vendorName: { + serializedName: "properties.vendorName", + readOnly: true, + type: { + name: "String" + } + }, reportedSeverity: { + serializedName: "properties.reportedSeverity", + readOnly: true, + type: { + name: "String" + } + }, remediationSteps: { + serializedName: "properties.remediationSteps", + readOnly: true, + type: { + name: "String" + } + }, description: { + serializedName: "properties.description", + readOnly: true, + type: { + name: "String" + } + }, count: { + serializedName: "properties.count", + readOnly: true, + type: { + name: "Number" + } + }, effectedResourceType: { + serializedName: "properties.effectedResourceType", + readOnly: true, + type: { + name: "String" + } + }, systemSource: { + serializedName: "properties.systemSource", + readOnly: true, + type: { + name: "String" + } + }, actionTaken: { + serializedName: "properties.actionTaken", + readOnly: true, + type: { + name: "String" + } + }, logAnalyticsQuery: { + serializedName: "properties.logAnalyticsQuery", + readOnly: true, + type: { + name: "String" + } + }, topDevicesList: { + serializedName: "properties.topDevicesList", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "IoTSecurityAggregatedAlertPropertiesTopDevicesListItem" + } + } + } + } }) + } +}; +const IoTSecurityAggregatedRecommendation = { + type: { + name: "Composite", + className: "IoTSecurityAggregatedRecommendation", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), TagsResource.type.modelProperties), { recommendationName: { + serializedName: "properties.recommendationName", + type: { + name: "String" + } + }, recommendationDisplayName: { + serializedName: "properties.recommendationDisplayName", + readOnly: true, + type: { + name: "String" + } + }, description: { + serializedName: "properties.description", + readOnly: true, + type: { + name: "String" + } + }, recommendationTypeId: { + serializedName: "properties.recommendationTypeId", + readOnly: true, + type: { + name: "String" + } + }, detectedBy: { + serializedName: "properties.detectedBy", + readOnly: true, + type: { + name: "String" + } + }, remediationSteps: { + serializedName: "properties.remediationSteps", + readOnly: true, + type: { + name: "String" + } + }, reportedSeverity: { + serializedName: "properties.reportedSeverity", + readOnly: true, + type: { + name: "String" + } + }, healthyDevices: { + serializedName: "properties.healthyDevices", + readOnly: true, + type: { + name: "Number" + } + }, unhealthyDeviceCount: { + serializedName: "properties.unhealthyDeviceCount", + readOnly: true, + type: { + name: "Number" + } + }, logAnalyticsQuery: { + serializedName: "properties.logAnalyticsQuery", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const AscLocation = { + type: { + name: "Composite", + className: "AscLocation", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { properties: { + serializedName: "properties", + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + } }) + } +}; +const SecurityTask = { + type: { + name: "Composite", + className: "SecurityTask", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { state: { + serializedName: "properties.state", + readOnly: true, + type: { + name: "String" + } + }, creationTimeUtc: { + serializedName: "properties.creationTimeUtc", + readOnly: true, + type: { + name: "DateTime" + } + }, securityTaskParameters: { + serializedName: "properties.securityTaskParameters", + type: { + name: "Composite", + className: "SecurityTaskParameters" + } + }, lastStateChangeTimeUtc: { + serializedName: "properties.lastStateChangeTimeUtc", + readOnly: true, + type: { + name: "DateTime" + } + }, subState: { + serializedName: "properties.subState", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const AutoProvisioningSetting = { + type: { + name: "Composite", + className: "AutoProvisioningSetting", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { autoProvision: { + serializedName: "properties.autoProvision", + type: { + name: "String" + } + } }) + } +}; +const Compliance = { + type: { + name: "Composite", + className: "Compliance", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { assessmentTimestampUtcDate: { + serializedName: "properties.assessmentTimestampUtcDate", + readOnly: true, + type: { + name: "DateTime" + } + }, resourceCount: { + serializedName: "properties.resourceCount", + readOnly: true, + type: { + name: "Number" + } + }, assessmentResult: { + serializedName: "properties.assessmentResult", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ComplianceSegment" + } + } + } + } }) + } +}; +const InformationProtectionPolicy = { + type: { + name: "Composite", + className: "InformationProtectionPolicy", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { lastModifiedUtc: { + serializedName: "properties.lastModifiedUtc", + readOnly: true, + type: { + name: "DateTime" + } + }, version: { + serializedName: "properties.version", + readOnly: true, + type: { + name: "String" + } + }, labels: { + serializedName: "properties.labels", + type: { + name: "Dictionary", + value: { type: { name: "Composite", className: "SensitivityLabel" } } + } + }, informationTypes: { + serializedName: "properties.informationTypes", + type: { + name: "Dictionary", + value: { type: { name: "Composite", className: "InformationType" } } + } + } }) + } +}; +const SecurityContact = { + type: { + name: "Composite", + className: "SecurityContact", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { email: { + serializedName: "properties.email", + type: { + name: "String" + } + }, phone: { + serializedName: "properties.phone", + type: { + name: "String" + } + }, alertNotifications: { + serializedName: "properties.alertNotifications", + type: { + name: "String" + } + }, alertsToAdmins: { + serializedName: "properties.alertsToAdmins", + type: { + name: "String" + } + } }) + } +}; +const WorkspaceSetting = { + type: { + name: "Composite", + className: "WorkspaceSetting", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { workspaceId: { + serializedName: "properties.workspaceId", + type: { + name: "String" + } + }, scope: { + serializedName: "properties.scope", + type: { + name: "String" + } + } }) + } +}; +const RegulatoryComplianceStandard = { + type: { + name: "Composite", + className: "RegulatoryComplianceStandard", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { state: { + serializedName: "properties.state", + type: { + name: "String" + } + }, passedControls: { + serializedName: "properties.passedControls", + readOnly: true, + type: { + name: "Number" + } + }, failedControls: { + serializedName: "properties.failedControls", + readOnly: true, + type: { + name: "Number" + } + }, skippedControls: { + serializedName: "properties.skippedControls", + readOnly: true, + type: { + name: "Number" + } + }, unsupportedControls: { + serializedName: "properties.unsupportedControls", + readOnly: true, + type: { + name: "Number" + } + } }) + } +}; +const RegulatoryComplianceControl = { + type: { + name: "Composite", + className: "RegulatoryComplianceControl", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { description: { + serializedName: "properties.description", + readOnly: true, + type: { + name: "String" + } + }, state: { + serializedName: "properties.state", + type: { + name: "String" + } + }, passedAssessments: { + serializedName: "properties.passedAssessments", + readOnly: true, + type: { + name: "Number" + } + }, failedAssessments: { + serializedName: "properties.failedAssessments", + readOnly: true, + type: { + name: "Number" + } + }, skippedAssessments: { + serializedName: "properties.skippedAssessments", + readOnly: true, + type: { + name: "Number" + } + } }) + } +}; +const RegulatoryComplianceAssessment = { + type: { + name: "Composite", + className: "RegulatoryComplianceAssessment", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { description: { + serializedName: "properties.description", + readOnly: true, + type: { + name: "String" + } + }, assessmentType: { + serializedName: "properties.assessmentType", + readOnly: true, + type: { + name: "String" + } + }, assessmentDetailsLink: { + serializedName: "properties.assessmentDetailsLink", + readOnly: true, + type: { + name: "String" + } + }, state: { + serializedName: "properties.state", + type: { + name: "String" + } + }, passedResources: { + serializedName: "properties.passedResources", + readOnly: true, + type: { + name: "Number" + } + }, failedResources: { + serializedName: "properties.failedResources", + readOnly: true, + type: { + name: "Number" + } + }, skippedResources: { + serializedName: "properties.skippedResources", + readOnly: true, + type: { + name: "Number" + } + }, unsupportedResources: { + serializedName: "properties.unsupportedResources", + readOnly: true, + type: { + name: "Number" + } + } }) + } +}; +const SecuritySubAssessment = { + type: { + name: "Composite", + className: "SecuritySubAssessment", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { idPropertiesId: { + serializedName: "properties.id", + readOnly: true, + type: { + name: "String" + } + }, displayName: { + serializedName: "properties.displayName", + readOnly: true, + type: { + name: "String" + } + }, status: { + serializedName: "properties.status", + type: { + name: "Composite", + className: "SubAssessmentStatus" + } + }, remediation: { + serializedName: "properties.remediation", + readOnly: true, + type: { + name: "String" + } + }, impact: { + serializedName: "properties.impact", + readOnly: true, + type: { + name: "String" + } + }, category: { + serializedName: "properties.category", + readOnly: true, + type: { + name: "String" + } + }, description: { + serializedName: "properties.description", + readOnly: true, + type: { + name: "String" + } + }, timeGenerated: { + serializedName: "properties.timeGenerated", + readOnly: true, + type: { + name: "DateTime" + } + }, resourceDetails: { + serializedName: "properties.resourceDetails", + type: { + name: "Composite", + className: "ResourceDetails" + } + }, additionalData: { + serializedName: "properties.additionalData", + type: { + name: "Composite", + className: "AdditionalData" + } + } }) + } +}; +const TrackedResource = { + type: { + name: "Composite", + className: "TrackedResource", + modelProperties: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), AzureTrackedResourceLocation.type.modelProperties), KindAutoGenerated.type.modelProperties), ETag.type.modelProperties), Tags.type.modelProperties) + } +}; +const AlertsSuppressionRule = { + type: { + name: "Composite", + className: "AlertsSuppressionRule", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { alertType: { + serializedName: "properties.alertType", + type: { + name: "String" + } + }, lastModifiedUtc: { + serializedName: "properties.lastModifiedUtc", + readOnly: true, + type: { + name: "DateTime" + } + }, expirationDateUtc: { + serializedName: "properties.expirationDateUtc", + type: { + name: "DateTime" + } + }, reason: { + serializedName: "properties.reason", + type: { + name: "String" + } + }, state: { + serializedName: "properties.state", + type: { + name: "Enum", + allowedValues: ["Enabled", "Disabled", "Expired"] + } + }, comment: { + serializedName: "properties.comment", + type: { + name: "String" + } + }, suppressionAlertsScope: { + serializedName: "properties.suppressionAlertsScope", + type: { + name: "Composite", + className: "SuppressionAlertsScope" + } + } }) + } +}; +const ServerVulnerabilityAssessment = { + type: { + name: "Composite", + className: "ServerVulnerabilityAssessment", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const SecurityAssessmentMetadataResponse = { + type: { + name: "Composite", + className: "SecurityAssessmentMetadataResponse", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, policyDefinitionId: { + serializedName: "properties.policyDefinitionId", + readOnly: true, + type: { + name: "String" + } + }, description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, remediationDescription: { + serializedName: "properties.remediationDescription", + type: { + name: "String" + } + }, categories: { + serializedName: "properties.categories", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, severity: { + serializedName: "properties.severity", + type: { + name: "String" + } + }, userImpact: { + serializedName: "properties.userImpact", + type: { + name: "String" + } + }, implementationEffort: { + serializedName: "properties.implementationEffort", + type: { + name: "String" + } + }, threats: { + serializedName: "properties.threats", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, preview: { + serializedName: "properties.preview", + type: { + name: "Boolean" + } + }, assessmentType: { + serializedName: "properties.assessmentType", + type: { + name: "String" + } + }, partnerData: { + serializedName: "properties.partnerData", + type: { + name: "Composite", + className: "SecurityAssessmentMetadataPartnerData" + } + }, publishDates: { + serializedName: "properties.publishDates", + type: { + name: "Composite", + className: "SecurityAssessmentMetadataPropertiesResponsePublishDates" + } + }, plannedDeprecationDate: { + constraints: { + Pattern: new RegExp("^[0-9]{2}\\/[0-9]{4}$") + }, + serializedName: "properties.plannedDeprecationDate", + type: { + name: "String" + } + }, tactics: { + serializedName: "properties.tactics", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, techniques: { + serializedName: "properties.techniques", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } }) + } +}; +const SecurityAssessmentResponse = { + type: { + name: "Composite", + className: "SecurityAssessmentResponse", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { resourceDetails: { + serializedName: "properties.resourceDetails", + type: { + name: "Composite", + className: "ResourceDetails" + } + }, displayName: { + serializedName: "properties.displayName", + readOnly: true, + type: { + name: "String" + } + }, additionalData: { + serializedName: "properties.additionalData", + type: { + name: "Dictionary", + value: { type: { name: "String" } } + } + }, links: { + serializedName: "properties.links", + type: { + name: "Composite", + className: "AssessmentLinks" + } + }, metadata: { + serializedName: "properties.metadata", + type: { + name: "Composite", + className: "SecurityAssessmentMetadataProperties" + } + }, partnersData: { + serializedName: "properties.partnersData", + type: { + name: "Composite", + className: "SecurityAssessmentPartnerData" + } + }, status: { + serializedName: "properties.status", + type: { + name: "Composite", + className: "AssessmentStatusResponse" + } + } }) + } +}; +const SecurityAssessment = { + type: { + name: "Composite", + className: "SecurityAssessment", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { resourceDetails: { + serializedName: "properties.resourceDetails", + type: { + name: "Composite", + className: "ResourceDetails" + } + }, displayName: { + serializedName: "properties.displayName", + readOnly: true, + type: { + name: "String" + } + }, additionalData: { + serializedName: "properties.additionalData", + type: { + name: "Dictionary", + value: { type: { name: "String" } } + } + }, links: { + serializedName: "properties.links", + type: { + name: "Composite", + className: "AssessmentLinks" + } + }, metadata: { + serializedName: "properties.metadata", + type: { + name: "Composite", + className: "SecurityAssessmentMetadataProperties" + } + }, partnersData: { + serializedName: "properties.partnersData", + type: { + name: "Composite", + className: "SecurityAssessmentPartnerData" + } + }, status: { + serializedName: "properties.status", + type: { + name: "Composite", + className: "AssessmentStatus" + } + } }) + } +}; +const AdaptiveApplicationControlGroup = { + type: { + name: "Composite", + className: "AdaptiveApplicationControlGroup", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), Location.type.modelProperties), { enforcementMode: { + serializedName: "properties.enforcementMode", + type: { + name: "String" + } + }, protectionMode: { + serializedName: "properties.protectionMode", + type: { + name: "Composite", + className: "ProtectionMode" + } + }, configurationStatus: { + serializedName: "properties.configurationStatus", + readOnly: true, + type: { + name: "String" + } + }, recommendationStatus: { + serializedName: "properties.recommendationStatus", + readOnly: true, + type: { + name: "String" + } + }, issues: { + serializedName: "properties.issues", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AdaptiveApplicationControlIssueSummary" + } + } + } + }, sourceSystem: { + serializedName: "properties.sourceSystem", + readOnly: true, + type: { + name: "String" + } + }, vmRecommendations: { + serializedName: "properties.vmRecommendations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VmRecommendation" + } + } + } + }, pathRecommendations: { + serializedName: "properties.pathRecommendations", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PathRecommendation" + } + } + } + } }) + } +}; +const AdaptiveNetworkHardening = { + type: { + name: "Composite", + className: "AdaptiveNetworkHardening", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { rules: { + serializedName: "properties.rules", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Rule" + } + } + } + }, rulesCalculationTime: { + serializedName: "properties.rulesCalculationTime", + type: { + name: "DateTime" + } + }, effectiveNetworkSecurityGroups: { + serializedName: "properties.effectiveNetworkSecurityGroups", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "EffectiveNetworkSecurityGroups" + } + } + } + } }) + } +}; +const AllowedConnectionsResource = { + type: { + name: "Composite", + className: "AllowedConnectionsResource", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), Location.type.modelProperties), { calculatedDateTime: { + serializedName: "properties.calculatedDateTime", + readOnly: true, + type: { + name: "DateTime" + } + }, connectableResources: { + serializedName: "properties.connectableResources", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ConnectableResource" + } + } + } + } }) + } +}; +const TopologyResource = { + type: { + name: "Composite", + className: "TopologyResource", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), Location.type.modelProperties), { calculatedDateTime: { + serializedName: "properties.calculatedDateTime", + readOnly: true, + type: { + name: "DateTime" + } + }, topologyResources: { + serializedName: "properties.topologyResources", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "TopologySingleResource" + } + } + } + } }) + } +}; +const JitNetworkAccessPolicy = { + type: { + name: "Composite", + className: "JitNetworkAccessPolicy", + modelProperties: Object.assign(Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), KindAutoGenerated.type.modelProperties), Location.type.modelProperties), { virtualMachines: { + serializedName: "properties.virtualMachines", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "JitNetworkAccessPolicyVirtualMachine" + } + } + } + }, requests: { + serializedName: "properties.requests", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "JitNetworkAccessRequest" + } + } + } + }, provisioningState: { + serializedName: "properties.provisioningState", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const DiscoveredSecuritySolution = { + type: { + name: "Composite", + className: "DiscoveredSecuritySolution", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), Location.type.modelProperties), { securityFamily: { + serializedName: "properties.securityFamily", + required: true, + type: { + name: "String" + } + }, offer: { + serializedName: "properties.offer", + required: true, + type: { + name: "String" + } + }, publisher: { + serializedName: "properties.publisher", + required: true, + type: { + name: "String" + } + }, sku: { + serializedName: "properties.sku", + required: true, + type: { + name: "String" + } + } }) + } +}; +const SecuritySolutionsReferenceData = { + type: { + name: "Composite", + className: "SecuritySolutionsReferenceData", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), Location.type.modelProperties), { securityFamily: { + serializedName: "properties.securityFamily", + required: true, + type: { + name: "String" + } + }, alertVendorName: { + serializedName: "properties.alertVendorName", + required: true, + type: { + name: "String" + } + }, packageInfoUrl: { + serializedName: "properties.packageInfoUrl", + required: true, + type: { + name: "String" + } + }, productName: { + serializedName: "properties.productName", + required: true, + type: { + name: "String" + } + }, publisher: { + serializedName: "properties.publisher", + required: true, + type: { + name: "String" + } + }, publisherDisplayName: { + serializedName: "properties.publisherDisplayName", + required: true, + type: { + name: "String" + } + }, template: { + serializedName: "properties.template", + required: true, + type: { + name: "String" + } + } }) + } +}; +const ExternalSecuritySolution = { + serializedName: "ExternalSecuritySolution", + type: { + name: "Composite", + className: "ExternalSecuritySolution", + uberParent: "Resource", + polymorphicDiscriminator: Resource.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), ExternalSecuritySolutionKindAutoGenerated.type.modelProperties), Location.type.modelProperties) + } +}; +const SecureScoreItem = { + type: { + name: "Composite", + className: "SecureScoreItem", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { displayName: { + serializedName: "properties.displayName", + readOnly: true, + type: { + name: "String" + } + }, weight: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "properties.weight", + readOnly: true, + type: { + name: "Number" + } + }, max: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "properties.score.max", + readOnly: true, + type: { + name: "Number" + } + }, current: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "properties.score.current", + readOnly: true, + type: { + name: "Number" + } + }, percentage: { + constraints: { + InclusiveMaximum: 1, + InclusiveMinimum: 0 + }, + serializedName: "properties.score.percentage", + readOnly: true, + type: { + name: "Number" + } + } }) + } +}; +const SecureScoreControlDefinitionItem = { + type: { + name: "Composite", + className: "SecureScoreControlDefinitionItem", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { displayName: { + serializedName: "properties.displayName", + readOnly: true, + type: { + name: "String" + } + }, description: { + constraints: { + MaxLength: 256 + }, + serializedName: "properties.description", + readOnly: true, + type: { + name: "String" + } + }, maxScore: { + constraints: { + InclusiveMaximum: 10, + InclusiveMinimum: 0 + }, + serializedName: "properties.maxScore", + readOnly: true, + type: { + name: "Number" + } + }, source: { + serializedName: "properties.source", + type: { + name: "Composite", + className: "SecureScoreControlDefinitionSource" + } + }, assessmentDefinitions: { + serializedName: "properties.assessmentDefinitions", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AzureResourceLink" + } + } + } + } }) + } +}; +const SecureScoreControlDetails = { + type: { + name: "Composite", + className: "SecureScoreControlDetails", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { displayName: { + serializedName: "properties.displayName", + readOnly: true, + type: { + name: "String" + } + }, healthyResourceCount: { + serializedName: "properties.healthyResourceCount", + readOnly: true, + type: { + name: "Number" + } + }, unhealthyResourceCount: { + serializedName: "properties.unhealthyResourceCount", + readOnly: true, + type: { + name: "Number" + } + }, notApplicableResourceCount: { + serializedName: "properties.notApplicableResourceCount", + readOnly: true, + type: { + name: "Number" + } + }, weight: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "properties.weight", + readOnly: true, + type: { + name: "Number" + } + }, definition: { + serializedName: "properties.definition", + type: { + name: "Composite", + className: "SecureScoreControlDefinitionItem" + } + }, max: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "properties.score.max", + readOnly: true, + type: { + name: "Number" + } + }, current: { + constraints: { + InclusiveMinimum: 0 + }, + serializedName: "properties.score.current", + readOnly: true, + type: { + name: "Number" + } + }, percentage: { + constraints: { + InclusiveMaximum: 1, + InclusiveMinimum: 0 + }, + serializedName: "properties.score.percentage", + readOnly: true, + type: { + name: "Number" + } + } }) + } +}; +const SecuritySolution = { + type: { + name: "Composite", + className: "SecuritySolution", + modelProperties: Object.assign(Object.assign(Object.assign({}, Resource.type.modelProperties), Location.type.modelProperties), { securityFamily: { + serializedName: "properties.securityFamily", + type: { + name: "String" + } + }, provisioningState: { + serializedName: "properties.provisioningState", + type: { + name: "String" + } + }, template: { + serializedName: "properties.template", + type: { + name: "String" + } + }, protectionStatus: { + serializedName: "properties.protectionStatus", + type: { + name: "String" + } + } }) + } +}; +const ConnectorSetting = { + type: { + name: "Composite", + className: "ConnectorSetting", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { hybridComputeSettings: { + serializedName: "properties.hybridComputeSettings", + type: { + name: "Composite", + className: "HybridComputeSettingsProperties" + } + }, authenticationDetails: { + serializedName: "properties.authenticationDetails", + type: { + name: "Composite", + className: "AuthenticationDetailsProperties" + } + } }) + } +}; +const Scan = { + type: { + name: "Composite", + className: "Scan", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "ScanProperties" + } + } }) + } +}; +const ScanResult = { + type: { + name: "Composite", + className: "ScanResult", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "ScanResultProperties" + } + } }) + } +}; +const RuleResults = { + type: { + name: "Composite", + className: "RuleResults", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "RuleResultsProperties" + } + } }) + } +}; +const Alert = { + type: { + name: "Composite", + className: "Alert", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { alertType: { + serializedName: "properties.alertType", + readOnly: true, + type: { + name: "String" + } + }, systemAlertId: { + serializedName: "properties.systemAlertId", + readOnly: true, + type: { + name: "String" + } + }, productComponentName: { + serializedName: "properties.productComponentName", + readOnly: true, + type: { + name: "String" + } + }, alertDisplayName: { + serializedName: "properties.alertDisplayName", + readOnly: true, + type: { + name: "String" + } + }, description: { + serializedName: "properties.description", + readOnly: true, + type: { + name: "String" + } + }, severity: { + serializedName: "properties.severity", + readOnly: true, + type: { + name: "String" + } + }, intent: { + serializedName: "properties.intent", + readOnly: true, + type: { + name: "String" + } + }, startTimeUtc: { + serializedName: "properties.startTimeUtc", + readOnly: true, + type: { + name: "DateTime" + } + }, endTimeUtc: { + serializedName: "properties.endTimeUtc", + readOnly: true, + type: { + name: "DateTime" + } + }, resourceIdentifiers: { + serializedName: "properties.resourceIdentifiers", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "ResourceIdentifier" + } + } + } + }, remediationSteps: { + serializedName: "properties.remediationSteps", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, vendorName: { + serializedName: "properties.vendorName", + readOnly: true, + type: { + name: "String" + } + }, status: { + serializedName: "properties.status", + readOnly: true, + type: { + name: "String" + } + }, extendedLinks: { + serializedName: "properties.extendedLinks", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Dictionary", + value: { type: { name: "String" } } + } + } + } + }, alertUri: { + serializedName: "properties.alertUri", + readOnly: true, + type: { + name: "String" + } + }, timeGeneratedUtc: { + serializedName: "properties.timeGeneratedUtc", + readOnly: true, + type: { + name: "DateTime" + } + }, productName: { + serializedName: "properties.productName", + readOnly: true, + type: { + name: "String" + } + }, processingEndTimeUtc: { + serializedName: "properties.processingEndTimeUtc", + readOnly: true, + type: { + name: "DateTime" + } + }, entities: { + serializedName: "properties.entities", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AlertEntity" + } + } + } + }, isIncident: { + serializedName: "properties.isIncident", + readOnly: true, + type: { + name: "Boolean" + } + }, correlationKey: { + serializedName: "properties.correlationKey", + readOnly: true, + type: { + name: "String" + } + }, extendedProperties: { + serializedName: "properties.extendedProperties", + type: { + name: "Dictionary", + value: { type: { name: "String" } } + } + }, compromisedEntity: { + serializedName: "properties.compromisedEntity", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const Setting = { + serializedName: "Setting", + type: { + name: "Composite", + className: "Setting", + uberParent: "Resource", + polymorphicDiscriminator: { + serializedName: "kind", + clientName: "kind" + }, + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { kind: { + serializedName: "kind", + required: true, + type: { + name: "String" + } + } }) + } +}; +const IngestionSetting = { + type: { + name: "Composite", + className: "IngestionSetting", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { properties: { + serializedName: "properties", + type: { + name: "Dictionary", + value: { type: { name: "any" } } + } + } }) + } +}; +const Software = { + type: { + name: "Composite", + className: "Software", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { deviceId: { + serializedName: "properties.deviceId", + type: { + name: "String" + } + }, osPlatform: { + serializedName: "properties.osPlatform", + type: { + name: "String" + } + }, vendor: { + serializedName: "properties.vendor", + type: { + name: "String" + } + }, softwareName: { + serializedName: "properties.softwareName", + type: { + name: "String" + } + }, version: { + serializedName: "properties.version", + type: { + name: "String" + } + }, endOfSupportStatus: { + serializedName: "properties.endOfSupportStatus", + type: { + name: "String" + } + }, endOfSupportDate: { + serializedName: "properties.endOfSupportDate", + type: { + name: "String" + } + }, numberOfKnownVulnerabilities: { + serializedName: "properties.numberOfKnownVulnerabilities", + type: { + name: "Number" + } + }, firstSeenAt: { + serializedName: "properties.firstSeenAt", + type: { + name: "String" + } + } }) + } +}; +const SecurityAssessmentMetadata = { + type: { + name: "Composite", + className: "SecurityAssessmentMetadata", + modelProperties: Object.assign(Object.assign({}, Resource.type.modelProperties), { displayName: { + serializedName: "properties.displayName", + type: { + name: "String" + } + }, policyDefinitionId: { + serializedName: "properties.policyDefinitionId", + readOnly: true, + type: { + name: "String" + } + }, description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, remediationDescription: { + serializedName: "properties.remediationDescription", + type: { + name: "String" + } + }, categories: { + serializedName: "properties.categories", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, severity: { + serializedName: "properties.severity", + type: { + name: "String" + } + }, userImpact: { + serializedName: "properties.userImpact", + type: { + name: "String" + } + }, implementationEffort: { + serializedName: "properties.implementationEffort", + type: { + name: "String" + } + }, threats: { + serializedName: "properties.threats", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, preview: { + serializedName: "properties.preview", + type: { + name: "Boolean" + } + }, assessmentType: { + serializedName: "properties.assessmentType", + type: { + name: "String" + } + }, partnerData: { + serializedName: "properties.partnerData", + type: { + name: "Composite", + className: "SecurityAssessmentMetadataPartnerData" + } + } }) + } +}; +const ThresholdCustomAlertRule = { + serializedName: "ThresholdCustomAlertRule", + type: { + name: "Composite", + className: "ThresholdCustomAlertRule", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: { + serializedName: "ruleType", + clientName: "ruleType" + }, + modelProperties: Object.assign(Object.assign({}, CustomAlertRule.type.modelProperties), { minThreshold: { + serializedName: "minThreshold", + required: true, + type: { + name: "Number" + } + }, maxThreshold: { + serializedName: "maxThreshold", + required: true, + type: { + name: "Number" + } + } }) + } +}; +const ListCustomAlertRule = { + serializedName: "ListCustomAlertRule", + type: { + name: "Composite", + className: "ListCustomAlertRule", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: { + serializedName: "ruleType", + clientName: "ruleType" + }, + modelProperties: Object.assign(Object.assign({}, CustomAlertRule.type.modelProperties), { valueType: { + serializedName: "valueType", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const UpdateIotSecuritySolutionData = { + type: { + name: "Composite", + className: "UpdateIotSecuritySolutionData", + modelProperties: Object.assign(Object.assign({}, TagsResource.type.modelProperties), { userDefinedResources: { + serializedName: "properties.userDefinedResources", + type: { + name: "Composite", + className: "UserDefinedResourcesProperties" + } + }, recommendationsConfiguration: { + serializedName: "properties.recommendationsConfiguration", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "RecommendationConfigurationProperties" + } + } + } + } }) + } +}; +const AzureResourceDetails = { + serializedName: "Azure", + type: { + name: "Composite", + className: "AzureResourceDetails", + uberParent: "ResourceDetails", + polymorphicDiscriminator: ResourceDetails.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, ResourceDetails.type.modelProperties), { id: { + serializedName: "id", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const OnPremiseResourceDetails = { + serializedName: "OnPremise", + type: { + name: "Composite", + className: "OnPremiseResourceDetails", + uberParent: "ResourceDetails", + polymorphicDiscriminator: { + serializedName: "source", + clientName: "source" + }, + modelProperties: Object.assign(Object.assign({}, ResourceDetails.type.modelProperties), { workspaceId: { + serializedName: "workspaceId", + required: true, + type: { + name: "String" + } + }, vmuuid: { + serializedName: "vmuuid", + required: true, + type: { + name: "String" + } + }, sourceComputerId: { + serializedName: "sourceComputerId", + required: true, + type: { + name: "String" + } + }, machineName: { + serializedName: "machineName", + required: true, + type: { + name: "String" + } + } }) + } +}; +const SqlServerVulnerabilityProperties = { + serializedName: "SqlServerVulnerability", + type: { + name: "Composite", + className: "SqlServerVulnerabilityProperties", + uberParent: "AdditionalData", + polymorphicDiscriminator: AdditionalData.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AdditionalData.type.modelProperties), { type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, query: { + serializedName: "query", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const ContainerRegistryVulnerabilityProperties = { + serializedName: "ContainerRegistryVulnerability", + type: { + name: "Composite", + className: "ContainerRegistryVulnerabilityProperties", + uberParent: "AdditionalData", + polymorphicDiscriminator: AdditionalData.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AdditionalData.type.modelProperties), { type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, cvss: { + serializedName: "cvss", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "Composite", className: "Cvss" } } + } + }, patchable: { + serializedName: "patchable", + readOnly: true, + type: { + name: "Boolean" + } + }, cve: { + serializedName: "cve", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Cve" + } + } + } + }, publishedTime: { + serializedName: "publishedTime", + readOnly: true, + type: { + name: "DateTime" + } + }, vendorReferences: { + serializedName: "vendorReferences", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VendorReference" + } + } + } + }, repositoryName: { + serializedName: "repositoryName", + readOnly: true, + type: { + name: "String" + } + }, imageDigest: { + serializedName: "imageDigest", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const ServerVulnerabilityProperties = { + serializedName: "ServerVulnerabilityAssessment", + type: { + name: "Composite", + className: "ServerVulnerabilityProperties", + uberParent: "AdditionalData", + polymorphicDiscriminator: AdditionalData.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AdditionalData.type.modelProperties), { type: { + serializedName: "type", + readOnly: true, + type: { + name: "String" + } + }, cvss: { + serializedName: "cvss", + readOnly: true, + type: { + name: "Dictionary", + value: { type: { name: "Composite", className: "Cvss" } } + } + }, patchable: { + serializedName: "patchable", + readOnly: true, + type: { + name: "Boolean" + } + }, cve: { + serializedName: "cve", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "Cve" + } + } + } + }, threat: { + serializedName: "threat", + readOnly: true, + type: { + name: "String" + } + }, publishedTime: { + serializedName: "publishedTime", + readOnly: true, + type: { + name: "DateTime" + } + }, vendorReferences: { + serializedName: "vendorReferences", + readOnly: true, + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "VendorReference" + } + } + } + } }) + } +}; +const AutomationActionLogicApp = { + serializedName: "LogicApp", + type: { + name: "Composite", + className: "AutomationActionLogicApp", + uberParent: "AutomationAction", + polymorphicDiscriminator: AutomationAction.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AutomationAction.type.modelProperties), { logicAppResourceId: { + serializedName: "logicAppResourceId", + type: { + name: "String" + } + }, uri: { + serializedName: "uri", + type: { + name: "String" + } + } }) + } +}; +const AutomationActionEventHub = { + serializedName: "EventHub", + type: { + name: "Composite", + className: "AutomationActionEventHub", + uberParent: "AutomationAction", + polymorphicDiscriminator: AutomationAction.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AutomationAction.type.modelProperties), { eventHubResourceId: { + serializedName: "eventHubResourceId", + type: { + name: "String" + } + }, sasPolicyName: { + serializedName: "sasPolicyName", + readOnly: true, + type: { + name: "String" + } + }, connectionString: { + serializedName: "connectionString", + type: { + name: "String" + } + } }) + } +}; +const AutomationActionWorkspace = { + serializedName: "Workspace", + type: { + name: "Composite", + className: "AutomationActionWorkspace", + uberParent: "AutomationAction", + polymorphicDiscriminator: AutomationAction.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AutomationAction.type.modelProperties), { workspaceResourceId: { + serializedName: "workspaceResourceId", + type: { + name: "String" + } + } }) + } +}; +const SecurityAssessmentMetadataPropertiesResponse = { + type: { + name: "Composite", + className: "SecurityAssessmentMetadataPropertiesResponse", + modelProperties: Object.assign(Object.assign({}, SecurityAssessmentMetadataProperties.type.modelProperties), { publishDates: { + serializedName: "publishDates", + type: { + name: "Composite", + className: "SecurityAssessmentMetadataPropertiesResponsePublishDates" + } + }, plannedDeprecationDate: { + constraints: { + Pattern: new RegExp("^[0-9]{2}\\/[0-9]{4}$") + }, + serializedName: "plannedDeprecationDate", + type: { + name: "String" + } + }, tactics: { + serializedName: "tactics", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, techniques: { + serializedName: "techniques", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } }) + } +}; +const AssessmentStatusResponse = { + type: { + name: "Composite", + className: "AssessmentStatusResponse", + modelProperties: Object.assign(Object.assign({}, AssessmentStatus.type.modelProperties), { firstEvaluationDate: { + serializedName: "firstEvaluationDate", + readOnly: true, + type: { + name: "DateTime" + } + }, statusChangeDate: { + serializedName: "statusChangeDate", + readOnly: true, + type: { + name: "DateTime" + } + } }) + } +}; +const SecurityAssessmentPropertiesResponse = { + type: { + name: "Composite", + className: "SecurityAssessmentPropertiesResponse", + modelProperties: Object.assign(Object.assign({}, SecurityAssessmentPropertiesBase.type.modelProperties), { status: { + serializedName: "status", + type: { + name: "Composite", + className: "AssessmentStatusResponse" + } + } }) + } +}; +const SecurityAssessmentProperties = { + type: { + name: "Composite", + className: "SecurityAssessmentProperties", + modelProperties: Object.assign(Object.assign({}, SecurityAssessmentPropertiesBase.type.modelProperties), { status: { + serializedName: "status", + type: { + name: "Composite", + className: "AssessmentStatus" + } + } }) + } +}; +const AwsCredsAuthenticationDetailsProperties = { + serializedName: "awsCreds", + type: { + name: "Composite", + className: "AwsCredsAuthenticationDetailsProperties", + uberParent: "AuthenticationDetailsProperties", + polymorphicDiscriminator: AuthenticationDetailsProperties.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AuthenticationDetailsProperties.type.modelProperties), { accountId: { + serializedName: "accountId", + readOnly: true, + type: { + name: "String" + } + }, awsAccessKeyId: { + serializedName: "awsAccessKeyId", + required: true, + type: { + name: "String" + } + }, awsSecretAccessKey: { + serializedName: "awsSecretAccessKey", + required: true, + type: { + name: "String" + } + } }) + } +}; +const AwAssumeRoleAuthenticationDetailsProperties = { + serializedName: "awsAssumeRole", + type: { + name: "Composite", + className: "AwAssumeRoleAuthenticationDetailsProperties", + uberParent: "AuthenticationDetailsProperties", + polymorphicDiscriminator: AuthenticationDetailsProperties.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AuthenticationDetailsProperties.type.modelProperties), { accountId: { + serializedName: "accountId", + readOnly: true, + type: { + name: "String" + } + }, awsAssumeRoleArn: { + serializedName: "awsAssumeRoleArn", + required: true, + type: { + name: "String" + } + }, awsExternalId: { + serializedName: "awsExternalId", + required: true, + type: { + name: "String" + } + } }) + } +}; +const GcpCredentialsDetailsProperties = { + serializedName: "gcpCredentials", + type: { + name: "Composite", + className: "GcpCredentialsDetailsProperties", + uberParent: "AuthenticationDetailsProperties", + polymorphicDiscriminator: AuthenticationDetailsProperties.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AuthenticationDetailsProperties.type.modelProperties), { organizationId: { + serializedName: "organizationId", + required: true, + type: { + name: "String" + } + }, type: { + serializedName: "type", + required: true, + type: { + name: "String" + } + }, projectId: { + serializedName: "projectId", + required: true, + type: { + name: "String" + } + }, privateKeyId: { + serializedName: "privateKeyId", + required: true, + type: { + name: "String" + } + }, privateKey: { + serializedName: "privateKey", + required: true, + type: { + name: "String" + } + }, clientEmail: { + serializedName: "clientEmail", + required: true, + type: { + name: "String" + } + }, clientId: { + serializedName: "clientId", + required: true, + type: { + name: "String" + } + }, authUri: { + serializedName: "authUri", + required: true, + type: { + name: "String" + } + }, tokenUri: { + serializedName: "tokenUri", + required: true, + type: { + name: "String" + } + }, authProviderX509CertUrl: { + serializedName: "authProviderX509CertUrl", + required: true, + type: { + name: "String" + } + }, clientX509CertUrl: { + serializedName: "clientX509CertUrl", + required: true, + type: { + name: "String" + } + } }) + } +}; +const AzureResourceIdentifier = { + serializedName: "AzureResource", + type: { + name: "Composite", + className: "AzureResourceIdentifier", + uberParent: "ResourceIdentifier", + polymorphicDiscriminator: ResourceIdentifier.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, ResourceIdentifier.type.modelProperties), { azureResourceId: { + serializedName: "azureResourceId", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const LogAnalyticsIdentifier = { + serializedName: "LogAnalytics", + type: { + name: "Composite", + className: "LogAnalyticsIdentifier", + uberParent: "ResourceIdentifier", + polymorphicDiscriminator: ResourceIdentifier.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, ResourceIdentifier.type.modelProperties), { workspaceId: { + serializedName: "workspaceId", + readOnly: true, + type: { + name: "String" + } + }, workspaceSubscriptionId: { + constraints: { + Pattern: new RegExp("^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$") + }, + serializedName: "workspaceSubscriptionId", + readOnly: true, + type: { + name: "String" + } + }, workspaceResourceGroup: { + serializedName: "workspaceResourceGroup", + readOnly: true, + type: { + name: "String" + } + }, agentId: { + serializedName: "agentId", + readOnly: true, + type: { + name: "String" + } + } }) + } +}; +const AlertSimulatorBundlesRequestProperties = { + serializedName: "Bundles", + type: { + name: "Composite", + className: "AlertSimulatorBundlesRequestProperties", + uberParent: "AlertSimulatorRequestProperties", + additionalProperties: { type: { name: "Object" } }, + polymorphicDiscriminator: AlertSimulatorRequestProperties.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, AlertSimulatorRequestProperties.type.modelProperties), { bundles: { + serializedName: "bundles", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } }) + } +}; +const CspmMonitorAwsOffering = { + serializedName: "CspmMonitorAws", + type: { + name: "Composite", + className: "CspmMonitorAwsOffering", + uberParent: "CloudOffering", + polymorphicDiscriminator: CloudOffering.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, CloudOffering.type.modelProperties), { nativeCloudConnection: { + serializedName: "nativeCloudConnection", + type: { + name: "Composite", + className: "CspmMonitorAwsOfferingNativeCloudConnection" + } + } }) + } +}; +const DefenderForContainersAwsOffering = { + serializedName: "DefenderForContainersAws", + type: { + name: "Composite", + className: "DefenderForContainersAwsOffering", + uberParent: "CloudOffering", + polymorphicDiscriminator: CloudOffering.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, CloudOffering.type.modelProperties), { kubernetesService: { + serializedName: "kubernetesService", + type: { + name: "Composite", + className: "DefenderForContainersAwsOfferingKubernetesService" + } + }, kubernetesScubaReader: { + serializedName: "kubernetesScubaReader", + type: { + name: "Composite", + className: "DefenderForContainersAwsOfferingKubernetesScubaReader" + } + }, cloudWatchToKinesis: { + serializedName: "cloudWatchToKinesis", + type: { + name: "Composite", + className: "DefenderForContainersAwsOfferingCloudWatchToKinesis" + } + }, kinesisToS3: { + serializedName: "kinesisToS3", + type: { + name: "Composite", + className: "DefenderForContainersAwsOfferingKinesisToS3" + } + } }) + } +}; +const DefenderForServersAwsOffering = { + serializedName: "DefenderForServersAws", + type: { + name: "Composite", + className: "DefenderForServersAwsOffering", + uberParent: "CloudOffering", + polymorphicDiscriminator: CloudOffering.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, CloudOffering.type.modelProperties), { defenderForServers: { + serializedName: "defenderForServers", + type: { + name: "Composite", + className: "DefenderForServersAwsOfferingDefenderForServers" + } + }, arcAutoProvisioning: { + serializedName: "arcAutoProvisioning", + type: { + name: "Composite", + className: "DefenderForServersAwsOfferingArcAutoProvisioning" + } + } }) + } +}; +const InformationProtectionAwsOffering = { + serializedName: "InformationProtectionAws", + type: { + name: "Composite", + className: "InformationProtectionAwsOffering", + uberParent: "CloudOffering", + polymorphicDiscriminator: CloudOffering.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, CloudOffering.type.modelProperties), { informationProtection: { + serializedName: "informationProtection", + type: { + name: "Composite", + className: "InformationProtectionAwsOfferingInformationProtection" + } + } }) + } +}; +const CefSolutionProperties = { + type: { + name: "Composite", + className: "CefSolutionProperties", + additionalProperties: { type: { name: "Object" } }, + modelProperties: Object.assign(Object.assign({}, ExternalSecuritySolutionProperties.type.modelProperties), { hostname: { + serializedName: "hostname", + type: { + name: "String" + } + }, agent: { + serializedName: "agent", + type: { + name: "String" + } + }, lastEventReceived: { + serializedName: "lastEventReceived", + type: { + name: "String" + } + } }) + } +}; +const AtaSolutionProperties = { + type: { + name: "Composite", + className: "AtaSolutionProperties", + additionalProperties: { type: { name: "Object" } }, + modelProperties: Object.assign(Object.assign({}, ExternalSecuritySolutionProperties.type.modelProperties), { lastEventReceived: { + serializedName: "lastEventReceived", + type: { + name: "String" + } + } }) + } +}; +const AadSolutionProperties = { + type: { + name: "Composite", + className: "AadSolutionProperties", + additionalProperties: { type: { name: "Object" } }, + modelProperties: Object.assign(Object.assign({}, ExternalSecuritySolutionProperties.type.modelProperties), AadConnectivityStateAutoGenerated.type.modelProperties) + } +}; +const Automation = { + type: { + name: "Composite", + className: "Automation", + modelProperties: Object.assign(Object.assign({}, TrackedResource.type.modelProperties), { description: { + serializedName: "properties.description", + type: { + name: "String" + } + }, isEnabled: { + serializedName: "properties.isEnabled", + type: { + name: "Boolean" + } + }, scopes: { + serializedName: "properties.scopes", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AutomationScope" + } + } + } + }, sources: { + serializedName: "properties.sources", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AutomationSource" + } + } + } + }, actions: { + serializedName: "properties.actions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AutomationAction" + } + } + } + } }) + } +}; +const SecurityConnector = { + type: { + name: "Composite", + className: "SecurityConnector", + modelProperties: Object.assign(Object.assign({}, TrackedResource.type.modelProperties), { systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, hierarchyIdentifier: { + serializedName: "properties.hierarchyIdentifier", + type: { + name: "String" + } + }, cloudName: { + serializedName: "properties.cloudName", + type: { + name: "String" + } + }, offerings: { + serializedName: "properties.offerings", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "CloudOffering" + } + } + } + }, organizationalData: { + serializedName: "properties.organizationalData", + type: { + name: "Composite", + className: "SecurityConnectorPropertiesOrganizationalData" + } + } }) + } +}; +const CefExternalSecuritySolution = { + serializedName: "CEF", + type: { + name: "Composite", + className: "CefExternalSecuritySolution", + uberParent: "Resource", + polymorphicDiscriminator: Resource.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, ExternalSecuritySolution.type.modelProperties), { properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "CefSolutionProperties" + } + } }) + } +}; +const AtaExternalSecuritySolution = { + serializedName: "ATA", + type: { + name: "Composite", + className: "AtaExternalSecuritySolution", + uberParent: "Resource", + polymorphicDiscriminator: Resource.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, ExternalSecuritySolution.type.modelProperties), { properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "AtaSolutionProperties" + } + } }) + } +}; +const AadExternalSecuritySolution = { + serializedName: "AAD", + type: { + name: "Composite", + className: "AadExternalSecuritySolution", + uberParent: "Resource", + polymorphicDiscriminator: Resource.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, ExternalSecuritySolution.type.modelProperties), { properties: { + serializedName: "properties", + type: { + name: "Composite", + className: "AadSolutionProperties" + } + } }) + } +}; +const DataExportSettings = { + serializedName: "DataExportSettings", + type: { + name: "Composite", + className: "DataExportSettings", + uberParent: "Resource", + polymorphicDiscriminator: Resource.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, Setting.type.modelProperties), { enabled: { + serializedName: "properties.enabled", + type: { + name: "Boolean" + } + } }) + } +}; +const AlertSyncSettings = { + serializedName: "AlertSyncSettings", + type: { + name: "Composite", + className: "AlertSyncSettings", + uberParent: "Resource", + polymorphicDiscriminator: Resource.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, Setting.type.modelProperties), { enabled: { + serializedName: "properties.enabled", + type: { + name: "Boolean" + } + } }) + } +}; +const TimeWindowCustomAlertRule = { + serializedName: "TimeWindowCustomAlertRule", + type: { + name: "Composite", + className: "TimeWindowCustomAlertRule", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: { + serializedName: "ruleType", + clientName: "ruleType" + }, + modelProperties: Object.assign(Object.assign({}, ThresholdCustomAlertRule.type.modelProperties), { timeWindowSize: { + serializedName: "timeWindowSize", + required: true, + type: { + name: "TimeSpan" + } + } }) + } +}; +const AllowlistCustomAlertRule = { + serializedName: "AllowlistCustomAlertRule", + type: { + name: "Composite", + className: "AllowlistCustomAlertRule", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: { + serializedName: "ruleType", + clientName: "ruleType" + }, + modelProperties: Object.assign(Object.assign({}, ListCustomAlertRule.type.modelProperties), { allowlistValues: { + serializedName: "allowlistValues", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } }) + } +}; +const DenylistCustomAlertRule = { + serializedName: "DenylistCustomAlertRule", + type: { + name: "Composite", + className: "DenylistCustomAlertRule", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, ListCustomAlertRule.type.modelProperties), { denylistValues: { + serializedName: "denylistValues", + required: true, + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } }) + } +}; +const OnPremiseSqlResourceDetails = { + serializedName: "OnPremiseSql", + type: { + name: "Composite", + className: "OnPremiseSqlResourceDetails", + uberParent: "ResourceDetails", + polymorphicDiscriminator: ResourceDetails.type.polymorphicDiscriminator, + modelProperties: Object.assign(Object.assign({}, OnPremiseResourceDetails.type.modelProperties), { serverName: { + serializedName: "serverName", + required: true, + type: { + name: "String" + } + }, databaseName: { + serializedName: "databaseName", + required: true, + type: { + name: "String" + } + } }) + } +}; +const ActiveConnectionsNotInAllowedRange = { + serializedName: "ActiveConnectionsNotInAllowedRange", + type: { + name: "Composite", + className: "ActiveConnectionsNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const AmqpC2DMessagesNotInAllowedRange = { + serializedName: "AmqpC2DMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "AmqpC2DMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const MqttC2DMessagesNotInAllowedRange = { + serializedName: "MqttC2DMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "MqttC2DMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const HttpC2DMessagesNotInAllowedRange = { + serializedName: "HttpC2DMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "HttpC2DMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const AmqpC2DRejectedMessagesNotInAllowedRange = { + serializedName: "AmqpC2DRejectedMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "AmqpC2DRejectedMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const MqttC2DRejectedMessagesNotInAllowedRange = { + serializedName: "MqttC2DRejectedMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "MqttC2DRejectedMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const HttpC2DRejectedMessagesNotInAllowedRange = { + serializedName: "HttpC2DRejectedMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "HttpC2DRejectedMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const AmqpD2CMessagesNotInAllowedRange = { + serializedName: "AmqpD2CMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "AmqpD2CMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const MqttD2CMessagesNotInAllowedRange = { + serializedName: "MqttD2CMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "MqttD2CMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const HttpD2CMessagesNotInAllowedRange = { + serializedName: "HttpD2CMessagesNotInAllowedRange", + type: { + name: "Composite", + className: "HttpD2CMessagesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const DirectMethodInvokesNotInAllowedRange = { + serializedName: "DirectMethodInvokesNotInAllowedRange", + type: { + name: "Composite", + className: "DirectMethodInvokesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const FailedLocalLoginsNotInAllowedRange = { + serializedName: "FailedLocalLoginsNotInAllowedRange", + type: { + name: "Composite", + className: "FailedLocalLoginsNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const FileUploadsNotInAllowedRange = { + serializedName: "FileUploadsNotInAllowedRange", + type: { + name: "Composite", + className: "FileUploadsNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const QueuePurgesNotInAllowedRange = { + serializedName: "QueuePurgesNotInAllowedRange", + type: { + name: "Composite", + className: "QueuePurgesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const TwinUpdatesNotInAllowedRange = { + serializedName: "TwinUpdatesNotInAllowedRange", + type: { + name: "Composite", + className: "TwinUpdatesNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const UnauthorizedOperationsNotInAllowedRange = { + serializedName: "UnauthorizedOperationsNotInAllowedRange", + type: { + name: "Composite", + className: "UnauthorizedOperationsNotInAllowedRange", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, TimeWindowCustomAlertRule.type.modelProperties) + } +}; +const ConnectionToIpNotAllowed = { + serializedName: "ConnectionToIpNotAllowed", + type: { + name: "Composite", + className: "ConnectionToIpNotAllowed", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, AllowlistCustomAlertRule.type.modelProperties) + } +}; +const ConnectionFromIpNotAllowed = { + serializedName: "ConnectionFromIpNotAllowed", + type: { + name: "Composite", + className: "ConnectionFromIpNotAllowed", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, AllowlistCustomAlertRule.type.modelProperties) + } +}; +const LocalUserNotAllowed = { + serializedName: "LocalUserNotAllowed", + type: { + name: "Composite", + className: "LocalUserNotAllowed", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, AllowlistCustomAlertRule.type.modelProperties) + } +}; +const ProcessNotAllowed = { + serializedName: "ProcessNotAllowed", + type: { + name: "Composite", + className: "ProcessNotAllowed", + uberParent: "CustomAlertRule", + polymorphicDiscriminator: CustomAlertRule.type.polymorphicDiscriminator, + modelProperties: Object.assign({}, AllowlistCustomAlertRule.type.modelProperties) + } +}; +let discriminators = { + CustomAlertRule: CustomAlertRule, + ResourceDetails: ResourceDetails, + AdditionalData: AdditionalData, + AutomationAction: AutomationAction, + AuthenticationDetailsProperties: AuthenticationDetailsProperties, + ResourceIdentifier: ResourceIdentifier, + AlertSimulatorRequestProperties: AlertSimulatorRequestProperties, + CloudOffering: CloudOffering, + "Resource.ExternalSecuritySolution": ExternalSecuritySolution, + "Resource.Setting": Setting, + "CustomAlertRule.ThresholdCustomAlertRule": ThresholdCustomAlertRule, + "CustomAlertRule.ListCustomAlertRule": ListCustomAlertRule, + "ResourceDetails.Azure": AzureResourceDetails, + "ResourceDetails.OnPremise": OnPremiseResourceDetails, + "AdditionalData.SqlServerVulnerability": SqlServerVulnerabilityProperties, + "AdditionalData.ContainerRegistryVulnerability": ContainerRegistryVulnerabilityProperties, + "AdditionalData.ServerVulnerabilityAssessment": ServerVulnerabilityProperties, + "AutomationAction.LogicApp": AutomationActionLogicApp, + "AutomationAction.EventHub": AutomationActionEventHub, + "AutomationAction.Workspace": AutomationActionWorkspace, + "AuthenticationDetailsProperties.awsCreds": AwsCredsAuthenticationDetailsProperties, + "AuthenticationDetailsProperties.awsAssumeRole": AwAssumeRoleAuthenticationDetailsProperties, + "AuthenticationDetailsProperties.gcpCredentials": GcpCredentialsDetailsProperties, + "ResourceIdentifier.AzureResource": AzureResourceIdentifier, + "ResourceIdentifier.LogAnalytics": LogAnalyticsIdentifier, + "AlertSimulatorRequestProperties.Bundles": AlertSimulatorBundlesRequestProperties, + "CloudOffering.CspmMonitorAws": CspmMonitorAwsOffering, + "CloudOffering.DefenderForContainersAws": DefenderForContainersAwsOffering, + "CloudOffering.DefenderForServersAws": DefenderForServersAwsOffering, + "CloudOffering.InformationProtectionAws": InformationProtectionAwsOffering, + "Resource.CEF": CefExternalSecuritySolution, + "Resource.ATA": AtaExternalSecuritySolution, + "Resource.AAD": AadExternalSecuritySolution, + "Resource.DataExportSettings": DataExportSettings, + "Resource.AlertSyncSettings": AlertSyncSettings, + "CustomAlertRule.TimeWindowCustomAlertRule": TimeWindowCustomAlertRule, + "CustomAlertRule.AllowlistCustomAlertRule": AllowlistCustomAlertRule, + "CustomAlertRule.DenylistCustomAlertRule": DenylistCustomAlertRule, + "ResourceDetails.OnPremiseSql": OnPremiseSqlResourceDetails, + "CustomAlertRule.ActiveConnectionsNotInAllowedRange": ActiveConnectionsNotInAllowedRange, + "CustomAlertRule.AmqpC2DMessagesNotInAllowedRange": AmqpC2DMessagesNotInAllowedRange, + "CustomAlertRule.MqttC2DMessagesNotInAllowedRange": MqttC2DMessagesNotInAllowedRange, + "CustomAlertRule.HttpC2DMessagesNotInAllowedRange": HttpC2DMessagesNotInAllowedRange, + "CustomAlertRule.AmqpC2DRejectedMessagesNotInAllowedRange": AmqpC2DRejectedMessagesNotInAllowedRange, + "CustomAlertRule.MqttC2DRejectedMessagesNotInAllowedRange": MqttC2DRejectedMessagesNotInAllowedRange, + "CustomAlertRule.HttpC2DRejectedMessagesNotInAllowedRange": HttpC2DRejectedMessagesNotInAllowedRange, + "CustomAlertRule.AmqpD2CMessagesNotInAllowedRange": AmqpD2CMessagesNotInAllowedRange, + "CustomAlertRule.MqttD2CMessagesNotInAllowedRange": MqttD2CMessagesNotInAllowedRange, + "CustomAlertRule.HttpD2CMessagesNotInAllowedRange": HttpD2CMessagesNotInAllowedRange, + "CustomAlertRule.DirectMethodInvokesNotInAllowedRange": DirectMethodInvokesNotInAllowedRange, + "CustomAlertRule.FailedLocalLoginsNotInAllowedRange": FailedLocalLoginsNotInAllowedRange, + "CustomAlertRule.FileUploadsNotInAllowedRange": FileUploadsNotInAllowedRange, + "CustomAlertRule.QueuePurgesNotInAllowedRange": QueuePurgesNotInAllowedRange, + "CustomAlertRule.TwinUpdatesNotInAllowedRange": TwinUpdatesNotInAllowedRange, + "CustomAlertRule.UnauthorizedOperationsNotInAllowedRange": UnauthorizedOperationsNotInAllowedRange, + "CustomAlertRule.ConnectionToIpNotAllowed": ConnectionToIpNotAllowed, + "CustomAlertRule.ConnectionFromIpNotAllowed": ConnectionFromIpNotAllowed, + "CustomAlertRule.LocalUserNotAllowed": LocalUserNotAllowed, + "CustomAlertRule.ProcessNotAllowed": ProcessNotAllowed +}; + +var Mappers = /*#__PURE__*/Object.freeze({ + __proto__: null, + MdeOnboardingDataList: MdeOnboardingDataList, + Resource: Resource, + CloudError: CloudError, + CloudErrorBody: CloudErrorBody, + ErrorAdditionalInfo: ErrorAdditionalInfo, + SystemData: SystemData, + CustomAssessmentAutomationsListResult: CustomAssessmentAutomationsListResult, + CustomEntityStoreAssignmentRequest: CustomEntityStoreAssignmentRequest, + CustomEntityStoreAssignmentsListResult: CustomEntityStoreAssignmentsListResult, + ComplianceResultList: ComplianceResultList, + PricingList: PricingList, + DeviceSecurityGroupList: DeviceSecurityGroupList, + CustomAlertRule: CustomAlertRule, + IoTSecuritySolutionsList: IoTSecuritySolutionsList, + UserDefinedResourcesProperties: UserDefinedResourcesProperties, + RecommendationConfigurationProperties: RecommendationConfigurationProperties, + AdditionalWorkspacesProperties: AdditionalWorkspacesProperties, + TagsResource: TagsResource, + IoTSecuritySolutionAnalyticsModelList: IoTSecuritySolutionAnalyticsModelList, + IoTSeverityMetrics: IoTSeverityMetrics, + IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem: IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem, + IoTSecurityAlertedDevice: IoTSecurityAlertedDevice, + IoTSecurityDeviceAlert: IoTSecurityDeviceAlert, + IoTSecurityDeviceRecommendation: IoTSecurityDeviceRecommendation, + IoTSecurityAggregatedAlertList: IoTSecurityAggregatedAlertList, + IoTSecurityAggregatedAlertPropertiesTopDevicesListItem: IoTSecurityAggregatedAlertPropertiesTopDevicesListItem, + IoTSecurityAggregatedRecommendationList: IoTSecurityAggregatedRecommendationList, + AscLocationList: AscLocationList, + OperationList: OperationList, + Operation: Operation, + OperationDisplay: OperationDisplay, + SecurityTaskList: SecurityTaskList, + SecurityTaskParameters: SecurityTaskParameters, + AutoProvisioningSettingList: AutoProvisioningSettingList, + ComplianceList: ComplianceList, + ComplianceSegment: ComplianceSegment, + SensitivityLabel: SensitivityLabel, + InformationType: InformationType, + InformationProtectionKeyword: InformationProtectionKeyword, + InformationProtectionPolicyList: InformationProtectionPolicyList, + SecurityContactList: SecurityContactList, + WorkspaceSettingList: WorkspaceSettingList, + RegulatoryComplianceStandardList: RegulatoryComplianceStandardList, + RegulatoryComplianceControlList: RegulatoryComplianceControlList, + RegulatoryComplianceAssessmentList: RegulatoryComplianceAssessmentList, + SecuritySubAssessmentList: SecuritySubAssessmentList, + SubAssessmentStatus: SubAssessmentStatus, + ResourceDetails: ResourceDetails, + AdditionalData: AdditionalData, + AutomationList: AutomationList, + AutomationScope: AutomationScope, + AutomationSource: AutomationSource, + AutomationRuleSet: AutomationRuleSet, + AutomationTriggeringRule: AutomationTriggeringRule, + AutomationAction: AutomationAction, + AzureTrackedResourceLocation: AzureTrackedResourceLocation, + KindAutoGenerated: KindAutoGenerated, + ETag: ETag, + Tags: Tags, + AutomationValidationStatus: AutomationValidationStatus, + AlertsSuppressionRulesList: AlertsSuppressionRulesList, + SuppressionAlertsScope: SuppressionAlertsScope, + ScopeElement: ScopeElement, + ServerVulnerabilityAssessmentsList: ServerVulnerabilityAssessmentsList, + SecurityAssessmentMetadataResponseList: SecurityAssessmentMetadataResponseList, + SecurityAssessmentMetadataPropertiesResponsePublishDates: SecurityAssessmentMetadataPropertiesResponsePublishDates, + SecurityAssessmentMetadataProperties: SecurityAssessmentMetadataProperties, + SecurityAssessmentMetadataPartnerData: SecurityAssessmentMetadataPartnerData, + SecurityAssessmentList: SecurityAssessmentList, + AssessmentStatus: AssessmentStatus, + SecurityAssessmentPropertiesBase: SecurityAssessmentPropertiesBase, + AssessmentLinks: AssessmentLinks, + SecurityAssessmentPartnerData: SecurityAssessmentPartnerData, + AdaptiveApplicationControlGroups: AdaptiveApplicationControlGroups, + ProtectionMode: ProtectionMode, + AdaptiveApplicationControlIssueSummary: AdaptiveApplicationControlIssueSummary, + VmRecommendation: VmRecommendation, + PathRecommendation: PathRecommendation, + PublisherInfo: PublisherInfo, + UserRecommendation: UserRecommendation, + Location: Location, + AdaptiveNetworkHardeningsList: AdaptiveNetworkHardeningsList, + Rule: Rule, + EffectiveNetworkSecurityGroups: EffectiveNetworkSecurityGroups, + AdaptiveNetworkHardeningEnforceRequest: AdaptiveNetworkHardeningEnforceRequest, + AllowedConnectionsList: AllowedConnectionsList, + ConnectableResource: ConnectableResource, + ConnectedResource: ConnectedResource, + TopologyList: TopologyList, + TopologySingleResource: TopologySingleResource, + TopologySingleResourceParent: TopologySingleResourceParent, + TopologySingleResourceChild: TopologySingleResourceChild, + JitNetworkAccessPoliciesList: JitNetworkAccessPoliciesList, + JitNetworkAccessPolicyVirtualMachine: JitNetworkAccessPolicyVirtualMachine, + JitNetworkAccessPortRule: JitNetworkAccessPortRule, + JitNetworkAccessRequest: JitNetworkAccessRequest, + JitNetworkAccessRequestVirtualMachine: JitNetworkAccessRequestVirtualMachine, + JitNetworkAccessRequestPort: JitNetworkAccessRequestPort, + JitNetworkAccessPolicyInitiateRequest: JitNetworkAccessPolicyInitiateRequest, + JitNetworkAccessPolicyInitiateVirtualMachine: JitNetworkAccessPolicyInitiateVirtualMachine, + JitNetworkAccessPolicyInitiatePort: JitNetworkAccessPolicyInitiatePort, + DiscoveredSecuritySolutionList: DiscoveredSecuritySolutionList, + SecuritySolutionsReferenceDataList: SecuritySolutionsReferenceDataList, + ExternalSecuritySolutionList: ExternalSecuritySolutionList, + ExternalSecuritySolutionKindAutoGenerated: ExternalSecuritySolutionKindAutoGenerated, + SecureScoresList: SecureScoresList, + SecureScoreControlList: SecureScoreControlList, + SecureScoreControlDefinitionSource: SecureScoreControlDefinitionSource, + AzureResourceLink: AzureResourceLink, + SecureScoreControlDefinitionList: SecureScoreControlDefinitionList, + SecuritySolutionList: SecuritySolutionList, + ConnectorSettingList: ConnectorSettingList, + HybridComputeSettingsProperties: HybridComputeSettingsProperties, + ProxyServerProperties: ProxyServerProperties, + ServicePrincipalProperties: ServicePrincipalProperties, + AuthenticationDetailsProperties: AuthenticationDetailsProperties, + ScanProperties: ScanProperties, + Scans: Scans, + ScanResultProperties: ScanResultProperties, + Remediation: Remediation, + BaselineAdjustedResult: BaselineAdjustedResult, + Baseline: Baseline, + VaRule: VaRule, + QueryCheck: QueryCheck, + BenchmarkReference: BenchmarkReference, + ScanResults: ScanResults, + RuleResultsInput: RuleResultsInput, + RuleResultsProperties: RuleResultsProperties, + RulesResults: RulesResults, + RulesResultsInput: RulesResultsInput, + AlertList: AlertList, + ResourceIdentifier: ResourceIdentifier, + AlertEntity: AlertEntity, + AlertSimulatorRequestBody: AlertSimulatorRequestBody, + AlertSimulatorRequestProperties: AlertSimulatorRequestProperties, + SettingsList: SettingsList, + IngestionSettingList: IngestionSettingList, + IngestionSettingToken: IngestionSettingToken, + ConnectionStrings: ConnectionStrings, + IngestionConnectionString: IngestionConnectionString, + SoftwaresList: SoftwaresList, + SecurityConnectorsList: SecurityConnectorsList, + CloudOffering: CloudOffering, + SecurityConnectorPropertiesOrganizationalData: SecurityConnectorPropertiesOrganizationalData, + Cvss: Cvss, + Cve: Cve, + VendorReference: VendorReference, + ExternalSecuritySolutionProperties: ExternalSecuritySolutionProperties, + ConnectedWorkspace: ConnectedWorkspace, + AadConnectivityStateAutoGenerated: AadConnectivityStateAutoGenerated, + SecureScoreControlScore: SecureScoreControlScore, + CspmMonitorAwsOfferingNativeCloudConnection: CspmMonitorAwsOfferingNativeCloudConnection, + DefenderForContainersAwsOfferingKubernetesService: DefenderForContainersAwsOfferingKubernetesService, + DefenderForContainersAwsOfferingKubernetesScubaReader: DefenderForContainersAwsOfferingKubernetesScubaReader, + DefenderForContainersAwsOfferingCloudWatchToKinesis: DefenderForContainersAwsOfferingCloudWatchToKinesis, + DefenderForContainersAwsOfferingKinesisToS3: DefenderForContainersAwsOfferingKinesisToS3, + DefenderForServersAwsOfferingDefenderForServers: DefenderForServersAwsOfferingDefenderForServers, + DefenderForServersAwsOfferingArcAutoProvisioning: DefenderForServersAwsOfferingArcAutoProvisioning, + DefenderForServersAwsOfferingArcAutoProvisioningServicePrincipalSecretMetadata: DefenderForServersAwsOfferingArcAutoProvisioningServicePrincipalSecretMetadata, + InformationProtectionAwsOfferingInformationProtection: InformationProtectionAwsOfferingInformationProtection, + MdeOnboardingData: MdeOnboardingData, + CustomAssessmentAutomation: CustomAssessmentAutomation, + CustomAssessmentAutomationRequest: CustomAssessmentAutomationRequest, + CustomEntityStoreAssignment: CustomEntityStoreAssignment, + ComplianceResult: ComplianceResult, + Pricing: Pricing, + AdvancedThreatProtectionSetting: AdvancedThreatProtectionSetting, + DeviceSecurityGroup: DeviceSecurityGroup, + IoTSecuritySolutionModel: IoTSecuritySolutionModel, + IoTSecuritySolutionAnalyticsModel: IoTSecuritySolutionAnalyticsModel, + IoTSecurityAggregatedAlert: IoTSecurityAggregatedAlert, + IoTSecurityAggregatedRecommendation: IoTSecurityAggregatedRecommendation, + AscLocation: AscLocation, + SecurityTask: SecurityTask, + AutoProvisioningSetting: AutoProvisioningSetting, + Compliance: Compliance, + InformationProtectionPolicy: InformationProtectionPolicy, + SecurityContact: SecurityContact, + WorkspaceSetting: WorkspaceSetting, + RegulatoryComplianceStandard: RegulatoryComplianceStandard, + RegulatoryComplianceControl: RegulatoryComplianceControl, + RegulatoryComplianceAssessment: RegulatoryComplianceAssessment, + SecuritySubAssessment: SecuritySubAssessment, + TrackedResource: TrackedResource, + AlertsSuppressionRule: AlertsSuppressionRule, + ServerVulnerabilityAssessment: ServerVulnerabilityAssessment, + SecurityAssessmentMetadataResponse: SecurityAssessmentMetadataResponse, + SecurityAssessmentResponse: SecurityAssessmentResponse, + SecurityAssessment: SecurityAssessment, + AdaptiveApplicationControlGroup: AdaptiveApplicationControlGroup, + AdaptiveNetworkHardening: AdaptiveNetworkHardening, + AllowedConnectionsResource: AllowedConnectionsResource, + TopologyResource: TopologyResource, + JitNetworkAccessPolicy: JitNetworkAccessPolicy, + DiscoveredSecuritySolution: DiscoveredSecuritySolution, + SecuritySolutionsReferenceData: SecuritySolutionsReferenceData, + ExternalSecuritySolution: ExternalSecuritySolution, + SecureScoreItem: SecureScoreItem, + SecureScoreControlDefinitionItem: SecureScoreControlDefinitionItem, + SecureScoreControlDetails: SecureScoreControlDetails, + SecuritySolution: SecuritySolution, + ConnectorSetting: ConnectorSetting, + Scan: Scan, + ScanResult: ScanResult, + RuleResults: RuleResults, + Alert: Alert, + Setting: Setting, + IngestionSetting: IngestionSetting, + Software: Software, + SecurityAssessmentMetadata: SecurityAssessmentMetadata, + ThresholdCustomAlertRule: ThresholdCustomAlertRule, + ListCustomAlertRule: ListCustomAlertRule, + UpdateIotSecuritySolutionData: UpdateIotSecuritySolutionData, + AzureResourceDetails: AzureResourceDetails, + OnPremiseResourceDetails: OnPremiseResourceDetails, + SqlServerVulnerabilityProperties: SqlServerVulnerabilityProperties, + ContainerRegistryVulnerabilityProperties: ContainerRegistryVulnerabilityProperties, + ServerVulnerabilityProperties: ServerVulnerabilityProperties, + AutomationActionLogicApp: AutomationActionLogicApp, + AutomationActionEventHub: AutomationActionEventHub, + AutomationActionWorkspace: AutomationActionWorkspace, + SecurityAssessmentMetadataPropertiesResponse: SecurityAssessmentMetadataPropertiesResponse, + AssessmentStatusResponse: AssessmentStatusResponse, + SecurityAssessmentPropertiesResponse: SecurityAssessmentPropertiesResponse, + SecurityAssessmentProperties: SecurityAssessmentProperties, + AwsCredsAuthenticationDetailsProperties: AwsCredsAuthenticationDetailsProperties, + AwAssumeRoleAuthenticationDetailsProperties: AwAssumeRoleAuthenticationDetailsProperties, + GcpCredentialsDetailsProperties: GcpCredentialsDetailsProperties, + AzureResourceIdentifier: AzureResourceIdentifier, + LogAnalyticsIdentifier: LogAnalyticsIdentifier, + AlertSimulatorBundlesRequestProperties: AlertSimulatorBundlesRequestProperties, + CspmMonitorAwsOffering: CspmMonitorAwsOffering, + DefenderForContainersAwsOffering: DefenderForContainersAwsOffering, + DefenderForServersAwsOffering: DefenderForServersAwsOffering, + InformationProtectionAwsOffering: InformationProtectionAwsOffering, + CefSolutionProperties: CefSolutionProperties, + AtaSolutionProperties: AtaSolutionProperties, + AadSolutionProperties: AadSolutionProperties, + Automation: Automation, + SecurityConnector: SecurityConnector, + CefExternalSecuritySolution: CefExternalSecuritySolution, + AtaExternalSecuritySolution: AtaExternalSecuritySolution, + AadExternalSecuritySolution: AadExternalSecuritySolution, + DataExportSettings: DataExportSettings, + AlertSyncSettings: AlertSyncSettings, + TimeWindowCustomAlertRule: TimeWindowCustomAlertRule, + AllowlistCustomAlertRule: AllowlistCustomAlertRule, + DenylistCustomAlertRule: DenylistCustomAlertRule, + OnPremiseSqlResourceDetails: OnPremiseSqlResourceDetails, + ActiveConnectionsNotInAllowedRange: ActiveConnectionsNotInAllowedRange, + AmqpC2DMessagesNotInAllowedRange: AmqpC2DMessagesNotInAllowedRange, + MqttC2DMessagesNotInAllowedRange: MqttC2DMessagesNotInAllowedRange, + HttpC2DMessagesNotInAllowedRange: HttpC2DMessagesNotInAllowedRange, + AmqpC2DRejectedMessagesNotInAllowedRange: AmqpC2DRejectedMessagesNotInAllowedRange, + MqttC2DRejectedMessagesNotInAllowedRange: MqttC2DRejectedMessagesNotInAllowedRange, + HttpC2DRejectedMessagesNotInAllowedRange: HttpC2DRejectedMessagesNotInAllowedRange, + AmqpD2CMessagesNotInAllowedRange: AmqpD2CMessagesNotInAllowedRange, + MqttD2CMessagesNotInAllowedRange: MqttD2CMessagesNotInAllowedRange, + HttpD2CMessagesNotInAllowedRange: HttpD2CMessagesNotInAllowedRange, + DirectMethodInvokesNotInAllowedRange: DirectMethodInvokesNotInAllowedRange, + FailedLocalLoginsNotInAllowedRange: FailedLocalLoginsNotInAllowedRange, + FileUploadsNotInAllowedRange: FileUploadsNotInAllowedRange, + QueuePurgesNotInAllowedRange: QueuePurgesNotInAllowedRange, + TwinUpdatesNotInAllowedRange: TwinUpdatesNotInAllowedRange, + UnauthorizedOperationsNotInAllowedRange: UnauthorizedOperationsNotInAllowedRange, + ConnectionToIpNotAllowed: ConnectionToIpNotAllowed, + ConnectionFromIpNotAllowed: ConnectionFromIpNotAllowed, + LocalUserNotAllowed: LocalUserNotAllowed, + ProcessNotAllowed: ProcessNotAllowed, + discriminators: discriminators +}); + +/* + * 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. + */ +const accept = { + parameterPath: "accept", + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Accept", + type: { + name: "String" + } + } +}; +const $host = { + parameterPath: "$host", + mapper: { + serializedName: "$host", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const apiVersion = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-10-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const subscriptionId = { + parameterPath: "subscriptionId", + mapper: { + constraints: { + Pattern: new RegExp("^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$") + }, + serializedName: "subscriptionId", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion1 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-07-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const resourceGroupName = { + parameterPath: "resourceGroupName", + mapper: { + constraints: { + Pattern: new RegExp("^[-\\w\\._\\(\\)]+$"), + MaxLength: 90, + MinLength: 1 + }, + serializedName: "resourceGroupName", + required: true, + type: { + name: "String" + } + } +}; +const customAssessmentAutomationName = { + parameterPath: "customAssessmentAutomationName", + mapper: { + serializedName: "customAssessmentAutomationName", + required: true, + type: { + name: "String" + } + } +}; +const contentType = { + parameterPath: ["options", "contentType"], + mapper: { + defaultValue: "application/json", + isConstant: true, + serializedName: "Content-Type", + type: { + name: "String" + } + } +}; +const customAssessmentAutomationBody = { + parameterPath: "customAssessmentAutomationBody", + mapper: CustomAssessmentAutomationRequest +}; +const nextLink = { + parameterPath: "nextLink", + mapper: { + serializedName: "nextLink", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const customEntityStoreAssignmentName = { + parameterPath: "customEntityStoreAssignmentName", + mapper: { + serializedName: "customEntityStoreAssignmentName", + required: true, + type: { + name: "String" + } + } +}; +const customEntityStoreAssignmentRequestBody = { + parameterPath: "customEntityStoreAssignmentRequestBody", + mapper: CustomEntityStoreAssignmentRequest +}; +const apiVersion2 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2017-08-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const scope = { + parameterPath: "scope", + mapper: { + serializedName: "scope", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const resourceId = { + parameterPath: "resourceId", + mapper: { + serializedName: "resourceId", + required: true, + type: { + name: "String" + } + }, + skipEncoding: true +}; +const complianceResultName = { + parameterPath: "complianceResultName", + mapper: { + serializedName: "complianceResultName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion3 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2022-03-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const pricingName = { + parameterPath: "pricingName", + mapper: { + serializedName: "pricingName", + required: true, + type: { + name: "String" + } + } +}; +const pricing = { + parameterPath: "pricing", + mapper: Pricing +}; +const apiVersion4 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2019-01-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const settingName = { + parameterPath: "settingName", + mapper: { + defaultValue: "current", + isConstant: true, + serializedName: "settingName", + type: { + name: "String" + } + } +}; +const advancedThreatProtectionSetting = { + parameterPath: "advancedThreatProtectionSetting", + mapper: AdvancedThreatProtectionSetting +}; +const apiVersion5 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2019-08-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const deviceSecurityGroupName = { + parameterPath: "deviceSecurityGroupName", + mapper: { + serializedName: "deviceSecurityGroupName", + required: true, + type: { + name: "String" + } + } +}; +const deviceSecurityGroup = { + parameterPath: "deviceSecurityGroup", + mapper: DeviceSecurityGroup +}; +const filter = { + parameterPath: ["options", "filter"], + mapper: { + serializedName: "$filter", + type: { + name: "String" + } + } +}; +const solutionName = { + parameterPath: "solutionName", + mapper: { + serializedName: "solutionName", + required: true, + type: { + name: "String" + } + } +}; +const iotSecuritySolutionData = { + parameterPath: "iotSecuritySolutionData", + mapper: IoTSecuritySolutionModel +}; +const updateIotSecuritySolutionData = { + parameterPath: "updateIotSecuritySolutionData", + mapper: UpdateIotSecuritySolutionData +}; +const top = { + parameterPath: ["options", "top"], + mapper: { + serializedName: "$top", + type: { + name: "Number" + } + } +}; +const aggregatedAlertName = { + parameterPath: "aggregatedAlertName", + mapper: { + serializedName: "aggregatedAlertName", + required: true, + type: { + name: "String" + } + } +}; +const aggregatedRecommendationName = { + parameterPath: "aggregatedRecommendationName", + mapper: { + serializedName: "aggregatedRecommendationName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion6 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2015-06-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const ascLocation = { + parameterPath: "ascLocation", + mapper: { + serializedName: "ascLocation", + required: true, + type: { + name: "String" + } + } +}; +const taskName = { + parameterPath: "taskName", + mapper: { + serializedName: "taskName", + required: true, + type: { + name: "String" + } + } +}; +const taskUpdateActionType = { + parameterPath: "taskUpdateActionType", + mapper: { + serializedName: "taskUpdateActionType", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion7 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2017-08-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const settingName1 = { + parameterPath: "settingName", + mapper: { + serializedName: "settingName", + required: true, + type: { + name: "String" + } + } +}; +const setting = { + parameterPath: "setting", + mapper: AutoProvisioningSetting +}; +const complianceName = { + parameterPath: "complianceName", + mapper: { + serializedName: "complianceName", + required: true, + type: { + name: "String" + } + } +}; +const informationProtectionPolicyName = { + parameterPath: "informationProtectionPolicyName", + mapper: { + serializedName: "informationProtectionPolicyName", + required: true, + type: { + name: "String" + } + } +}; +const informationProtectionPolicy = { + parameterPath: "informationProtectionPolicy", + mapper: InformationProtectionPolicy +}; +const securityContactName = { + parameterPath: "securityContactName", + mapper: { + serializedName: "securityContactName", + required: true, + type: { + name: "String" + } + } +}; +const securityContact = { + parameterPath: "securityContact", + mapper: SecurityContact +}; +const workspaceSettingName = { + parameterPath: "workspaceSettingName", + mapper: { + serializedName: "workspaceSettingName", + required: true, + type: { + name: "String" + } + } +}; +const workspaceSetting = { + parameterPath: "workspaceSetting", + mapper: WorkspaceSetting +}; +const apiVersion8 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2019-01-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const regulatoryComplianceStandardName = { + parameterPath: "regulatoryComplianceStandardName", + mapper: { + serializedName: "regulatoryComplianceStandardName", + required: true, + type: { + name: "String" + } + } +}; +const regulatoryComplianceControlName = { + parameterPath: "regulatoryComplianceControlName", + mapper: { + serializedName: "regulatoryComplianceControlName", + required: true, + type: { + name: "String" + } + } +}; +const regulatoryComplianceAssessmentName = { + parameterPath: "regulatoryComplianceAssessmentName", + mapper: { + serializedName: "regulatoryComplianceAssessmentName", + required: true, + type: { + name: "String" + } + } +}; +const assessmentName = { + parameterPath: "assessmentName", + mapper: { + serializedName: "assessmentName", + required: true, + type: { + name: "String" + } + } +}; +const subAssessmentName = { + parameterPath: "subAssessmentName", + mapper: { + serializedName: "subAssessmentName", + required: true, + type: { + name: "String" + } + } +}; +const automationName = { + parameterPath: "automationName", + mapper: { + serializedName: "automationName", + required: true, + type: { + name: "String" + } + } +}; +const automation = { + parameterPath: "automation", + mapper: Automation +}; +const alertType = { + parameterPath: ["options", "alertType"], + mapper: { + serializedName: "AlertType", + type: { + name: "String" + } + } +}; +const alertsSuppressionRuleName = { + parameterPath: "alertsSuppressionRuleName", + mapper: { + serializedName: "alertsSuppressionRuleName", + required: true, + type: { + name: "String" + } + } +}; +const alertsSuppressionRule = { + parameterPath: "alertsSuppressionRule", + mapper: AlertsSuppressionRule +}; +const resourceNamespace = { + parameterPath: "resourceNamespace", + mapper: { + serializedName: "resourceNamespace", + required: true, + type: { + name: "String" + } + } +}; +const resourceType = { + parameterPath: "resourceType", + mapper: { + serializedName: "resourceType", + required: true, + type: { + name: "String" + } + } +}; +const resourceName = { + parameterPath: "resourceName", + mapper: { + serializedName: "resourceName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion9 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2020-01-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const serverVulnerabilityAssessment = { + parameterPath: "serverVulnerabilityAssessment", + mapper: { + defaultValue: "default", + isConstant: true, + serializedName: "serverVulnerabilityAssessment", + type: { + name: "String" + } + } +}; +const apiVersion10 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-06-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const assessmentMetadataName = { + parameterPath: "assessmentMetadataName", + mapper: { + serializedName: "assessmentMetadataName", + required: true, + type: { + name: "String" + } + } +}; +const assessmentMetadata = { + parameterPath: "assessmentMetadata", + mapper: SecurityAssessmentMetadataResponse +}; +const expand = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String" + } + } +}; +const assessment = { + parameterPath: "assessment", + mapper: SecurityAssessment +}; +const includePathRecommendations = { + parameterPath: ["options", "includePathRecommendations"], + mapper: { + serializedName: "includePathRecommendations", + type: { + name: "Boolean" + } + } +}; +const summary = { + parameterPath: ["options", "summary"], + mapper: { + serializedName: "summary", + type: { + name: "Boolean" + } + } +}; +const groupName = { + parameterPath: "groupName", + mapper: { + serializedName: "groupName", + required: true, + type: { + name: "String" + } + } +}; +const body = { + parameterPath: "body", + mapper: AdaptiveApplicationControlGroup +}; +const adaptiveNetworkHardeningResourceName = { + parameterPath: "adaptiveNetworkHardeningResourceName", + mapper: { + serializedName: "adaptiveNetworkHardeningResourceName", + required: true, + type: { + name: "String" + } + } +}; +const body1 = { + parameterPath: "body", + mapper: AdaptiveNetworkHardeningEnforceRequest +}; +const adaptiveNetworkHardeningEnforceAction = { + parameterPath: "adaptiveNetworkHardeningEnforceAction", + mapper: { + defaultValue: "enforce", + isConstant: true, + serializedName: "adaptiveNetworkHardeningEnforceAction", + type: { + name: "String" + } + } +}; +const connectionType = { + parameterPath: "connectionType", + mapper: { + serializedName: "connectionType", + required: true, + type: { + name: "String" + } + } +}; +const topologyResourceName = { + parameterPath: "topologyResourceName", + mapper: { + serializedName: "topologyResourceName", + required: true, + type: { + name: "String" + } + } +}; +const jitNetworkAccessPolicyName = { + parameterPath: "jitNetworkAccessPolicyName", + mapper: { + serializedName: "jitNetworkAccessPolicyName", + required: true, + type: { + name: "String" + } + } +}; +const body2 = { + parameterPath: "body", + mapper: JitNetworkAccessPolicy +}; +const body3 = { + parameterPath: "body", + mapper: JitNetworkAccessPolicyInitiateRequest +}; +const jitNetworkAccessPolicyInitiateType = { + parameterPath: "jitNetworkAccessPolicyInitiateType", + mapper: { + defaultValue: "initiate", + isConstant: true, + serializedName: "jitNetworkAccessPolicyInitiateType", + type: { + name: "String" + } + } +}; +const discoveredSecuritySolutionName = { + parameterPath: "discoveredSecuritySolutionName", + mapper: { + serializedName: "discoveredSecuritySolutionName", + required: true, + type: { + name: "String" + } + } +}; +const externalSecuritySolutionsName = { + parameterPath: "externalSecuritySolutionsName", + mapper: { + serializedName: "externalSecuritySolutionsName", + required: true, + type: { + name: "String" + } + } +}; +const secureScoreName = { + parameterPath: "secureScoreName", + mapper: { + serializedName: "secureScoreName", + required: true, + type: { + name: "String" + } + } +}; +const expand1 = { + parameterPath: ["options", "expand"], + mapper: { + serializedName: "$expand", + type: { + name: "String" + } + } +}; +const securitySolutionName = { + parameterPath: "securitySolutionName", + mapper: { + serializedName: "securitySolutionName", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion11 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2020-01-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const connectorName = { + parameterPath: "connectorName", + mapper: { + serializedName: "connectorName", + required: true, + type: { + name: "String" + } + } +}; +const connectorSetting = { + parameterPath: "connectorSetting", + mapper: ConnectorSetting +}; +const scanId = { + parameterPath: "scanId", + mapper: { + serializedName: "scanId", + required: true, + type: { + name: "String" + } + } +}; +const workspaceId = { + parameterPath: "workspaceId", + mapper: { + serializedName: "workspaceId", + required: true, + type: { + name: "String" + } + } +}; +const apiVersion12 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2020-07-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const scanResultId = { + parameterPath: "scanResultId", + mapper: { + serializedName: "scanResultId", + required: true, + type: { + name: "String" + } + } +}; +const body4 = { + parameterPath: ["options", "body"], + mapper: RuleResultsInput +}; +const ruleId = { + parameterPath: "ruleId", + mapper: { + serializedName: "ruleId", + required: true, + type: { + name: "String" + } + } +}; +const body5 = { + parameterPath: ["options", "body"], + mapper: RulesResultsInput +}; +const apiVersion13 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-11-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const alertName = { + parameterPath: "alertName", + mapper: { + serializedName: "alertName", + required: true, + type: { + name: "String" + } + } +}; +const alertSimulatorRequestBody = { + parameterPath: "alertSimulatorRequestBody", + mapper: AlertSimulatorRequestBody +}; +const apiVersion14 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-07-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const settingName2 = { + parameterPath: "settingName", + mapper: { + serializedName: "settingName", + required: true, + type: { + name: "String" + } + } +}; +const setting1 = { + parameterPath: "setting", + mapper: Setting +}; +const apiVersion15 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-01-15-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const ingestionSettingName = { + parameterPath: "ingestionSettingName", + mapper: { + serializedName: "ingestionSettingName", + required: true, + type: { + name: "String" + } + } +}; +const ingestionSetting = { + parameterPath: "ingestionSetting", + mapper: IngestionSetting +}; +const apiVersion16 = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-05-01-preview", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; +const softwareName = { + parameterPath: "softwareName", + mapper: { + serializedName: "softwareName", + required: true, + type: { + name: "String" + } + } +}; +const securityConnectorName = { + parameterPath: "securityConnectorName", + mapper: { + serializedName: "securityConnectorName", + required: true, + type: { + name: "String" + } + } +}; +const securityConnector = { + parameterPath: "securityConnector", + mapper: SecurityConnector +}; + +/* + * 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 containing MdeOnboardings operations. */ +class MdeOnboardingsImpl { + /** + * Initialize a new instance of the class MdeOnboardings class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * The configuration or data needed to onboard the machine to MDE + * @param options The options parameters. + */ + list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$F); + } + /** + * The default configuration or data needed to onboard the machine to MDE + * @param options The options parameters. + */ + get(options) { + return this.client.sendOperationRequest({ options }, getOperationSpec$G); + } +} +// Operation Specifications +const serializer$M = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$F = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/mdeOnboardings", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: MdeOnboardingDataList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$M +}; +const getOperationSpec$G = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/mdeOnboardings/default", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: MdeOnboardingData + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$M +}; + +/* + * 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 containing CustomAssessmentAutomations operations. */ +class CustomAssessmentAutomationsImpl { + /** + * Initialize a new instance of the class CustomAssessmentAutomations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List custom assessment automations by provided subscription and resource group + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listByResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List custom assessment automations by provided subscription + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listBySubscriptionPagingPage(options); + } + }; + } + listBySubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listBySubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets a single custom assessment automation by name for the provided subscription and resource group. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param customAssessmentAutomationName Name of the Custom Assessment Automation. + * @param options The options parameters. + */ + get(resourceGroupName, customAssessmentAutomationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, customAssessmentAutomationName, options }, getOperationSpec$F); + } + /** + * Creates or updates a custom assessment automation for the provided subscription. Please note that + * providing an existing custom assessment automation will replace the existing record. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param customAssessmentAutomationName Name of the Custom Assessment Automation. + * @param customAssessmentAutomationBody Custom Assessment Automation body + * @param options The options parameters. + */ + create(resourceGroupName, customAssessmentAutomationName, customAssessmentAutomationBody, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + customAssessmentAutomationName, + customAssessmentAutomationBody, + options + }, createOperationSpec$6); + } + /** + * Deletes a custom assessment automation by name for a provided subscription + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param customAssessmentAutomationName Name of the Custom Assessment Automation. + * @param options The options parameters. + */ + delete(resourceGroupName, customAssessmentAutomationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, customAssessmentAutomationName, options }, deleteOperationSpec$f); + } + /** + * List custom assessment automations by provided subscription and resource group + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$7); + } + /** + * List custom assessment automations by provided subscription + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$5); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$7); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$5); + } +} +// Operation Specifications +const serializer$L = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$F = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Security/customAssessmentAutomations/{customAssessmentAutomationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomAssessmentAutomation + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + customAssessmentAutomationName + ], + headerParameters: [accept], + serializer: serializer$L +}; +const createOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Security/customAssessmentAutomations/{customAssessmentAutomationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: CustomAssessmentAutomation + }, + 201: { + bodyMapper: CustomAssessmentAutomation + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: customAssessmentAutomationBody, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + customAssessmentAutomationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$L +}; +const deleteOperationSpec$f = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Security/customAssessmentAutomations/{customAssessmentAutomationName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + customAssessmentAutomationName + ], + headerParameters: [accept], + serializer: serializer$L +}; +const listByResourceGroupOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Security/customAssessmentAutomations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomAssessmentAutomationsListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$L +}; +const listBySubscriptionOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/customAssessmentAutomations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomAssessmentAutomationsListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$L +}; +const listByResourceGroupNextOperationSpec$7 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomAssessmentAutomationsListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer: serializer$L +}; +const listBySubscriptionNextOperationSpec$5 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomAssessmentAutomationsListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$L +}; + +/* + * 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 containing CustomEntityStoreAssignments operations. */ +class CustomEntityStoreAssignmentsImpl { + /** + * Initialize a new instance of the class CustomEntityStoreAssignments class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List custom entity store assignments by a provided subscription and resource group + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listByResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List custom entity store assignments by provided subscription + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listBySubscriptionPagingPage(options); + } + }; + } + listBySubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listBySubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets a single custom entity store assignment by name for the provided subscription and resource + * group. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param customEntityStoreAssignmentName Name of the custom entity store assignment. Generated name is + * GUID. + * @param options The options parameters. + */ + get(resourceGroupName, customEntityStoreAssignmentName, options) { + return this.client.sendOperationRequest({ resourceGroupName, customEntityStoreAssignmentName, options }, getOperationSpec$E); + } + /** + * Creates a custom entity store assignment for the provided subscription, if not already exists. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param customEntityStoreAssignmentName Name of the custom entity store assignment. Generated name is + * GUID. + * @param customEntityStoreAssignmentRequestBody Custom entity store assignment body + * @param options The options parameters. + */ + create(resourceGroupName, customEntityStoreAssignmentName, customEntityStoreAssignmentRequestBody, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + customEntityStoreAssignmentName, + customEntityStoreAssignmentRequestBody, + options + }, createOperationSpec$5); + } + /** + * Delete a custom entity store assignment by name for a provided subscription + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param customEntityStoreAssignmentName Name of the custom entity store assignment. Generated name is + * GUID. + * @param options The options parameters. + */ + delete(resourceGroupName, customEntityStoreAssignmentName, options) { + return this.client.sendOperationRequest({ resourceGroupName, customEntityStoreAssignmentName, options }, deleteOperationSpec$e); + } + /** + * List custom entity store assignments by a provided subscription and resource group + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$6); + } + /** + * List custom entity store assignments by provided subscription + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$4); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$6); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$4); + } +} +// Operation Specifications +const serializer$K = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$E = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Security/customEntityStoreAssignments/{customEntityStoreAssignmentName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomEntityStoreAssignment + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + customEntityStoreAssignmentName + ], + headerParameters: [accept], + serializer: serializer$K +}; +const createOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Security/customEntityStoreAssignments/{customEntityStoreAssignmentName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: CustomEntityStoreAssignment + }, + 201: { + bodyMapper: CustomEntityStoreAssignment + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: customEntityStoreAssignmentRequestBody, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + customEntityStoreAssignmentName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$K +}; +const deleteOperationSpec$e = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Security/customEntityStoreAssignments/{customEntityStoreAssignmentName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + customEntityStoreAssignmentName + ], + headerParameters: [accept], + serializer: serializer$K +}; +const listByResourceGroupOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Security/customEntityStoreAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomEntityStoreAssignmentsListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$K +}; +const listBySubscriptionOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/customEntityStoreAssignments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomEntityStoreAssignmentsListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$K +}; +const listByResourceGroupNextOperationSpec$6 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomEntityStoreAssignmentsListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer: serializer$K +}; +const listBySubscriptionNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: CustomEntityStoreAssignmentsListResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$K +}; + +/* + * 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 containing ComplianceResults operations. */ +class ComplianceResultsImpl { + /** + * Initialize a new instance of the class ComplianceResults class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Security compliance results in the subscription + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + list(scope, options) { + const iter = this.listPagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(scope, options); + } + }; + } + listPagingPage(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(scope, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Security compliance results in the subscription + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + _list(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listOperationSpec$E); + } + /** + * Security Compliance Result + * @param resourceId The identifier of the resource. + * @param complianceResultName name of the desired assessment compliance result + * @param options The options parameters. + */ + get(resourceId, complianceResultName, options) { + return this.client.sendOperationRequest({ resourceId, complianceResultName, options }, getOperationSpec$D); + } + /** + * ListNext + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listNextOperationSpec$x); + } +} +// Operation Specifications +const serializer$J = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$E = { + path: "/{scope}/providers/Microsoft.Security/complianceResults", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ComplianceResultList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$J +}; +const getOperationSpec$D = { + path: "/{resourceId}/providers/Microsoft.Security/complianceResults/{complianceResultName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ComplianceResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [ + $host, + resourceId, + complianceResultName + ], + headerParameters: [accept], + serializer: serializer$J +}; +const listNextOperationSpec$x = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ComplianceResultList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion2], + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$J +}; + +/* + * 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 containing Pricings operations. */ +class PricingsImpl { + /** + * Initialize a new instance of the class Pricings class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists Security Center pricing configurations in the subscription. + * @param options The options parameters. + */ + list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$D); + } + /** + * Gets a provided Security Center pricing configuration in the subscription. + * @param pricingName name of the pricing configuration + * @param options The options parameters. + */ + get(pricingName, options) { + return this.client.sendOperationRequest({ pricingName, options }, getOperationSpec$C); + } + /** + * Updates a provided Security Center pricing configuration in the subscription. + * @param pricingName name of the pricing configuration + * @param pricing Pricing object + * @param options The options parameters. + */ + update(pricingName, pricing, options) { + return this.client.sendOperationRequest({ pricingName, pricing, options }, updateOperationSpec$6); + } +} +// Operation Specifications +const serializer$I = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$D = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: PricingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion3], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$I +}; +const getOperationSpec$C = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings/{pricingName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Pricing + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + pricingName + ], + headerParameters: [accept], + serializer: serializer$I +}; +const updateOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings/{pricingName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Pricing + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: pricing, + queryParameters: [apiVersion3], + urlParameters: [ + $host, + subscriptionId, + pricingName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$I +}; + +/* + * 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 containing AdvancedThreatProtection operations. */ +class AdvancedThreatProtectionImpl { + /** + * Initialize a new instance of the class AdvancedThreatProtection class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the Advanced Threat Protection settings for the specified resource. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + get(resourceId, options) { + return this.client.sendOperationRequest({ resourceId, options }, getOperationSpec$B); + } + /** + * Creates or updates the Advanced Threat Protection settings on a specified resource. + * @param resourceId The identifier of the resource. + * @param advancedThreatProtectionSetting Advanced Threat Protection Settings + * @param options The options parameters. + */ + create(resourceId, advancedThreatProtectionSetting, options) { + return this.client.sendOperationRequest({ resourceId, advancedThreatProtectionSetting, options }, createOperationSpec$4); + } +} +// Operation Specifications +const serializer$H = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$B = { + path: "/{resourceId}/providers/Microsoft.Security/advancedThreatProtectionSettings/{settingName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AdvancedThreatProtectionSetting + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + resourceId, + settingName + ], + headerParameters: [accept], + serializer: serializer$H +}; +const createOperationSpec$4 = { + path: "/{resourceId}/providers/Microsoft.Security/advancedThreatProtectionSettings/{settingName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: AdvancedThreatProtectionSetting + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: advancedThreatProtectionSetting, + queryParameters: [apiVersion4], + urlParameters: [ + $host, + resourceId, + settingName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$H +}; + +/* + * 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 containing DeviceSecurityGroups operations. */ +class DeviceSecurityGroupsImpl { + /** + * Initialize a new instance of the class DeviceSecurityGroups class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Use this method get the list of device security groups for the specified IoT Hub resource. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + list(resourceId, options) { + const iter = this.listPagingAll(resourceId, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(resourceId, options); + } + }; + } + listPagingPage(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(resourceId, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceId, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(resourceId, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(resourceId, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Use this method get the list of device security groups for the specified IoT Hub resource. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + _list(resourceId, options) { + return this.client.sendOperationRequest({ resourceId, options }, listOperationSpec$C); + } + /** + * Use this method to get the device security group for the specified IoT Hub resource. + * @param resourceId The identifier of the resource. + * @param deviceSecurityGroupName The name of the device security group. Note that the name of the + * device security group is case insensitive. + * @param options The options parameters. + */ + get(resourceId, deviceSecurityGroupName, options) { + return this.client.sendOperationRequest({ resourceId, deviceSecurityGroupName, options }, getOperationSpec$A); + } + /** + * Use this method to creates or updates the device security group on a specified IoT Hub resource. + * @param resourceId The identifier of the resource. + * @param deviceSecurityGroupName The name of the device security group. Note that the name of the + * device security group is case insensitive. + * @param deviceSecurityGroup Security group object. + * @param options The options parameters. + */ + createOrUpdate(resourceId, deviceSecurityGroupName, deviceSecurityGroup, options) { + return this.client.sendOperationRequest({ resourceId, deviceSecurityGroupName, deviceSecurityGroup, options }, createOrUpdateOperationSpec$9); + } + /** + * User this method to deletes the device security group. + * @param resourceId The identifier of the resource. + * @param deviceSecurityGroupName The name of the device security group. Note that the name of the + * device security group is case insensitive. + * @param options The options parameters. + */ + delete(resourceId, deviceSecurityGroupName, options) { + return this.client.sendOperationRequest({ resourceId, deviceSecurityGroupName, options }, deleteOperationSpec$d); + } + /** + * ListNext + * @param resourceId The identifier of the resource. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceId, nextLink, options) { + return this.client.sendOperationRequest({ resourceId, nextLink, options }, listNextOperationSpec$w); + } +} +// Operation Specifications +const serializer$G = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$C = { + path: "/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DeviceSecurityGroupList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [$host, resourceId], + headerParameters: [accept], + serializer: serializer$G +}; +const getOperationSpec$A = { + path: "/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DeviceSecurityGroup + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + resourceId, + deviceSecurityGroupName + ], + headerParameters: [accept], + serializer: serializer$G +}; +const createOrUpdateOperationSpec$9 = { + path: "/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: DeviceSecurityGroup + }, + 201: { + bodyMapper: DeviceSecurityGroup + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: deviceSecurityGroup, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + resourceId, + deviceSecurityGroupName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$G +}; +const deleteOperationSpec$d = { + path: "/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + resourceId, + deviceSecurityGroupName + ], + headerParameters: [accept], + serializer: serializer$G +}; +const listNextOperationSpec$w = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DeviceSecurityGroupList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [$host, nextLink, resourceId], + headerParameters: [accept], + serializer: serializer$G +}; + +/* + * 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 containing IotSecuritySolution operations. */ +class IotSecuritySolutionImpl { + /** + * Initialize a new instance of the class IotSecuritySolution class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Use this method to get the list of IoT Security solutions by subscription. + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listBySubscriptionPagingPage(options); + } + }; + } + listBySubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listBySubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Use this method to get the list IoT Security solutions organized by resource group. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listByResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Use this method to get the list of IoT Security solutions by subscription. + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$3); + } + /** + * Use this method to get the list IoT Security solutions organized by resource group. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$5); + } + /** + * User this method to get details of a specific IoT Security solution based on solution name + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param options The options parameters. + */ + get(resourceGroupName, solutionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, options }, getOperationSpec$z); + } + /** + * Use this method to create or update yours IoT Security solution + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param iotSecuritySolutionData The security solution data + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, solutionName, iotSecuritySolutionData, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, iotSecuritySolutionData, options }, createOrUpdateOperationSpec$8); + } + /** + * Use this method to update existing IoT Security solution tags or user defined resources. To update + * other fields use the CreateOrUpdate method. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param updateIotSecuritySolutionData The security solution data + * @param options The options parameters. + */ + update(resourceGroupName, solutionName, updateIotSecuritySolutionData, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + solutionName, + updateIotSecuritySolutionData, + options + }, updateOperationSpec$5); + } + /** + * Use this method to delete yours IoT Security solution + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param options The options parameters. + */ + delete(resourceGroupName, solutionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, options }, deleteOperationSpec$c); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$3); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$5); + } +} +// Operation Specifications +const serializer$F = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listBySubscriptionOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotSecuritySolutions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5, filter], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$F +}; +const listByResourceGroupOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5, filter], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$F +}; +const getOperationSpec$z = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionModel + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName + ], + headerParameters: [accept], + serializer: serializer$F +}; +const createOrUpdateOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionModel + }, + 201: { + bodyMapper: IoTSecuritySolutionModel + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: iotSecuritySolutionData, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$F +}; +const updateOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionModel + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: updateIotSecuritySolutionData, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$F +}; +const deleteOperationSpec$c = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName + ], + headerParameters: [accept], + serializer: serializer$F +}; +const listBySubscriptionNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5, filter], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$F +}; +const listByResourceGroupNextOperationSpec$5 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5, filter], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer: serializer$F +}; + +/* + * 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 containing IotSecuritySolutionAnalytics operations. */ +class IotSecuritySolutionAnalyticsImpl { + /** + * Initialize a new instance of the class IotSecuritySolutionAnalytics class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Use this method to get IoT security Analytics metrics in an array. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param options The options parameters. + */ + list(resourceGroupName, solutionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, options }, listOperationSpec$B); + } + /** + * Use this method to get IoT Security Analytics metrics. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param options The options parameters. + */ + get(resourceGroupName, solutionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, options }, getOperationSpec$y); + } +} +// Operation Specifications +const serializer$E = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$B = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionAnalyticsModelList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName + ], + headerParameters: [accept], + serializer: serializer$E +}; +const getOperationSpec$y = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecuritySolutionAnalyticsModel + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName + ], + headerParameters: [accept], + serializer: serializer$E +}; + +/* + * 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 containing IotSecuritySolutionsAnalyticsAggregatedAlert operations. */ +class IotSecuritySolutionsAnalyticsAggregatedAlertImpl { + /** + * Initialize a new instance of the class IotSecuritySolutionsAnalyticsAggregatedAlert class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Use this method to get the aggregated alert list of yours IoT Security solution. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param options The options parameters. + */ + list(resourceGroupName, solutionName, options) { + const iter = this.listPagingAll(resourceGroupName, solutionName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(resourceGroupName, solutionName, options); + } + }; + } + listPagingPage(resourceGroupName, solutionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(resourceGroupName, solutionName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, solutionName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(resourceGroupName, solutionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(resourceGroupName, solutionName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Use this method to get the aggregated alert list of yours IoT Security solution. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param options The options parameters. + */ + _list(resourceGroupName, solutionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, options }, listOperationSpec$A); + } + /** + * Use this method to get a single the aggregated alert of yours IoT Security solution. This + * aggregation is performed by alert name. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param aggregatedAlertName Identifier of the aggregated alert. + * @param options The options parameters. + */ + get(resourceGroupName, solutionName, aggregatedAlertName, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, aggregatedAlertName, options }, getOperationSpec$x); + } + /** + * Use this method to dismiss an aggregated IoT Security Solution Alert. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param aggregatedAlertName Identifier of the aggregated alert. + * @param options The options parameters. + */ + dismiss(resourceGroupName, solutionName, aggregatedAlertName, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, aggregatedAlertName, options }, dismissOperationSpec); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, solutionName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, nextLink, options }, listNextOperationSpec$v); + } +} +// Operation Specifications +const serializer$D = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$A = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecurityAggregatedAlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5, top], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName + ], + headerParameters: [accept], + serializer: serializer$D +}; +const getOperationSpec$x = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts/{aggregatedAlertName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecurityAggregatedAlert + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName, + aggregatedAlertName + ], + headerParameters: [accept], + serializer: serializer$D +}; +const dismissOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts/{aggregatedAlertName}/dismiss", + httpMethod: "POST", + responses: { + 200: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName, + aggregatedAlertName + ], + headerParameters: [accept], + serializer: serializer$D +}; +const listNextOperationSpec$v = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecurityAggregatedAlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5, top], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink, + solutionName + ], + headerParameters: [accept], + serializer: serializer$D +}; + +/* + * 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 containing IotSecuritySolutionsAnalyticsRecommendation operations. */ +class IotSecuritySolutionsAnalyticsRecommendationImpl { + /** + * Initialize a new instance of the class IotSecuritySolutionsAnalyticsRecommendation class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Use this method to get the list of aggregated security analytics recommendations of yours IoT + * Security solution. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param options The options parameters. + */ + list(resourceGroupName, solutionName, options) { + const iter = this.listPagingAll(resourceGroupName, solutionName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(resourceGroupName, solutionName, options); + } + }; + } + listPagingPage(resourceGroupName, solutionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(resourceGroupName, solutionName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(resourceGroupName, solutionName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(resourceGroupName, solutionName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(resourceGroupName, solutionName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Use this method to get the aggregated security analytics recommendation of yours IoT Security + * solution. This aggregation is performed by recommendation name. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param aggregatedRecommendationName Name of the recommendation aggregated for this query. + * @param options The options parameters. + */ + get(resourceGroupName, solutionName, aggregatedRecommendationName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + solutionName, + aggregatedRecommendationName, + options + }, getOperationSpec$w); + } + /** + * Use this method to get the list of aggregated security analytics recommendations of yours IoT + * Security solution. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param options The options parameters. + */ + _list(resourceGroupName, solutionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, options }, listOperationSpec$z); + } + /** + * ListNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param solutionName The name of the IoT Security solution. + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(resourceGroupName, solutionName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, solutionName, nextLink, options }, listNextOperationSpec$u); + } +} +// Operation Specifications +const serializer$C = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$w = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedRecommendations/{aggregatedRecommendationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecurityAggregatedRecommendation + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName, + aggregatedRecommendationName + ], + headerParameters: [accept], + serializer: serializer$C +}; +const listOperationSpec$z = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedRecommendations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecurityAggregatedRecommendationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5, top], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + solutionName + ], + headerParameters: [accept], + serializer: serializer$C +}; +const listNextOperationSpec$u = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IoTSecurityAggregatedRecommendationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion5, top], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink, + solutionName + ], + headerParameters: [accept], + serializer: serializer$C +}; + +/* + * 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 containing Locations operations. */ +class LocationsImpl { + /** + * Initialize a new instance of the class Locations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * The location of the responsible ASC of the specific subscription (home region). For each + * subscription there is only one responsible location. The location in the response should be used to + * read or write other resources in ASC according to their ID. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * The location of the responsible ASC of the specific subscription (home region). For each + * subscription there is only one responsible location. The location in the response should be used to + * read or write other resources in ASC according to their ID. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$y); + } + /** + * Details of a specific location + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + get(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, getOperationSpec$v); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$t); + } +} +// Operation Specifications +const serializer$B = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$y = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AscLocationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$B +}; +const getOperationSpec$v = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AscLocation + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$B +}; +const listNextOperationSpec$t = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AscLocationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$B +}; + +/* + * 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 containing Operations operations. */ +class OperationsImpl { + /** + * Initialize a new instance of the class Operations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Exposes all available operations for discovery purposes. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Exposes all available operations for discovery purposes. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$x); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$s); + } +} +// Operation Specifications +const serializer$A = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$x = { + path: "/providers/Microsoft.Security/operations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OperationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$A +}; +const listNextOperationSpec$s = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: OperationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [$host, nextLink], + headerParameters: [accept], + serializer: serializer$A +}; + +/* + * 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 containing Tasks operations. */ +class TasksImpl { + /** + * Initialize a new instance of the class Tasks class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByHomeRegion(ascLocation, options) { + const iter = this.listByHomeRegionPagingAll(ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByHomeRegionPagingPage(ascLocation, options); + } + }; + } + listByHomeRegionPagingPage(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingPage_1() { + let result = yield tslib.__await(this._listByHomeRegion(ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByHomeRegionNext(ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByHomeRegionPagingAll(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByHomeRegionPagingPage(ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, ascLocation, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupPagingPage(resourceGroupName, ascLocation, options); + } + }; + } + listByResourceGroupPagingPage(resourceGroupName, ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$w); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listByHomeRegion(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, listByHomeRegionOperationSpec$5); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param taskName Name of the task object, will be a GUID + * @param options The options parameters. + */ + getSubscriptionLevelTask(ascLocation, taskName, options) { + return this.client.sendOperationRequest({ ascLocation, taskName, options }, getSubscriptionLevelTaskOperationSpec); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param taskName Name of the task object, will be a GUID + * @param taskUpdateActionType Type of the action to do on the task + * @param options The options parameters. + */ + updateSubscriptionLevelTaskState(ascLocation, taskName, taskUpdateActionType, options) { + return this.client.sendOperationRequest({ ascLocation, taskName, taskUpdateActionType, options }, updateSubscriptionLevelTaskStateOperationSpec); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, ascLocation, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, options }, listByResourceGroupOperationSpec$4); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param taskName Name of the task object, will be a GUID + * @param options The options parameters. + */ + getResourceGroupLevelTask(resourceGroupName, ascLocation, taskName, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, taskName, options }, getResourceGroupLevelTaskOperationSpec); + } + /** + * Recommended tasks that will help improve the security of the subscription proactively + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param taskName Name of the task object, will be a GUID + * @param taskUpdateActionType Type of the action to do on the task + * @param options The options parameters. + */ + updateResourceGroupLevelTaskState(resourceGroupName, ascLocation, taskName, taskUpdateActionType, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + ascLocation, + taskName, + taskUpdateActionType, + options + }, updateResourceGroupLevelTaskStateOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$r); + } + /** + * ListByHomeRegionNext + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListByHomeRegion method. + * @param options The options parameters. + */ + _listByHomeRegionNext(ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ ascLocation, nextLink, options }, listByHomeRegionNextOperationSpec$4); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, nextLink, options }, listByResourceGroupNextOperationSpec$4); + } +} +// Operation Specifications +const serializer$z = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$w = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/tasks", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityTaskList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion6], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$z +}; +const listByHomeRegionOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityTaskList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion6], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$z +}; +const getSubscriptionLevelTaskOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityTask + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + taskName + ], + headerParameters: [accept], + serializer: serializer$z +}; +const updateSubscriptionLevelTaskStateOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}/{taskUpdateActionType}", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + taskName, + taskUpdateActionType + ], + headerParameters: [accept], + serializer: serializer$z +}; +const listByResourceGroupOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityTaskList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion6], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$z +}; +const getResourceGroupLevelTaskOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityTask + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + taskName + ], + headerParameters: [accept], + serializer: serializer$z +}; +const updateResourceGroupLevelTaskStateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}/{taskUpdateActionType}", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion6], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + taskName, + taskUpdateActionType + ], + headerParameters: [accept], + serializer: serializer$z +}; +const listNextOperationSpec$r = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityTaskList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion6], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$z +}; +const listByHomeRegionNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityTaskList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion6], + urlParameters: [ + $host, + subscriptionId, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$z +}; +const listByResourceGroupNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityTaskList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion6], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$z +}; + +/* + * 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 containing AutoProvisioningSettings operations. */ +class AutoProvisioningSettingsImpl { + /** + * Initialize a new instance of the class AutoProvisioningSettings class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Exposes the auto provisioning settings of the subscriptions + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Exposes the auto provisioning settings of the subscriptions + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$v); + } + /** + * Details of a specific setting + * @param settingName Auto provisioning setting key + * @param options The options parameters. + */ + get(settingName, options) { + return this.client.sendOperationRequest({ settingName, options }, getOperationSpec$u); + } + /** + * Details of a specific setting + * @param settingName Auto provisioning setting key + * @param setting Auto provisioning setting key + * @param options The options parameters. + */ + create(settingName, setting, options) { + return this.client.sendOperationRequest({ settingName, setting, options }, createOperationSpec$3); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$q); + } +} +// Operation Specifications +const serializer$y = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$v = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AutoProvisioningSettingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$y +}; +const getOperationSpec$u = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings/{settingName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AutoProvisioningSetting + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + settingName1 + ], + headerParameters: [accept], + serializer: serializer$y +}; +const createOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings/{settingName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: AutoProvisioningSetting + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: setting, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + settingName1 + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$y +}; +const listNextOperationSpec$q = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AutoProvisioningSettingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$y +}; + +/* + * 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 containing Compliances operations. */ +class CompliancesImpl { + /** + * Initialize a new instance of the class Compliances class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * The Compliance scores of the specific management group. + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + list(scope, options) { + const iter = this.listPagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(scope, options); + } + }; + } + listPagingPage(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(scope, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * The Compliance scores of the specific management group. + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + _list(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listOperationSpec$u); + } + /** + * Details of a specific Compliance. + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param complianceName name of the Compliance + * @param options The options parameters. + */ + get(scope, complianceName, options) { + return this.client.sendOperationRequest({ scope, complianceName, options }, getOperationSpec$t); + } + /** + * ListNext + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listNextOperationSpec$p); + } +} +// Operation Specifications +const serializer$x = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$u = { + path: "/{scope}/providers/Microsoft.Security/compliances", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ComplianceList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$x +}; +const getOperationSpec$t = { + path: "/{scope}/providers/Microsoft.Security/compliances/{complianceName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Compliance + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + scope, + complianceName + ], + headerParameters: [accept], + serializer: serializer$x +}; +const listNextOperationSpec$p = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ComplianceList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$x +}; + +/* + * 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 containing InformationProtectionPolicies operations. */ +class InformationProtectionPoliciesImpl { + /** + * Initialize a new instance of the class InformationProtectionPolicies class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Information protection policies of a specific management group. + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + list(scope, options) { + const iter = this.listPagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(scope, options); + } + }; + } + listPagingPage(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(scope, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Details of the information protection policy. + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param informationProtectionPolicyName Name of the information protection policy. + * @param options The options parameters. + */ + get(scope, informationProtectionPolicyName, options) { + return this.client.sendOperationRequest({ scope, informationProtectionPolicyName, options }, getOperationSpec$s); + } + /** + * Details of the information protection policy. + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param informationProtectionPolicyName Name of the information protection policy. + * @param informationProtectionPolicy Information protection policy. + * @param options The options parameters. + */ + createOrUpdate(scope, informationProtectionPolicyName, informationProtectionPolicy, options) { + return this.client.sendOperationRequest({ + scope, + informationProtectionPolicyName, + informationProtectionPolicy, + options + }, createOrUpdateOperationSpec$7); + } + /** + * Information protection policies of a specific management group. + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + _list(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listOperationSpec$t); + } + /** + * ListNext + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listNextOperationSpec$o); + } +} +// Operation Specifications +const serializer$w = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$s = { + path: "/{scope}/providers/Microsoft.Security/informationProtectionPolicies/{informationProtectionPolicyName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: InformationProtectionPolicy + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + scope, + informationProtectionPolicyName + ], + headerParameters: [accept], + serializer: serializer$w +}; +const createOrUpdateOperationSpec$7 = { + path: "/{scope}/providers/Microsoft.Security/informationProtectionPolicies/{informationProtectionPolicyName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: InformationProtectionPolicy + }, + 201: { + bodyMapper: InformationProtectionPolicy + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: informationProtectionPolicy, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + scope, + informationProtectionPolicyName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$w +}; +const listOperationSpec$t = { + path: "/{scope}/providers/Microsoft.Security/informationProtectionPolicies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: InformationProtectionPolicyList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$w +}; +const listNextOperationSpec$o = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: InformationProtectionPolicyList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$w +}; + +/* + * 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 containing SecurityContacts operations. */ +class SecurityContactsImpl { + /** + * Initialize a new instance of the class SecurityContacts class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Security contact configurations for the subscription + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Security contact configurations for the subscription + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$s); + } + /** + * Security contact configurations for the subscription + * @param securityContactName Name of the security contact object + * @param options The options parameters. + */ + get(securityContactName, options) { + return this.client.sendOperationRequest({ securityContactName, options }, getOperationSpec$r); + } + /** + * Security contact configurations for the subscription + * @param securityContactName Name of the security contact object + * @param securityContact Security contact object + * @param options The options parameters. + */ + create(securityContactName, securityContact, options) { + return this.client.sendOperationRequest({ securityContactName, securityContact, options }, createOperationSpec$2); + } + /** + * Security contact configurations for the subscription + * @param securityContactName Name of the security contact object + * @param options The options parameters. + */ + delete(securityContactName, options) { + return this.client.sendOperationRequest({ securityContactName, options }, deleteOperationSpec$b); + } + /** + * Security contact configurations for the subscription + * @param securityContactName Name of the security contact object + * @param securityContact Security contact object + * @param options The options parameters. + */ + update(securityContactName, securityContact, options) { + return this.client.sendOperationRequest({ securityContactName, securityContact, options }, updateOperationSpec$4); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$n); + } +} +// Operation Specifications +const serializer$v = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$s = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityContactList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$v +}; +const getOperationSpec$r = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityContact + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + securityContactName + ], + headerParameters: [accept], + serializer: serializer$v +}; +const createOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: SecurityContact + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: securityContact, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + securityContactName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$v +}; +const deleteOperationSpec$b = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}", + httpMethod: "DELETE", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + securityContactName + ], + headerParameters: [accept], + serializer: serializer$v +}; +const updateOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: SecurityContact + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: securityContact, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + securityContactName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$v +}; +const listNextOperationSpec$n = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityContactList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$v +}; + +/* + * 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 containing WorkspaceSettings operations. */ +class WorkspaceSettingsImpl { + /** + * Initialize a new instance of the class WorkspaceSettings class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Settings about where we should store your security data and logs. If the result is empty, it means + * that no custom-workspace configuration was set + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Settings about where we should store your security data and logs. If the result is empty, it means + * that no custom-workspace configuration was set + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$r); + } + /** + * Settings about where we should store your security data and logs. If the result is empty, it means + * that no custom-workspace configuration was set + * @param workspaceSettingName Name of the security setting + * @param options The options parameters. + */ + get(workspaceSettingName, options) { + return this.client.sendOperationRequest({ workspaceSettingName, options }, getOperationSpec$q); + } + /** + * creating settings about where we should store your security data and logs + * @param workspaceSettingName Name of the security setting + * @param workspaceSetting Security data setting object + * @param options The options parameters. + */ + create(workspaceSettingName, workspaceSetting, options) { + return this.client.sendOperationRequest({ workspaceSettingName, workspaceSetting, options }, createOperationSpec$1); + } + /** + * Settings about where we should store your security data and logs + * @param workspaceSettingName Name of the security setting + * @param workspaceSetting Security data setting object + * @param options The options parameters. + */ + update(workspaceSettingName, workspaceSetting, options) { + return this.client.sendOperationRequest({ workspaceSettingName, workspaceSetting, options }, updateOperationSpec$3); + } + /** + * Deletes the custom workspace settings for this subscription. new VMs will report to the default + * workspace + * @param workspaceSettingName Name of the security setting + * @param options The options parameters. + */ + delete(workspaceSettingName, options) { + return this.client.sendOperationRequest({ workspaceSettingName, options }, deleteOperationSpec$a); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$m); + } +} +// Operation Specifications +const serializer$u = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$r = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: WorkspaceSettingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$u +}; +const getOperationSpec$q = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: WorkspaceSetting + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + workspaceSettingName + ], + headerParameters: [accept], + serializer: serializer$u +}; +const createOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: WorkspaceSetting + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: workspaceSetting, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + workspaceSettingName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$u +}; +const updateOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: WorkspaceSetting + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: workspaceSetting, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + workspaceSettingName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$u +}; +const deleteOperationSpec$a = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}", + httpMethod: "DELETE", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + workspaceSettingName + ], + headerParameters: [accept], + serializer: serializer$u +}; +const listNextOperationSpec$m = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: WorkspaceSettingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion7], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$u +}; + +/* + * 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 containing RegulatoryComplianceStandards operations. */ +class RegulatoryComplianceStandardsImpl { + /** + * Initialize a new instance of the class RegulatoryComplianceStandards class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Supported regulatory compliance standards details and state + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Supported regulatory compliance standards details and state + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$q); + } + /** + * Supported regulatory compliance details state for selected standard + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param options The options parameters. + */ + get(regulatoryComplianceStandardName, options) { + return this.client.sendOperationRequest({ regulatoryComplianceStandardName, options }, getOperationSpec$p); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$l); + } +} +// Operation Specifications +const serializer$t = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$q = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceStandardList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion8], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$t +}; +const getOperationSpec$p = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceStandard + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + regulatoryComplianceStandardName + ], + headerParameters: [accept], + serializer: serializer$t +}; +const listNextOperationSpec$l = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceStandardList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion8], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$t +}; + +/* + * 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 containing RegulatoryComplianceControls operations. */ +class RegulatoryComplianceControlsImpl { + /** + * Initialize a new instance of the class RegulatoryComplianceControls class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * All supported regulatory compliance controls details and state for selected standard + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param options The options parameters. + */ + list(regulatoryComplianceStandardName, options) { + const iter = this.listPagingAll(regulatoryComplianceStandardName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(regulatoryComplianceStandardName, options); + } + }; + } + listPagingPage(regulatoryComplianceStandardName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(regulatoryComplianceStandardName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(regulatoryComplianceStandardName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(regulatoryComplianceStandardName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(regulatoryComplianceStandardName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * All supported regulatory compliance controls details and state for selected standard + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param options The options parameters. + */ + _list(regulatoryComplianceStandardName, options) { + return this.client.sendOperationRequest({ regulatoryComplianceStandardName, options }, listOperationSpec$p); + } + /** + * Selected regulatory compliance control details and state + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param regulatoryComplianceControlName Name of the regulatory compliance control object + * @param options The options parameters. + */ + get(regulatoryComplianceStandardName, regulatoryComplianceControlName, options) { + return this.client.sendOperationRequest({ + regulatoryComplianceStandardName, + regulatoryComplianceControlName, + options + }, getOperationSpec$o); + } + /** + * ListNext + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(regulatoryComplianceStandardName, nextLink, options) { + return this.client.sendOperationRequest({ regulatoryComplianceStandardName, nextLink, options }, listNextOperationSpec$k); + } +} +// Operation Specifications +const serializer$s = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$p = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceControlList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion8], + urlParameters: [ + $host, + subscriptionId, + regulatoryComplianceStandardName + ], + headerParameters: [accept], + serializer: serializer$s +}; +const getOperationSpec$o = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceControl + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + regulatoryComplianceStandardName, + regulatoryComplianceControlName + ], + headerParameters: [accept], + serializer: serializer$s +}; +const listNextOperationSpec$k = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceControlList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion8], + urlParameters: [ + $host, + subscriptionId, + nextLink, + regulatoryComplianceStandardName + ], + headerParameters: [accept], + serializer: serializer$s +}; + +/* + * 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 containing RegulatoryComplianceAssessments operations. */ +class RegulatoryComplianceAssessmentsImpl { + /** + * Initialize a new instance of the class RegulatoryComplianceAssessments class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Details and state of assessments mapped to selected regulatory compliance control + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param regulatoryComplianceControlName Name of the regulatory compliance control object + * @param options The options parameters. + */ + list(regulatoryComplianceStandardName, regulatoryComplianceControlName, options) { + const iter = this.listPagingAll(regulatoryComplianceStandardName, regulatoryComplianceControlName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(regulatoryComplianceStandardName, regulatoryComplianceControlName, options); + } + }; + } + listPagingPage(regulatoryComplianceStandardName, regulatoryComplianceControlName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(regulatoryComplianceStandardName, regulatoryComplianceControlName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(regulatoryComplianceStandardName, regulatoryComplianceControlName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(regulatoryComplianceStandardName, regulatoryComplianceControlName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(regulatoryComplianceStandardName, regulatoryComplianceControlName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Details and state of assessments mapped to selected regulatory compliance control + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param regulatoryComplianceControlName Name of the regulatory compliance control object + * @param options The options parameters. + */ + _list(regulatoryComplianceStandardName, regulatoryComplianceControlName, options) { + return this.client.sendOperationRequest({ + regulatoryComplianceStandardName, + regulatoryComplianceControlName, + options + }, listOperationSpec$o); + } + /** + * Supported regulatory compliance details and state for selected assessment + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param regulatoryComplianceControlName Name of the regulatory compliance control object + * @param regulatoryComplianceAssessmentName Name of the regulatory compliance assessment object + * @param options The options parameters. + */ + get(regulatoryComplianceStandardName, regulatoryComplianceControlName, regulatoryComplianceAssessmentName, options) { + return this.client.sendOperationRequest({ + regulatoryComplianceStandardName, + regulatoryComplianceControlName, + regulatoryComplianceAssessmentName, + options + }, getOperationSpec$n); + } + /** + * ListNext + * @param regulatoryComplianceStandardName Name of the regulatory compliance standard object + * @param regulatoryComplianceControlName Name of the regulatory compliance control object + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(regulatoryComplianceStandardName, regulatoryComplianceControlName, nextLink, options) { + return this.client.sendOperationRequest({ + regulatoryComplianceStandardName, + regulatoryComplianceControlName, + nextLink, + options + }, listNextOperationSpec$j); + } +} +// Operation Specifications +const serializer$r = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$o = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceAssessmentList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion8], + urlParameters: [ + $host, + subscriptionId, + regulatoryComplianceStandardName, + regulatoryComplianceControlName + ], + headerParameters: [accept], + serializer: serializer$r +}; +const getOperationSpec$n = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments/{regulatoryComplianceAssessmentName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceAssessment + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + regulatoryComplianceStandardName, + regulatoryComplianceControlName, + regulatoryComplianceAssessmentName + ], + headerParameters: [accept], + serializer: serializer$r +}; +const listNextOperationSpec$j = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RegulatoryComplianceAssessmentList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [filter, apiVersion8], + urlParameters: [ + $host, + subscriptionId, + nextLink, + regulatoryComplianceStandardName, + regulatoryComplianceControlName + ], + headerParameters: [accept], + serializer: serializer$r +}; + +/* + * 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 containing SubAssessments operations. */ +class SubAssessmentsImpl { + /** + * Initialize a new instance of the class SubAssessments class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Get security sub-assessments on all your scanned resources inside a subscription scope + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + listAll(scope, options) { + const iter = this.listAllPagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listAllPagingPage(scope, options); + } + }; + } + listAllPagingPage(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingPage_1() { + let result = yield tslib.__await(this._listAll(scope, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listAllNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listAllPagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listAllPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listAllPagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get security sub-assessments on all your scanned resources inside a scope + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param assessmentName The Assessment Key - Unique key for the assessment type + * @param options The options parameters. + */ + list(scope, assessmentName, options) { + const iter = this.listPagingAll(scope, assessmentName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(scope, assessmentName, options); + } + }; + } + listPagingPage(scope, assessmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(scope, assessmentName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(scope, assessmentName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(scope, assessmentName, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(scope, assessmentName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Get security sub-assessments on all your scanned resources inside a subscription scope + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + _listAll(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listAllOperationSpec); + } + /** + * Get security sub-assessments on all your scanned resources inside a scope + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param assessmentName The Assessment Key - Unique key for the assessment type + * @param options The options parameters. + */ + _list(scope, assessmentName, options) { + return this.client.sendOperationRequest({ scope, assessmentName, options }, listOperationSpec$n); + } + /** + * Get a security sub-assessment on your scanned resource + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param assessmentName The Assessment Key - Unique key for the assessment type + * @param subAssessmentName The Sub-Assessment Key - Unique key for the sub-assessment type + * @param options The options parameters. + */ + get(scope, assessmentName, subAssessmentName, options) { + return this.client.sendOperationRequest({ scope, assessmentName, subAssessmentName, options }, getOperationSpec$m); + } + /** + * ListAllNext + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param nextLink The nextLink from the previous successful call to the ListAll method. + * @param options The options parameters. + */ + _listAllNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listAllNextOperationSpec); + } + /** + * ListNext + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param assessmentName The Assessment Key - Unique key for the assessment type + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(scope, assessmentName, nextLink, options) { + return this.client.sendOperationRequest({ scope, assessmentName, nextLink, options }, listNextOperationSpec$i); + } +} +// Operation Specifications +const serializer$q = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listAllOperationSpec = { + path: "/{scope}/providers/Microsoft.Security/subAssessments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySubAssessmentList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$q +}; +const listOperationSpec$n = { + path: "/{scope}/providers/Microsoft.Security/assessments/{assessmentName}/subAssessments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySubAssessmentList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + scope, + assessmentName + ], + headerParameters: [accept], + serializer: serializer$q +}; +const getOperationSpec$m = { + path: "/{scope}/providers/Microsoft.Security/assessments/{assessmentName}/subAssessments/{subAssessmentName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySubAssessment + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + scope, + assessmentName, + subAssessmentName + ], + headerParameters: [accept], + serializer: serializer$q +}; +const listAllNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySubAssessmentList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$q +}; +const listNextOperationSpec$i = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySubAssessmentList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + nextLink, + scope, + assessmentName + ], + headerParameters: [accept], + serializer: serializer$q +}; + +/* + * 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 containing Automations operations. */ +class AutomationsImpl { + /** + * Initialize a new instance of the class Automations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all the security automations in the specified subscription. Use the 'nextLink' property in the + * response to get the next page of security automations for the specified subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all the security automations in the specified resource group. Use the 'nextLink' property in + * the response to get the next page of security automations for the specified resource group. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listByResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Lists all the security automations in the specified subscription. Use the 'nextLink' property in the + * response to get the next page of security automations for the specified subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$m); + } + /** + * Lists all the security automations in the specified resource group. Use the 'nextLink' property in + * the response to get the next page of security automations for the specified resource group. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$3); + } + /** + * Retrieves information about the model of a security automation. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param automationName The security automation name. + * @param options The options parameters. + */ + get(resourceGroupName, automationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, automationName, options }, getOperationSpec$l); + } + /** + * Creates or updates a security automation. If a security automation is already created and a + * subsequent request is issued for the same automation id, then it will be updated. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param automationName The security automation name. + * @param automation The security automation resource + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, automationName, automation, options) { + return this.client.sendOperationRequest({ resourceGroupName, automationName, automation, options }, createOrUpdateOperationSpec$6); + } + /** + * Deletes a security automation. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param automationName The security automation name. + * @param options The options parameters. + */ + delete(resourceGroupName, automationName, options) { + return this.client.sendOperationRequest({ resourceGroupName, automationName, options }, deleteOperationSpec$9); + } + /** + * Validates the security automation model before create or update. Any validation errors are returned + * to the client. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param automationName The security automation name. + * @param automation The security automation resource + * @param options The options parameters. + */ + validate(resourceGroupName, automationName, automation, options) { + return this.client.sendOperationRequest({ resourceGroupName, automationName, automation, options }, validateOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$h); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$3); + } +} +// Operation Specifications +const serializer$p = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$m = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/automations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AutomationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$p +}; +const listByResourceGroupOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AutomationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$p +}; +const getOperationSpec$l = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Automation + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + automationName + ], + headerParameters: [accept], + serializer: serializer$p +}; +const createOrUpdateOperationSpec$6 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Automation + }, + 201: { + bodyMapper: Automation + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: automation, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + automationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$p +}; +const deleteOperationSpec$9 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}", + httpMethod: "DELETE", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + automationName + ], + headerParameters: [accept], + serializer: serializer$p +}; +const validateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}/validate", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: AutomationValidationStatus + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: automation, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + automationName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$p +}; +const listNextOperationSpec$h = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AutomationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$p +}; +const listByResourceGroupNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AutomationList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer: serializer$p +}; + +/* + * 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 containing AlertsSuppressionRules operations. */ +class AlertsSuppressionRulesImpl { + /** + * Initialize a new instance of the class AlertsSuppressionRules class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List of all the dismiss rules for the given subscription + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List of all the dismiss rules for the given subscription + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$l); + } + /** + * Get dismiss rule, with name: {alertsSuppressionRuleName}, for the given subscription + * @param alertsSuppressionRuleName The unique name of the suppression alert rule + * @param options The options parameters. + */ + get(alertsSuppressionRuleName, options) { + return this.client.sendOperationRequest({ alertsSuppressionRuleName, options }, getOperationSpec$k); + } + /** + * Update existing rule or create new rule if it doesn't exist + * @param alertsSuppressionRuleName The unique name of the suppression alert rule + * @param alertsSuppressionRule Suppression rule object + * @param options The options parameters. + */ + update(alertsSuppressionRuleName, alertsSuppressionRule, options) { + return this.client.sendOperationRequest({ alertsSuppressionRuleName, alertsSuppressionRule, options }, updateOperationSpec$2); + } + /** + * Delete dismiss alert rule for this subscription. + * @param alertsSuppressionRuleName The unique name of the suppression alert rule + * @param options The options parameters. + */ + delete(alertsSuppressionRuleName, options) { + return this.client.sendOperationRequest({ alertsSuppressionRuleName, options }, deleteOperationSpec$8); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$g); + } +} +// Operation Specifications +const serializer$o = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$l = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertsSuppressionRulesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8, alertType], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$o +}; +const getOperationSpec$k = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertsSuppressionRule + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + alertsSuppressionRuleName + ], + headerParameters: [accept], + serializer: serializer$o +}; +const updateOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: AlertsSuppressionRule + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: alertsSuppressionRule, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + alertsSuppressionRuleName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$o +}; +const deleteOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}", + httpMethod: "DELETE", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8], + urlParameters: [ + $host, + subscriptionId, + alertsSuppressionRuleName + ], + headerParameters: [accept], + serializer: serializer$o +}; +const listNextOperationSpec$g = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertsSuppressionRulesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion8, alertType], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$o +}; + +/* + * 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 LroImpl { + constructor(sendOperationFn, args, spec, requestPath = spec.path, requestMethod = spec.httpMethod) { + this.sendOperationFn = sendOperationFn; + this.args = args; + this.spec = spec; + this.requestPath = requestPath; + this.requestMethod = requestMethod; + } + sendInitialRequest() { + return tslib.__awaiter(this, void 0, void 0, function* () { + return this.sendOperationFn(this.args, this.spec); + }); + } + sendPollRequest(path) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const _a = this.spec, restSpec = tslib.__rest(_a, ["requestBody"]); + return this.sendOperationFn(this.args, Object.assign(Object.assign({}, restSpec), { path, httpMethod: "GET" })); + }); + } +} + +/* + * 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 containing ServerVulnerabilityAssessmentOperations operations. */ +class ServerVulnerabilityAssessmentOperationsImpl { + /** + * Initialize a new instance of the class ServerVulnerabilityAssessmentOperations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of server vulnerability assessment onboarding statuses on a given resource. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + listByExtendedResource(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + options + }, listByExtendedResourceOperationSpec$2); + } + /** + * Gets a server vulnerability assessment onboarding statuses on a given resource. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + get(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + options + }, getOperationSpec$j); + } + /** + * Creating a server vulnerability assessment on a resource, which will onboard a resource for having a + * vulnerability assessment on it + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + options + }, createOrUpdateOperationSpec$5); + } + /** + * Removing server vulnerability assessment from a resource. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + beginDelete(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON() + } + }; + }); + const lro = new LroImpl(sendOperation, { + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + options + }, deleteOperationSpec$7); + const poller = new coreLro.LroEngine(lro, { + resumeFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs, + lroResourceLocationConfig: "location" + }); + yield poller.poll(); + return poller; + }); + } + /** + * Removing server vulnerability assessment from a resource. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + beginDeleteAndWait(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginDelete(resourceGroupName, resourceNamespace, resourceType, resourceName, options); + return poller.pollUntilDone(); + }); + } +} +// Operation Specifications +const serializer$n = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listByExtendedResourceOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ServerVulnerabilityAssessmentsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$n +}; +const getOperationSpec$j = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ServerVulnerabilityAssessment + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + serverVulnerabilityAssessment + ], + headerParameters: [accept], + serializer: serializer$n +}; +const createOrUpdateOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}", + httpMethod: "PUT", + responses: { + 202: { + bodyMapper: ServerVulnerabilityAssessment + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + serverVulnerabilityAssessment + ], + headerParameters: [accept], + serializer: serializer$n +}; +const deleteOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}", + httpMethod: "DELETE", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + serverVulnerabilityAssessment + ], + headerParameters: [accept], + serializer: serializer$n +}; + +/* + * 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 containing AssessmentsMetadata operations. */ +class AssessmentsMetadataImpl { + /** + * Initialize a new instance of the class AssessmentsMetadata class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Get metadata information on all assessment types + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get metadata information on all assessment types in a specific subscription + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listBySubscriptionPagingPage(options); + } + }; + } + listBySubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listBySubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Get metadata information on all assessment types + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$k); + } + /** + * Get metadata information on an assessment type + * @param assessmentMetadataName The Assessment Key - Unique key for the assessment type + * @param options The options parameters. + */ + get(assessmentMetadataName, options) { + return this.client.sendOperationRequest({ assessmentMetadataName, options }, getOperationSpec$i); + } + /** + * Get metadata information on all assessment types in a specific subscription + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$2); + } + /** + * Get metadata information on an assessment type in a specific subscription + * @param assessmentMetadataName The Assessment Key - Unique key for the assessment type + * @param options The options parameters. + */ + getInSubscription(assessmentMetadataName, options) { + return this.client.sendOperationRequest({ assessmentMetadataName, options }, getInSubscriptionOperationSpec); + } + /** + * Create metadata information on an assessment type in a specific subscription + * @param assessmentMetadataName The Assessment Key - Unique key for the assessment type + * @param assessmentMetadata AssessmentMetadata object + * @param options The options parameters. + */ + createInSubscription(assessmentMetadataName, assessmentMetadata, options) { + return this.client.sendOperationRequest({ assessmentMetadataName, assessmentMetadata, options }, createInSubscriptionOperationSpec); + } + /** + * Delete metadata information on an assessment type in a specific subscription, will cause the + * deletion of all the assessments of that type in that subscription + * @param assessmentMetadataName The Assessment Key - Unique key for the assessment type + * @param options The options parameters. + */ + deleteInSubscription(assessmentMetadataName, options) { + return this.client.sendOperationRequest({ assessmentMetadataName, options }, deleteInSubscriptionOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$f); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$2); + } +} +// Operation Specifications +const serializer$m = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$k = { + path: "/providers/Microsoft.Security/assessmentMetadata", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentMetadataResponseList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$m +}; +const getOperationSpec$i = { + path: "/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentMetadataResponse + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [$host, assessmentMetadataName], + headerParameters: [accept], + serializer: serializer$m +}; +const listBySubscriptionOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentMetadataResponseList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$m +}; +const getInSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentMetadataResponse + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [ + $host, + subscriptionId, + assessmentMetadataName + ], + headerParameters: [accept], + serializer: serializer$m +}; +const createInSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: SecurityAssessmentMetadataResponse + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: assessmentMetadata, + queryParameters: [apiVersion10], + urlParameters: [ + $host, + subscriptionId, + assessmentMetadataName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$m +}; +const deleteInSubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}", + httpMethod: "DELETE", + responses: { + 200: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [ + $host, + subscriptionId, + assessmentMetadataName + ], + headerParameters: [accept], + serializer: serializer$m +}; +const listNextOperationSpec$f = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentMetadataResponseList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [$host, nextLink], + headerParameters: [accept], + serializer: serializer$m +}; +const listBySubscriptionNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentMetadataResponseList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$m +}; + +/* + * 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 containing Assessments operations. */ +class AssessmentsImpl { + /** + * Initialize a new instance of the class Assessments class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Get security assessments on all your scanned resources inside a scope + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + list(scope, options) { + const iter = this.listPagingAll(scope, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(scope, options); + } + }; + } + listPagingPage(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(scope, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(scope, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(scope, options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(scope, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get security assessments on all your scanned resources inside a scope + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param options The options parameters. + */ + _list(scope, options) { + return this.client.sendOperationRequest({ scope, options }, listOperationSpec$j); + } + /** + * Get a security assessment on your scanned resource + * @param resourceId The identifier of the resource. + * @param assessmentName The Assessment Key - Unique key for the assessment type + * @param options The options parameters. + */ + get(resourceId, assessmentName, options) { + return this.client.sendOperationRequest({ resourceId, assessmentName, options }, getOperationSpec$h); + } + /** + * Create a security assessment on your resource. An assessment metadata that describes this assessment + * must be predefined with the same name before inserting the assessment result + * @param resourceId The identifier of the resource. + * @param assessmentName The Assessment Key - Unique key for the assessment type + * @param assessment Calculated assessment on a pre-defined assessment metadata + * @param options The options parameters. + */ + createOrUpdate(resourceId, assessmentName, assessment, options) { + return this.client.sendOperationRequest({ resourceId, assessmentName, assessment, options }, createOrUpdateOperationSpec$4); + } + /** + * Delete a security assessment on your resource. An assessment metadata that describes this assessment + * must be predefined with the same name before inserting the assessment result + * @param resourceId The identifier of the resource. + * @param assessmentName The Assessment Key - Unique key for the assessment type + * @param options The options parameters. + */ + delete(resourceId, assessmentName, options) { + return this.client.sendOperationRequest({ resourceId, assessmentName, options }, deleteOperationSpec$6); + } + /** + * ListNext + * @param scope Scope of the query, can be subscription + * (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management group + * (/providers/Microsoft.Management/managementGroups/mgName). + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(scope, nextLink, options) { + return this.client.sendOperationRequest({ scope, nextLink, options }, listNextOperationSpec$e); + } +} +// Operation Specifications +const serializer$l = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$j = { + path: "/{scope}/providers/Microsoft.Security/assessments", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [$host, scope], + headerParameters: [accept], + serializer: serializer$l +}; +const getOperationSpec$h = { + path: "/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentResponse + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10, expand], + urlParameters: [ + $host, + resourceId, + assessmentName + ], + headerParameters: [accept], + serializer: serializer$l +}; +const createOrUpdateOperationSpec$4 = { + path: "/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: SecurityAssessmentResponse + }, + 201: { + bodyMapper: SecurityAssessmentResponse + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: assessment, + queryParameters: [apiVersion10], + urlParameters: [ + $host, + resourceId, + assessmentName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$l +}; +const deleteOperationSpec$6 = { + path: "/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [ + $host, + resourceId, + assessmentName + ], + headerParameters: [accept], + serializer: serializer$l +}; +const listNextOperationSpec$e = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityAssessmentList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion10], + urlParameters: [$host, nextLink, scope], + headerParameters: [accept], + serializer: serializer$l +}; + +/* + * 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 containing AdaptiveApplicationControls operations. */ +class AdaptiveApplicationControlsImpl { + /** + * Initialize a new instance of the class AdaptiveApplicationControls class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of application control machine groups for the subscription. + * @param options The options parameters. + */ + list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$i); + } + /** + * Gets an application control VM/server group. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param groupName Name of an application control machine group + * @param options The options parameters. + */ + get(ascLocation, groupName, options) { + return this.client.sendOperationRequest({ ascLocation, groupName, options }, getOperationSpec$g); + } + /** + * Update an application control machine group + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param groupName Name of an application control machine group + * @param body + * @param options The options parameters. + */ + put(ascLocation, groupName, body, options) { + return this.client.sendOperationRequest({ ascLocation, groupName, body, options }, putOperationSpec); + } + /** + * Delete an application control machine group + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param groupName Name of an application control machine group + * @param options The options parameters. + */ + delete(ascLocation, groupName, options) { + return this.client.sendOperationRequest({ ascLocation, groupName, options }, deleteOperationSpec$5); + } +} +// Operation Specifications +const serializer$k = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$i = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/applicationWhitelistings", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AdaptiveApplicationControlGroups + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [ + apiVersion9, + includePathRecommendations, + summary + ], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$k +}; +const getOperationSpec$g = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AdaptiveApplicationControlGroup + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + groupName + ], + headerParameters: [accept], + serializer: serializer$k +}; +const putOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: AdaptiveApplicationControlGroup + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: body, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + groupName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$k +}; +const deleteOperationSpec$5 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + groupName + ], + headerParameters: [accept], + serializer: serializer$k +}; + +/* + * 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 containing AdaptiveNetworkHardenings operations. */ +class AdaptiveNetworkHardeningsImpl { + /** + * Initialize a new instance of the class AdaptiveNetworkHardenings class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of Adaptive Network Hardenings resources in scope of an extended resource. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + listByExtendedResource(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + const iter = this.listByExtendedResourcePagingAll(resourceGroupName, resourceNamespace, resourceType, resourceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByExtendedResourcePagingPage(resourceGroupName, resourceNamespace, resourceType, resourceName, options); + } + }; + } + listByExtendedResourcePagingPage(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByExtendedResourcePagingPage_1() { + let result = yield tslib.__await(this._listByExtendedResource(resourceGroupName, resourceNamespace, resourceType, resourceName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByExtendedResourceNext(resourceGroupName, resourceNamespace, resourceType, resourceName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByExtendedResourcePagingAll(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByExtendedResourcePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listByExtendedResourcePagingPage(resourceGroupName, resourceNamespace, resourceType, resourceName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list of Adaptive Network Hardenings resources in scope of an extended resource. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + _listByExtendedResource(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + options + }, listByExtendedResourceOperationSpec$1); + } + /** + * Gets a single Adaptive Network Hardening resource + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param adaptiveNetworkHardeningResourceName The name of the Adaptive Network Hardening resource. + * @param options The options parameters. + */ + get(resourceGroupName, resourceNamespace, resourceType, resourceName, adaptiveNetworkHardeningResourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + adaptiveNetworkHardeningResourceName, + options + }, getOperationSpec$f); + } + /** + * Enforces the given rules on the NSG(s) listed in the request + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param adaptiveNetworkHardeningResourceName The name of the Adaptive Network Hardening resource. + * @param body + * @param options The options parameters. + */ + beginEnforce(resourceGroupName, resourceNamespace, resourceType, resourceName, adaptiveNetworkHardeningResourceName, body, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const directSendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + return this.client.sendOperationRequest(args, spec); + }); + const sendOperation = (args, spec) => tslib.__awaiter(this, void 0, void 0, function* () { + var _a; + let currentRawResponse = undefined; + const providedCallback = (_a = args.options) === null || _a === void 0 ? void 0 : _a.onResponse; + const callback = (rawResponse, flatResponse) => { + currentRawResponse = rawResponse; + providedCallback === null || providedCallback === void 0 ? void 0 : providedCallback(rawResponse, flatResponse); + }; + const updatedArgs = Object.assign(Object.assign({}, args), { options: Object.assign(Object.assign({}, args.options), { onResponse: callback }) }); + const flatResponse = yield directSendOperation(updatedArgs, spec); + return { + flatResponse, + rawResponse: { + statusCode: currentRawResponse.status, + body: currentRawResponse.parsedBody, + headers: currentRawResponse.headers.toJSON() + } + }; + }); + const lro = new LroImpl(sendOperation, { + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + adaptiveNetworkHardeningResourceName, + body, + options + }, enforceOperationSpec); + const poller = new coreLro.LroEngine(lro, { + resumeFrom: options === null || options === void 0 ? void 0 : options.resumeFrom, + intervalInMs: options === null || options === void 0 ? void 0 : options.updateIntervalInMs + }); + yield poller.poll(); + return poller; + }); + } + /** + * Enforces the given rules on the NSG(s) listed in the request + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param adaptiveNetworkHardeningResourceName The name of the Adaptive Network Hardening resource. + * @param body + * @param options The options parameters. + */ + beginEnforceAndWait(resourceGroupName, resourceNamespace, resourceType, resourceName, adaptiveNetworkHardeningResourceName, body, options) { + return tslib.__awaiter(this, void 0, void 0, function* () { + const poller = yield this.beginEnforce(resourceGroupName, resourceNamespace, resourceType, resourceName, adaptiveNetworkHardeningResourceName, body, options); + return poller.pollUntilDone(); + }); + } + /** + * ListByExtendedResourceNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The Namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param nextLink The nextLink from the previous successful call to the ListByExtendedResource method. + * @param options The options parameters. + */ + _listByExtendedResourceNext(resourceGroupName, resourceNamespace, resourceType, resourceName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + nextLink, + options + }, listByExtendedResourceNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$j = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listByExtendedResourceOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AdaptiveNetworkHardeningsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$j +}; +const getOperationSpec$f = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings/{adaptiveNetworkHardeningResourceName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AdaptiveNetworkHardening + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + adaptiveNetworkHardeningResourceName + ], + headerParameters: [accept], + serializer: serializer$j +}; +const enforceOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings/{adaptiveNetworkHardeningResourceName}/{adaptiveNetworkHardeningEnforceAction}", + httpMethod: "POST", + responses: { + 200: {}, + 201: {}, + 202: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + requestBody: body1, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + adaptiveNetworkHardeningResourceName, + adaptiveNetworkHardeningEnforceAction + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$j +}; +const listByExtendedResourceNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AdaptiveNetworkHardeningsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink, + resourceNamespace, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$j +}; + +/* + * 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 containing AllowedConnections operations. */ +class AllowedConnectionsImpl { + /** + * Initialize a new instance of the class AllowedConnections class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the list of all possible traffic between resources for the subscription + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets the list of all possible traffic between resources for the subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByHomeRegion(ascLocation, options) { + const iter = this.listByHomeRegionPagingAll(ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByHomeRegionPagingPage(ascLocation, options); + } + }; + } + listByHomeRegionPagingPage(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingPage_1() { + let result = yield tslib.__await(this._listByHomeRegion(ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByHomeRegionNext(ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByHomeRegionPagingAll(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByHomeRegionPagingPage(ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets the list of all possible traffic between resources for the subscription + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$h); + } + /** + * Gets the list of all possible traffic between resources for the subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listByHomeRegion(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, listByHomeRegionOperationSpec$4); + } + /** + * Gets the list of all possible traffic between resources for the subscription and location, based on + * connection type. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param connectionType The type of allowed connections (Internal, External) + * @param options The options parameters. + */ + get(resourceGroupName, ascLocation, connectionType, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, connectionType, options }, getOperationSpec$e); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$d); + } + /** + * ListByHomeRegionNext + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListByHomeRegion method. + * @param options The options parameters. + */ + _listByHomeRegionNext(ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ ascLocation, nextLink, options }, listByHomeRegionNextOperationSpec$3); + } +} +// Operation Specifications +const serializer$i = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$h = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/allowedConnections", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AllowedConnectionsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$i +}; +const listByHomeRegionOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/allowedConnections", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AllowedConnectionsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$i +}; +const getOperationSpec$e = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/allowedConnections/{connectionType}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AllowedConnectionsResource + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + connectionType + ], + headerParameters: [accept], + serializer: serializer$i +}; +const listNextOperationSpec$d = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AllowedConnectionsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$i +}; +const listByHomeRegionNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AllowedConnectionsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$i +}; + +/* + * 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 containing Topology operations. */ +class TopologyImpl { + /** + * Initialize a new instance of the class Topology class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list that allows to build a topology view of a subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list that allows to build a topology view of a subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByHomeRegion(ascLocation, options) { + const iter = this.listByHomeRegionPagingAll(ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByHomeRegionPagingPage(ascLocation, options); + } + }; + } + listByHomeRegionPagingPage(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingPage_1() { + let result = yield tslib.__await(this._listByHomeRegion(ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByHomeRegionNext(ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByHomeRegionPagingAll(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByHomeRegionPagingPage(ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets a list that allows to build a topology view of a subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$g); + } + /** + * Gets a list that allows to build a topology view of a subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listByHomeRegion(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, listByHomeRegionOperationSpec$3); + } + /** + * Gets a specific topology component. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param topologyResourceName Name of a topology resources collection. + * @param options The options parameters. + */ + get(resourceGroupName, ascLocation, topologyResourceName, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, topologyResourceName, options }, getOperationSpec$d); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$c); + } + /** + * ListByHomeRegionNext + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListByHomeRegion method. + * @param options The options parameters. + */ + _listByHomeRegionNext(ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ ascLocation, nextLink, options }, listByHomeRegionNextOperationSpec$2); + } +} +// Operation Specifications +const serializer$h = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$g = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/topologies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: TopologyList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$h +}; +const listByHomeRegionOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/topologies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: TopologyList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$h +}; +const getOperationSpec$d = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/topologies/{topologyResourceName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: TopologyResource + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + topologyResourceName + ], + headerParameters: [accept], + serializer: serializer$h +}; +const listNextOperationSpec$c = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: TopologyList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$h +}; +const listByHomeRegionNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: TopologyList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$h +}; + +/* + * 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 containing JitNetworkAccessPolicies operations. */ +class JitNetworkAccessPoliciesImpl { + /** + * Initialize a new instance of the class JitNetworkAccessPolicies class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Policies for protecting resources using Just-in-Time access control. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Policies for protecting resources using Just-in-Time access control for the subscription, location + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByRegion(ascLocation, options) { + const iter = this.listByRegionPagingAll(ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByRegionPagingPage(ascLocation, options); + } + }; + } + listByRegionPagingPage(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByRegionPagingPage_1() { + let result = yield tslib.__await(this._listByRegion(ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByRegionNext(ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByRegionPagingAll(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByRegionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByRegionPagingPage(ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Policies for protecting resources using Just-in-Time access control for the subscription, location + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listByResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * Policies for protecting resources using Just-in-Time access control for the subscription, location + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByResourceGroupAndRegion(resourceGroupName, ascLocation, options) { + const iter = this.listByResourceGroupAndRegionPagingAll(resourceGroupName, ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupAndRegionPagingPage(resourceGroupName, ascLocation, options); + } + }; + } + listByResourceGroupAndRegionPagingPage(resourceGroupName, ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupAndRegionPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroupAndRegion(resourceGroupName, ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupAndRegionNext(resourceGroupName, ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupAndRegionPagingAll(resourceGroupName, ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupAndRegionPagingAll_1() { + var e_4, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupAndRegionPagingPage(resourceGroupName, ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * Policies for protecting resources using Just-in-Time access control. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$f); + } + /** + * Policies for protecting resources using Just-in-Time access control for the subscription, location + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listByRegion(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, listByRegionOperationSpec); + } + /** + * Policies for protecting resources using Just-in-Time access control for the subscription, location + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$2); + } + /** + * Policies for protecting resources using Just-in-Time access control for the subscription, location + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listByResourceGroupAndRegion(resourceGroupName, ascLocation, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, options }, listByResourceGroupAndRegionOperationSpec); + } + /** + * Policies for protecting resources using Just-in-Time access control for the subscription, location + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param jitNetworkAccessPolicyName Name of a Just-in-Time access configuration policy. + * @param options The options parameters. + */ + get(resourceGroupName, ascLocation, jitNetworkAccessPolicyName, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, jitNetworkAccessPolicyName, options }, getOperationSpec$c); + } + /** + * Create a policy for protecting resources using Just-in-Time access control + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param jitNetworkAccessPolicyName Name of a Just-in-Time access configuration policy. + * @param body + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, ascLocation, jitNetworkAccessPolicyName, body, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + ascLocation, + jitNetworkAccessPolicyName, + body, + options + }, createOrUpdateOperationSpec$3); + } + /** + * Delete a Just-in-Time access control policy. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param jitNetworkAccessPolicyName Name of a Just-in-Time access configuration policy. + * @param options The options parameters. + */ + delete(resourceGroupName, ascLocation, jitNetworkAccessPolicyName, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, jitNetworkAccessPolicyName, options }, deleteOperationSpec$4); + } + /** + * Initiate a JIT access from a specific Just-in-Time policy configuration. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param jitNetworkAccessPolicyName Name of a Just-in-Time access configuration policy. + * @param body + * @param options The options parameters. + */ + initiate(resourceGroupName, ascLocation, jitNetworkAccessPolicyName, body, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + ascLocation, + jitNetworkAccessPolicyName, + body, + options + }, initiateOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$b); + } + /** + * ListByRegionNext + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListByRegion method. + * @param options The options parameters. + */ + _listByRegionNext(ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ ascLocation, nextLink, options }, listByRegionNextOperationSpec); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$2); + } + /** + * ListByResourceGroupAndRegionNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroupAndRegion + * method. + * @param options The options parameters. + */ + _listByResourceGroupAndRegionNext(resourceGroupName, ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, nextLink, options }, listByResourceGroupAndRegionNextOperationSpec); + } +} +// Operation Specifications +const serializer$g = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$f = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/jitNetworkAccessPolicies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPoliciesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$g +}; +const listByRegionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPoliciesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$g +}; +const listByResourceGroupOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/jitNetworkAccessPolicies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPoliciesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$g +}; +const listByResourceGroupAndRegionOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPoliciesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$g +}; +const getOperationSpec$c = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPolicy + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + jitNetworkAccessPolicyName + ], + headerParameters: [accept], + serializer: serializer$g +}; +const createOrUpdateOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: JitNetworkAccessPolicy + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: body2, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + jitNetworkAccessPolicyName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$g +}; +const deleteOperationSpec$4 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + jitNetworkAccessPolicyName + ], + headerParameters: [accept], + serializer: serializer$g +}; +const initiateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}/{jitNetworkAccessPolicyInitiateType}", + httpMethod: "POST", + responses: { + 202: { + bodyMapper: JitNetworkAccessRequest + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: body3, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + jitNetworkAccessPolicyName, + jitNetworkAccessPolicyInitiateType + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$g +}; +const listNextOperationSpec$b = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPoliciesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$g +}; +const listByRegionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPoliciesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$g +}; +const listByResourceGroupNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPoliciesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer: serializer$g +}; +const listByResourceGroupAndRegionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: JitNetworkAccessPoliciesList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$g +}; + +/* + * 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 containing DiscoveredSecuritySolutions operations. */ +class DiscoveredSecuritySolutionsImpl { + /** + * Initialize a new instance of the class DiscoveredSecuritySolutions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of discovered Security Solutions for the subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list of discovered Security Solutions for the subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByHomeRegion(ascLocation, options) { + const iter = this.listByHomeRegionPagingAll(ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByHomeRegionPagingPage(ascLocation, options); + } + }; + } + listByHomeRegionPagingPage(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingPage_1() { + let result = yield tslib.__await(this._listByHomeRegion(ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByHomeRegionNext(ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByHomeRegionPagingAll(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByHomeRegionPagingPage(ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets a list of discovered Security Solutions for the subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$e); + } + /** + * Gets a list of discovered Security Solutions for the subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listByHomeRegion(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, listByHomeRegionOperationSpec$2); + } + /** + * Gets a specific discovered Security Solution. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param discoveredSecuritySolutionName Name of a discovered security solution. + * @param options The options parameters. + */ + get(resourceGroupName, ascLocation, discoveredSecuritySolutionName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + ascLocation, + discoveredSecuritySolutionName, + options + }, getOperationSpec$b); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$a); + } + /** + * ListByHomeRegionNext + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListByHomeRegion method. + * @param options The options parameters. + */ + _listByHomeRegionNext(ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ ascLocation, nextLink, options }, listByHomeRegionNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$f = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$e = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/discoveredSecuritySolutions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiscoveredSecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$f +}; +const listByHomeRegionOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/discoveredSecuritySolutions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiscoveredSecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$f +}; +const getOperationSpec$b = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/discoveredSecuritySolutions/{discoveredSecuritySolutionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiscoveredSecuritySolution + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + discoveredSecuritySolutionName + ], + headerParameters: [accept], + serializer: serializer$f +}; +const listNextOperationSpec$a = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiscoveredSecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$f +}; +const listByHomeRegionNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: DiscoveredSecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$f +}; + +/* + * 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 containing SecuritySolutionsReferenceDataOperations operations. */ +class SecuritySolutionsReferenceDataOperationsImpl { + /** + * Initialize a new instance of the class SecuritySolutionsReferenceDataOperations class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of all supported Security Solutions for the subscription. + * @param options The options parameters. + */ + list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$d); + } + /** + * Gets list of all supported Security Solutions for subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByHomeRegion(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, listByHomeRegionOperationSpec$1); + } +} +// Operation Specifications +const serializer$e = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$d = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/securitySolutionsReferenceData", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySolutionsReferenceDataList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$e +}; +const listByHomeRegionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/securitySolutionsReferenceData", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySolutionsReferenceDataList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$e +}; + +/* + * 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 containing ExternalSecuritySolutions operations. */ +class ExternalSecuritySolutionsImpl { + /** + * Initialize a new instance of the class ExternalSecuritySolutions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of external security solutions for the subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list of external Security Solutions for the subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listByHomeRegion(ascLocation, options) { + const iter = this.listByHomeRegionPagingAll(ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByHomeRegionPagingPage(ascLocation, options); + } + }; + } + listByHomeRegionPagingPage(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingPage_1() { + let result = yield tslib.__await(this._listByHomeRegion(ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByHomeRegionNext(ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByHomeRegionPagingAll(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listByHomeRegionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByHomeRegionPagingPage(ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets a list of external security solutions for the subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$c); + } + /** + * Gets a list of external Security Solutions for the subscription and location. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listByHomeRegion(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, listByHomeRegionOperationSpec); + } + /** + * Gets a specific external Security Solution. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param externalSecuritySolutionsName Name of an external security solution. + * @param options The options parameters. + */ + get(resourceGroupName, ascLocation, externalSecuritySolutionsName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + ascLocation, + externalSecuritySolutionsName, + options + }, getOperationSpec$a); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$9); + } + /** + * ListByHomeRegionNext + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListByHomeRegion method. + * @param options The options parameters. + */ + _listByHomeRegionNext(ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ ascLocation, nextLink, options }, listByHomeRegionNextOperationSpec); + } +} +// Operation Specifications +const serializer$d = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$c = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/externalSecuritySolutions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ExternalSecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$d +}; +const listByHomeRegionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/ExternalSecuritySolutions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ExternalSecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$d +}; +const getOperationSpec$a = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/ExternalSecuritySolutions/{externalSecuritySolutionsName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ExternalSecuritySolution + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + externalSecuritySolutionsName + ], + headerParameters: [accept], + serializer: serializer$d +}; +const listNextOperationSpec$9 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ExternalSecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$d +}; +const listByHomeRegionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ExternalSecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$d +}; + +/* + * 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 containing SecureScores operations. */ +class SecureScoresImpl { + /** + * Initialize a new instance of the class SecureScores class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List secure scores for all your Security Center initiatives within your current scope. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List secure scores for all your Security Center initiatives within your current scope. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$b); + } + /** + * Get secure score for a specific Security Center initiative within your current scope. For the ASC + * Default initiative, use 'ascScore'. + * @param secureScoreName The initiative name. For the ASC Default initiative, use 'ascScore' as in the + * sample request below. + * @param options The options parameters. + */ + get(secureScoreName, options) { + return this.client.sendOperationRequest({ secureScoreName, options }, getOperationSpec$9); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$8); + } +} +// Operation Specifications +const serializer$c = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$b = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoresList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$c +}; +const getOperationSpec$9 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores/{secureScoreName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreItem + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + secureScoreName + ], + headerParameters: [accept], + serializer: serializer$c +}; +const listNextOperationSpec$8 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoresList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$c +}; + +/* + * 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 containing SecureScoreControls operations. */ +class SecureScoreControlsImpl { + /** + * Initialize a new instance of the class SecureScoreControls class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Get all security controls for a specific initiative within a scope + * @param secureScoreName The initiative name. For the ASC Default initiative, use 'ascScore' as in the + * sample request below. + * @param options The options parameters. + */ + listBySecureScore(secureScoreName, options) { + const iter = this.listBySecureScorePagingAll(secureScoreName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listBySecureScorePagingPage(secureScoreName, options); + } + }; + } + listBySecureScorePagingPage(secureScoreName, options) { + return tslib.__asyncGenerator(this, arguments, function* listBySecureScorePagingPage_1() { + let result = yield tslib.__await(this._listBySecureScore(secureScoreName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listBySecureScoreNext(secureScoreName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listBySecureScorePagingAll(secureScoreName, options) { + return tslib.__asyncGenerator(this, arguments, function* listBySecureScorePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listBySecureScorePagingPage(secureScoreName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Get all security controls within a scope + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Get all security controls for a specific initiative within a scope + * @param secureScoreName The initiative name. For the ASC Default initiative, use 'ascScore' as in the + * sample request below. + * @param options The options parameters. + */ + _listBySecureScore(secureScoreName, options) { + return this.client.sendOperationRequest({ secureScoreName, options }, listBySecureScoreOperationSpec); + } + /** + * Get all security controls within a scope + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$a); + } + /** + * ListBySecureScoreNext + * @param secureScoreName The initiative name. For the ASC Default initiative, use 'ascScore' as in the + * sample request below. + * @param nextLink The nextLink from the previous successful call to the ListBySecureScore method. + * @param options The options parameters. + */ + _listBySecureScoreNext(secureScoreName, nextLink, options) { + return this.client.sendOperationRequest({ secureScoreName, nextLink, options }, listBySecureScoreNextOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$7); + } +} +// Operation Specifications +const serializer$b = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listBySecureScoreOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores/{secureScoreName}/secureScoreControls", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreControlList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9, expand1], + urlParameters: [ + $host, + subscriptionId, + secureScoreName + ], + headerParameters: [accept], + serializer: serializer$b +}; +const listOperationSpec$a = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScoreControls", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreControlList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9, expand1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$b +}; +const listBySecureScoreNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreControlList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9, expand1], + urlParameters: [ + $host, + subscriptionId, + nextLink, + secureScoreName + ], + headerParameters: [accept], + serializer: serializer$b +}; +const listNextOperationSpec$7 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreControlList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9, expand1], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$b +}; + +/* + * 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 containing SecureScoreControlDefinitions operations. */ +class SecureScoreControlDefinitionsImpl { + /** + * Initialize a new instance of the class SecureScoreControlDefinitions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List the available security controls, their assessments, and the max score + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * For a specified subscription, list the available security controls, their assessments, and the max + * score + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listBySubscriptionPagingPage(options); + } + }; + } + listBySubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listBySubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * List the available security controls, their assessments, and the max score + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$9); + } + /** + * For a specified subscription, list the available security controls, their assessments, and the max + * score + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec$1); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$6); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$a = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$9 = { + path: "/providers/Microsoft.Security/secureScoreControlDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreControlDefinitionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host], + headerParameters: [accept], + serializer: serializer$a +}; +const listBySubscriptionOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScoreControlDefinitions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreControlDefinitionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$a +}; +const listNextOperationSpec$6 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreControlDefinitionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, nextLink], + headerParameters: [accept], + serializer: serializer$a +}; +const listBySubscriptionNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecureScoreControlDefinitionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$a +}; + +/* + * 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 containing SecuritySolutions operations. */ +class SecuritySolutionsImpl { + /** + * Initialize a new instance of the class SecuritySolutions class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets a list of Security Solutions for the subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets a list of Security Solutions for the subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$8); + } + /** + * Gets a specific Security Solution. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param securitySolutionName Name of security solution. + * @param options The options parameters. + */ + get(resourceGroupName, ascLocation, securitySolutionName, options) { + return this.client.sendOperationRequest({ resourceGroupName, ascLocation, securitySolutionName, options }, getOperationSpec$8); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$5); + } +} +// Operation Specifications +const serializer$9 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/securitySolutions", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$9 +}; +const getOperationSpec$8 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/securitySolutions/{securitySolutionName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySolution + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + securitySolutionName + ], + headerParameters: [accept], + serializer: serializer$9 +}; +const listNextOperationSpec$5 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecuritySolutionList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion9], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$9 +}; + +/* + * 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 containing Connectors operations. */ +class ConnectorsImpl { + /** + * Initialize a new instance of the class Connectors class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Cloud accounts connectors of a subscription + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Cloud accounts connectors of a subscription + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$7); + } + /** + * Details of a specific cloud account connector + * @param connectorName Name of the cloud account connector + * @param options The options parameters. + */ + get(connectorName, options) { + return this.client.sendOperationRequest({ connectorName, options }, getOperationSpec$7); + } + /** + * Create a cloud account connector or update an existing one. Connect to your cloud account. For AWS, + * use either account credentials or role-based authentication. For GCP, use account organization + * credentials. + * @param connectorName Name of the cloud account connector + * @param connectorSetting Settings for the cloud account connector + * @param options The options parameters. + */ + createOrUpdate(connectorName, connectorSetting, options) { + return this.client.sendOperationRequest({ connectorName, connectorSetting, options }, createOrUpdateOperationSpec$2); + } + /** + * Delete a cloud account connector from a subscription + * @param connectorName Name of the cloud account connector + * @param options The options parameters. + */ + delete(connectorName, options) { + return this.client.sendOperationRequest({ connectorName, options }, deleteOperationSpec$3); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$4); + } +} +// Operation Specifications +const serializer$8 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ConnectorSettingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion11], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$8 +}; +const getOperationSpec$7 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ConnectorSetting + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion11], + urlParameters: [ + $host, + subscriptionId, + connectorName + ], + headerParameters: [accept], + serializer: serializer$8 +}; +const createOrUpdateOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: ConnectorSetting + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: connectorSetting, + queryParameters: [apiVersion11], + urlParameters: [ + $host, + subscriptionId, + connectorName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$8 +}; +const deleteOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion11], + urlParameters: [ + $host, + subscriptionId, + connectorName + ], + headerParameters: [accept], + serializer: serializer$8 +}; +const listNextOperationSpec$4 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ConnectorSettingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion11], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$8 +}; + +/* + * 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 containing SqlVulnerabilityAssessmentScans operations. */ +class SqlVulnerabilityAssessmentScansImpl { + /** + * Initialize a new instance of the class SqlVulnerabilityAssessmentScans class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the scan details of a single scan record. + * @param scanId The scan Id. Type 'latest' to get the scan record for the latest scan. + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + get(scanId, workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ scanId, workspaceId, resourceId, options }, getOperationSpec$6); + } + /** + * Gets a list of scan records. + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + list(workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ workspaceId, resourceId, options }, listOperationSpec$6); + } +} +// Operation Specifications +const serializer$7 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$6 = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/scans/{scanId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Scan + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [$host, resourceId, scanId], + headerParameters: [accept], + serializer: serializer$7 +}; +const listOperationSpec$6 = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/scans", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Scans + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [$host, resourceId], + headerParameters: [accept], + serializer: serializer$7 +}; + +/* + * 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 containing SqlVulnerabilityAssessmentScanResults operations. */ +class SqlVulnerabilityAssessmentScanResultsImpl { + /** + * Initialize a new instance of the class SqlVulnerabilityAssessmentScanResults class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the scan results of a single rule in a scan record. + * @param scanId The scan Id. Type 'latest' to get the scan results for the latest scan. + * @param scanResultId The rule Id of the results. + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + get(scanId, scanResultId, workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ scanId, scanResultId, workspaceId, resourceId, options }, getOperationSpec$5); + } + /** + * Gets a list of scan results for a single scan record. + * @param scanId The scan Id. Type 'latest' to get the scan results for the latest scan. + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + list(scanId, workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ scanId, workspaceId, resourceId, options }, listOperationSpec$5); + } +} +// Operation Specifications +const serializer$6 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const getOperationSpec$5 = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/scans/{scanId}/scanResults/{scanResultId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ScanResult + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [ + $host, + resourceId, + scanId, + scanResultId + ], + headerParameters: [accept], + serializer: serializer$6 +}; +const listOperationSpec$5 = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/scans/{scanId}/scanResults", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: ScanResults + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [$host, resourceId, scanId], + headerParameters: [accept], + serializer: serializer$6 +}; + +/* + * 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 containing SqlVulnerabilityAssessmentBaselineRules operations. */ +class SqlVulnerabilityAssessmentBaselineRulesImpl { + /** + * Initialize a new instance of the class SqlVulnerabilityAssessmentBaselineRules class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Creates a Baseline for a rule in a database. Will overwrite any previously existing results. + * @param ruleId The rule Id. + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + createOrUpdate(ruleId, workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ ruleId, workspaceId, resourceId, options }, createOrUpdateOperationSpec$1); + } + /** + * Gets the results for a given rule in the Baseline. + * @param ruleId The rule Id. + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + get(ruleId, workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ ruleId, workspaceId, resourceId, options }, getOperationSpec$4); + } + /** + * Deletes a rule from the Baseline of a given database. + * @param ruleId The rule Id. + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + delete(ruleId, workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ ruleId, workspaceId, resourceId, options }, deleteOperationSpec$2); + } + /** + * Gets the results for all rules in the Baseline. + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + list(workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ workspaceId, resourceId, options }, listOperationSpec$4); + } + /** + * Add a list of baseline rules. Will overwrite any previously existing results (for all rules). + * @param workspaceId The workspace Id. + * @param resourceId The identifier of the resource. + * @param options The options parameters. + */ + add(workspaceId, resourceId, options) { + return this.client.sendOperationRequest({ workspaceId, resourceId, options }, addOperationSpec); + } +} +// Operation Specifications +const serializer$5 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const createOrUpdateOperationSpec$1 = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/baselineRules/{ruleId}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: RuleResults + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: body4, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [$host, resourceId, ruleId], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$5 +}; +const getOperationSpec$4 = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/baselineRules/{ruleId}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RuleResults + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [$host, resourceId, ruleId], + headerParameters: [accept], + serializer: serializer$5 +}; +const deleteOperationSpec$2 = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/baselineRules/{ruleId}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [$host, resourceId, ruleId], + headerParameters: [accept], + serializer: serializer$5 +}; +const listOperationSpec$4 = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/baselineRules", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: RulesResults + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [$host, resourceId], + headerParameters: [accept], + serializer: serializer$5 +}; +const addOperationSpec = { + path: "/{resourceId}/providers/Microsoft.Security/sqlVulnerabilityAssessments/default/baselineRules", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: RulesResults + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: body5, + queryParameters: [workspaceId, apiVersion12], + urlParameters: [$host, resourceId], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$5 +}; + +/* + * 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 containing Alerts operations. */ +class AlertsImpl { + /** + * Initialize a new instance of the class Alerts class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * List all the alerts that are associated with the subscription + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * List all the alerts that are associated with the resource group + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listByResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * List all the alerts that are associated with the subscription that are stored in a specific location + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + listSubscriptionLevelByRegion(ascLocation, options) { + const iter = this.listSubscriptionLevelByRegionPagingAll(ascLocation, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listSubscriptionLevelByRegionPagingPage(ascLocation, options); + } + }; + } + listSubscriptionLevelByRegionPagingPage(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listSubscriptionLevelByRegionPagingPage_1() { + let result = yield tslib.__await(this._listSubscriptionLevelByRegion(ascLocation, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listSubscriptionLevelByRegionNext(ascLocation, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listSubscriptionLevelByRegionPagingAll(ascLocation, options) { + return tslib.__asyncGenerator(this, arguments, function* listSubscriptionLevelByRegionPagingAll_1() { + var e_3, _a; + try { + for (var _b = tslib.__asyncValues(this.listSubscriptionLevelByRegionPagingPage(ascLocation, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_3) throw e_3.error; } + } + }); + } + /** + * List all the alerts that are associated with the resource group that are stored in a specific + * location + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + listResourceGroupLevelByRegion(ascLocation, resourceGroupName, options) { + const iter = this.listResourceGroupLevelByRegionPagingAll(ascLocation, resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listResourceGroupLevelByRegionPagingPage(ascLocation, resourceGroupName, options); + } + }; + } + listResourceGroupLevelByRegionPagingPage(ascLocation, resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listResourceGroupLevelByRegionPagingPage_1() { + let result = yield tslib.__await(this._listResourceGroupLevelByRegion(ascLocation, resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listResourceGroupLevelByRegionNext(ascLocation, resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listResourceGroupLevelByRegionPagingAll(ascLocation, resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listResourceGroupLevelByRegionPagingAll_1() { + var e_4, _a; + try { + for (var _b = tslib.__asyncValues(this.listResourceGroupLevelByRegionPagingPage(ascLocation, resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_4) throw e_4.error; } + } + }); + } + /** + * List all the alerts that are associated with the subscription + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$3); + } + /** + * List all the alerts that are associated with the resource group + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec$1); + } + /** + * List all the alerts that are associated with the subscription that are stored in a specific location + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param options The options parameters. + */ + _listSubscriptionLevelByRegion(ascLocation, options) { + return this.client.sendOperationRequest({ ascLocation, options }, listSubscriptionLevelByRegionOperationSpec); + } + /** + * List all the alerts that are associated with the resource group that are stored in a specific + * location + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + _listResourceGroupLevelByRegion(ascLocation, resourceGroupName, options) { + return this.client.sendOperationRequest({ ascLocation, resourceGroupName, options }, listResourceGroupLevelByRegionOperationSpec); + } + /** + * Get an alert that is associated with a subscription + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertName Name of the alert object + * @param options The options parameters. + */ + getSubscriptionLevel(ascLocation, alertName, options) { + return this.client.sendOperationRequest({ ascLocation, alertName, options }, getSubscriptionLevelOperationSpec); + } + /** + * Get an alert that is associated a resource group or a resource in a resource group + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertName Name of the alert object + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + getResourceGroupLevel(ascLocation, alertName, resourceGroupName, options) { + return this.client.sendOperationRequest({ ascLocation, alertName, resourceGroupName, options }, getResourceGroupLevelOperationSpec); + } + /** + * Update the alert's state + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertName Name of the alert object + * @param options The options parameters. + */ + updateSubscriptionLevelStateToDismiss(ascLocation, alertName, options) { + return this.client.sendOperationRequest({ ascLocation, alertName, options }, updateSubscriptionLevelStateToDismissOperationSpec); + } + /** + * Update the alert's state + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertName Name of the alert object + * @param options The options parameters. + */ + updateSubscriptionLevelStateToResolve(ascLocation, alertName, options) { + return this.client.sendOperationRequest({ ascLocation, alertName, options }, updateSubscriptionLevelStateToResolveOperationSpec); + } + /** + * Update the alert's state + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertName Name of the alert object + * @param options The options parameters. + */ + updateSubscriptionLevelStateToActivate(ascLocation, alertName, options) { + return this.client.sendOperationRequest({ ascLocation, alertName, options }, updateSubscriptionLevelStateToActivateOperationSpec); + } + /** + * Update the alert's state + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertName Name of the alert object + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + updateResourceGroupLevelStateToResolve(ascLocation, alertName, resourceGroupName, options) { + return this.client.sendOperationRequest({ ascLocation, alertName, resourceGroupName, options }, updateResourceGroupLevelStateToResolveOperationSpec); + } + /** + * Update the alert's state + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertName Name of the alert object + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + updateResourceGroupLevelStateToDismiss(ascLocation, alertName, resourceGroupName, options) { + return this.client.sendOperationRequest({ ascLocation, alertName, resourceGroupName, options }, updateResourceGroupLevelStateToDismissOperationSpec); + } + /** + * Update the alert's state + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertName Name of the alert object + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + updateResourceGroupLevelStateToActivate(ascLocation, alertName, resourceGroupName, options) { + return this.client.sendOperationRequest({ ascLocation, alertName, resourceGroupName, options }, updateResourceGroupLevelStateToActivateOperationSpec); + } + /** + * Simulate security alerts + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param alertSimulatorRequestBody Alert Simulator Request Properties + * @param options The options parameters. + */ + simulate(ascLocation, alertSimulatorRequestBody, options) { + return this.client.sendOperationRequest({ ascLocation, alertSimulatorRequestBody, options }, simulateOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$3); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec$1); + } + /** + * ListSubscriptionLevelByRegionNext + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param nextLink The nextLink from the previous successful call to the ListSubscriptionLevelByRegion + * method. + * @param options The options parameters. + */ + _listSubscriptionLevelByRegionNext(ascLocation, nextLink, options) { + return this.client.sendOperationRequest({ ascLocation, nextLink, options }, listSubscriptionLevelByRegionNextOperationSpec); + } + /** + * ListResourceGroupLevelByRegionNext + * @param ascLocation The location where ASC stores the data of the subscription. can be retrieved from + * Get locations + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListResourceGroupLevelByRegion + * method. + * @param options The options parameters. + */ + _listResourceGroupLevelByRegionNext(ascLocation, resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ ascLocation, resourceGroupName, nextLink, options }, listResourceGroupLevelByRegionNextOperationSpec); + } +} +// Operation Specifications +const serializer$4 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/alerts", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$4 +}; +const listByResourceGroupOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/alerts", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const listSubscriptionLevelByRegionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const listResourceGroupLevelByRegionOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const getSubscriptionLevelOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Alert + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + alertName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const getResourceGroupLevelOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Alert + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + alertName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const updateSubscriptionLevelStateToDismissOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/dismiss", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + alertName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const updateSubscriptionLevelStateToResolveOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/resolve", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + alertName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const updateSubscriptionLevelStateToActivateOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/activate", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + ascLocation, + alertName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const updateResourceGroupLevelStateToResolveOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/resolve", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + alertName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const updateResourceGroupLevelStateToDismissOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/dismiss", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + alertName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const updateResourceGroupLevelStateToActivateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/activate", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + ascLocation, + alertName + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const simulateOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/default/simulate", + httpMethod: "POST", + responses: { + 204: {}, + default: { + bodyMapper: CloudError + } + }, + requestBody: alertSimulatorRequestBody, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + ascLocation + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$4 +}; +const listNextOperationSpec$3 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const listByResourceGroupNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const listSubscriptionLevelByRegionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$4 +}; +const listResourceGroupLevelByRegionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: AlertList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion13], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink, + ascLocation + ], + headerParameters: [accept], + serializer: serializer$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 containing Settings operations. */ +class SettingsImpl { + /** + * Initialize a new instance of the class Settings class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Settings about different configurations in security center + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Settings about different configurations in security center + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$2); + } + /** + * Settings of different configurations in security center + * @param settingName The name of the setting + * @param options The options parameters. + */ + get(settingName, options) { + return this.client.sendOperationRequest({ settingName, options }, getOperationSpec$3); + } + /** + * updating settings about different configurations in security center + * @param settingName The name of the setting + * @param setting Setting object + * @param options The options parameters. + */ + update(settingName, setting, options) { + return this.client.sendOperationRequest({ settingName, setting, options }, updateOperationSpec$1); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$2); + } +} +// Operation Specifications +const serializer$3 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SettingsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion14], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$3 +}; +const getOperationSpec$3 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings/{settingName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Setting + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion14], + urlParameters: [ + $host, + subscriptionId, + settingName2 + ], + headerParameters: [accept], + serializer: serializer$3 +}; +const updateOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings/{settingName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: Setting + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: setting1, + queryParameters: [apiVersion14], + urlParameters: [ + $host, + subscriptionId, + settingName2 + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$3 +}; +const listNextOperationSpec$2 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SettingsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion14], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$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 containing IngestionSettings operations. */ +class IngestionSettingsImpl { + /** + * Initialize a new instance of the class IngestionSettings class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Settings for ingesting security data and logs to correlate with resources associated with the + * subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Settings for ingesting security data and logs to correlate with resources associated with the + * subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec$1); + } + /** + * Settings for ingesting security data and logs to correlate with resources associated with the + * subscription. + * @param ingestionSettingName Name of the ingestion setting + * @param options The options parameters. + */ + get(ingestionSettingName, options) { + return this.client.sendOperationRequest({ ingestionSettingName, options }, getOperationSpec$2); + } + /** + * Create setting for ingesting security data and logs to correlate with resources associated with the + * subscription. + * @param ingestionSettingName Name of the ingestion setting + * @param ingestionSetting Ingestion setting object + * @param options The options parameters. + */ + create(ingestionSettingName, ingestionSetting, options) { + return this.client.sendOperationRequest({ ingestionSettingName, ingestionSetting, options }, createOperationSpec); + } + /** + * Deletes the ingestion settings for this subscription. + * @param ingestionSettingName Name of the ingestion setting + * @param options The options parameters. + */ + delete(ingestionSettingName, options) { + return this.client.sendOperationRequest({ ingestionSettingName, options }, deleteOperationSpec$1); + } + /** + * Returns the token that is used for correlating ingested telemetry with the resources in the + * subscription. + * @param ingestionSettingName Name of the ingestion setting + * @param options The options parameters. + */ + listTokens(ingestionSettingName, options) { + return this.client.sendOperationRequest({ ingestionSettingName, options }, listTokensOperationSpec); + } + /** + * Connection strings for ingesting security scan logs and data. + * @param ingestionSettingName Name of the ingestion setting + * @param options The options parameters. + */ + listConnectionStrings(ingestionSettingName, options) { + return this.client.sendOperationRequest({ ingestionSettingName, options }, listConnectionStringsOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec$1); + } +} +// Operation Specifications +const serializer$2 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/ingestionSettings", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IngestionSettingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion15], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$2 +}; +const getOperationSpec$2 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/ingestionSettings/{ingestionSettingName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IngestionSetting + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion15], + urlParameters: [ + $host, + subscriptionId, + ingestionSettingName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const createOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/ingestionSettings/{ingestionSettingName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: IngestionSetting + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: ingestionSetting, + queryParameters: [apiVersion15], + urlParameters: [ + $host, + subscriptionId, + ingestionSettingName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer: serializer$2 +}; +const deleteOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/ingestionSettings/{ingestionSettingName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion15], + urlParameters: [ + $host, + subscriptionId, + ingestionSettingName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listTokensOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/ingestionSettings/{ingestionSettingName}/listTokens", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: IngestionSettingToken + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion15], + urlParameters: [ + $host, + subscriptionId, + ingestionSettingName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listConnectionStringsOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/ingestionSettings/{ingestionSettingName}/listConnectionStrings", + httpMethod: "POST", + responses: { + 200: { + bodyMapper: ConnectionStrings + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion15], + urlParameters: [ + $host, + subscriptionId, + ingestionSettingName + ], + headerParameters: [accept], + serializer: serializer$2 +}; +const listNextOperationSpec$1 = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: IngestionSettingList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion15], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$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 containing SoftwareInventories operations. */ +class SoftwareInventoriesImpl { + /** + * Initialize a new instance of the class SoftwareInventories class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Gets the software inventory of the virtual machine. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + listByExtendedResource(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + const iter = this.listByExtendedResourcePagingAll(resourceGroupName, resourceNamespace, resourceType, resourceName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByExtendedResourcePagingPage(resourceGroupName, resourceNamespace, resourceType, resourceName, options); + } + }; + } + listByExtendedResourcePagingPage(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByExtendedResourcePagingPage_1() { + let result = yield tslib.__await(this._listByExtendedResource(resourceGroupName, resourceNamespace, resourceType, resourceName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByExtendedResourceNext(resourceGroupName, resourceNamespace, resourceType, resourceName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByExtendedResourcePagingAll(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByExtendedResourcePagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listByExtendedResourcePagingPage(resourceGroupName, resourceNamespace, resourceType, resourceName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Gets the software inventory of all virtual machines in the subscriptions. + * @param options The options parameters. + */ + listBySubscription(options) { + const iter = this.listBySubscriptionPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listBySubscriptionPagingPage(options); + } + }; + } + listBySubscriptionPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingPage_1() { + let result = yield tslib.__await(this._listBySubscription(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listBySubscriptionNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listBySubscriptionPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listBySubscriptionPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listBySubscriptionPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Gets the software inventory of the virtual machine. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param options The options parameters. + */ + _listByExtendedResource(resourceGroupName, resourceNamespace, resourceType, resourceName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + options + }, listByExtendedResourceOperationSpec); + } + /** + * Gets the software inventory of all virtual machines in the subscriptions. + * @param options The options parameters. + */ + _listBySubscription(options) { + return this.client.sendOperationRequest({ options }, listBySubscriptionOperationSpec); + } + /** + * Gets a single software data of the virtual machine. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param softwareName Name of the installed software. + * @param options The options parameters. + */ + get(resourceGroupName, resourceNamespace, resourceType, resourceName, softwareName, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + softwareName, + options + }, getOperationSpec$1); + } + /** + * ListByExtendedResourceNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param resourceNamespace The namespace of the resource. + * @param resourceType The type of the resource. + * @param resourceName Name of the resource. + * @param nextLink The nextLink from the previous successful call to the ListByExtendedResource method. + * @param options The options parameters. + */ + _listByExtendedResourceNext(resourceGroupName, resourceNamespace, resourceType, resourceName, nextLink, options) { + return this.client.sendOperationRequest({ + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + nextLink, + options + }, listByExtendedResourceNextOperationSpec); + } + /** + * ListBySubscriptionNext + * @param nextLink The nextLink from the previous successful call to the ListBySubscription method. + * @param options The options parameters. + */ + _listBySubscriptionNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listBySubscriptionNextOperationSpec); + } +} +// Operation Specifications +const serializer$1 = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listByExtendedResourceOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/softwareInventories", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SoftwaresList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion16], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listBySubscriptionOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/softwareInventories", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SoftwaresList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion16], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer: serializer$1 +}; +const getOperationSpec$1 = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/softwareInventories/{softwareName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: Software + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion16], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + resourceNamespace, + resourceType, + resourceName, + softwareName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listByExtendedResourceNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SoftwaresList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion16], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink, + resourceNamespace, + resourceType, + resourceName + ], + headerParameters: [accept], + serializer: serializer$1 +}; +const listBySubscriptionNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SoftwaresList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion16], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer: serializer$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 containing SecurityConnectors operations. */ +class SecurityConnectorsImpl { + /** + * Initialize a new instance of the class SecurityConnectors class. + * @param client Reference to the service client + */ + constructor(client) { + this.client = client; + } + /** + * Lists all the security connectors in the specified subscription. Use the 'nextLink' property in the + * response to get the next page of security connectors for the specified subscription. + * @param options The options parameters. + */ + list(options) { + const iter = this.listPagingAll(options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listPagingPage(options); + } + }; + } + listPagingPage(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingPage_1() { + let result = yield tslib.__await(this._list(options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listNext(continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listPagingAll(options) { + return tslib.__asyncGenerator(this, arguments, function* listPagingAll_1() { + var e_1, _a; + try { + for (var _b = tslib.__asyncValues(this.listPagingPage(options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_1) throw e_1.error; } + } + }); + } + /** + * Lists all the security connectors in the specified resource group. Use the 'nextLink' property in + * the response to get the next page of security connectors for the specified resource group. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + listByResourceGroup(resourceGroupName, options) { + const iter = this.listByResourceGroupPagingAll(resourceGroupName, options); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: () => { + return this.listByResourceGroupPagingPage(resourceGroupName, options); + } + }; + } + listByResourceGroupPagingPage(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingPage_1() { + let result = yield tslib.__await(this._listByResourceGroup(resourceGroupName, options)); + yield yield tslib.__await(result.value || []); + let continuationToken = result.nextLink; + while (continuationToken) { + result = yield tslib.__await(this._listByResourceGroupNext(resourceGroupName, continuationToken, options)); + continuationToken = result.nextLink; + yield yield tslib.__await(result.value || []); + } + }); + } + listByResourceGroupPagingAll(resourceGroupName, options) { + return tslib.__asyncGenerator(this, arguments, function* listByResourceGroupPagingAll_1() { + var e_2, _a; + try { + for (var _b = tslib.__asyncValues(this.listByResourceGroupPagingPage(resourceGroupName, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) { + const page = _c.value; + yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page))); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b)); + } + finally { if (e_2) throw e_2.error; } + } + }); + } + /** + * Lists all the security connectors in the specified subscription. Use the 'nextLink' property in the + * response to get the next page of security connectors for the specified subscription. + * @param options The options parameters. + */ + _list(options) { + return this.client.sendOperationRequest({ options }, listOperationSpec); + } + /** + * Lists all the security connectors in the specified resource group. Use the 'nextLink' property in + * the response to get the next page of security connectors for the specified resource group. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param options The options parameters. + */ + _listByResourceGroup(resourceGroupName, options) { + return this.client.sendOperationRequest({ resourceGroupName, options }, listByResourceGroupOperationSpec); + } + /** + * Retrieves details of a specific security connector + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param securityConnectorName The security connector name. + * @param options The options parameters. + */ + get(resourceGroupName, securityConnectorName, options) { + return this.client.sendOperationRequest({ resourceGroupName, securityConnectorName, options }, getOperationSpec); + } + /** + * Creates or updates a security connector. If a security connector is already created and a subsequent + * request is issued for the same security connector id, then it will be updated. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param securityConnectorName The security connector name. + * @param securityConnector The security connector resource + * @param options The options parameters. + */ + createOrUpdate(resourceGroupName, securityConnectorName, securityConnector, options) { + return this.client.sendOperationRequest({ resourceGroupName, securityConnectorName, securityConnector, options }, createOrUpdateOperationSpec); + } + /** + * Updates a security connector + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param securityConnectorName The security connector name. + * @param securityConnector The security connector resource + * @param options The options parameters. + */ + update(resourceGroupName, securityConnectorName, securityConnector, options) { + return this.client.sendOperationRequest({ resourceGroupName, securityConnectorName, securityConnector, options }, updateOperationSpec); + } + /** + * Deletes a security connector. + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param securityConnectorName The security connector name. + * @param options The options parameters. + */ + delete(resourceGroupName, securityConnectorName, options) { + return this.client.sendOperationRequest({ resourceGroupName, securityConnectorName, options }, deleteOperationSpec); + } + /** + * ListNext + * @param nextLink The nextLink from the previous successful call to the List method. + * @param options The options parameters. + */ + _listNext(nextLink, options) { + return this.client.sendOperationRequest({ nextLink, options }, listNextOperationSpec); + } + /** + * ListByResourceGroupNext + * @param resourceGroupName The name of the resource group within the user's subscription. The name is + * case insensitive. + * @param nextLink The nextLink from the previous successful call to the ListByResourceGroup method. + * @param options The options parameters. + */ + _listByResourceGroupNext(resourceGroupName, nextLink, options) { + return this.client.sendOperationRequest({ resourceGroupName, nextLink, options }, listByResourceGroupNextOperationSpec); + } +} +// Operation Specifications +const serializer = coreClient__namespace.createSerializer(Mappers, /* isXml */ false); +const listOperationSpec = { + path: "/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityConnectors", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityConnectorsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [$host, subscriptionId], + headerParameters: [accept], + serializer +}; +const listByResourceGroupOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityConnectorsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName + ], + headerParameters: [accept], + serializer +}; +const getOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityConnector + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + securityConnectorName + ], + headerParameters: [accept], + serializer +}; +const createOrUpdateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName}", + httpMethod: "PUT", + responses: { + 200: { + bodyMapper: SecurityConnector + }, + 201: { + bodyMapper: SecurityConnector + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: securityConnector, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + securityConnectorName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer +}; +const updateOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: SecurityConnector + }, + default: { + bodyMapper: CloudError + } + }, + requestBody: securityConnector, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + securityConnectorName + ], + headerParameters: [accept, contentType], + mediaType: "json", + serializer +}; +const deleteOperationSpec = { + path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName}", + httpMethod: "DELETE", + responses: { + 200: {}, + 204: {}, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + securityConnectorName + ], + headerParameters: [accept], + serializer +}; +const listNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityConnectorsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + nextLink + ], + headerParameters: [accept], + serializer +}; +const listByResourceGroupNextOperationSpec = { + path: "{nextLink}", + httpMethod: "GET", + responses: { + 200: { + bodyMapper: SecurityConnectorsList + }, + default: { + bodyMapper: CloudError + } + }, + queryParameters: [apiVersion1], + urlParameters: [ + $host, + subscriptionId, + resourceGroupName, + nextLink + ], + headerParameters: [accept], + serializer +}; + +/* + * 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 SecurityCenter extends coreClient__namespace.ServiceClient { + /** + * Initializes a new instance of the SecurityCenter class. + * @param credentials Subscription credentials which uniquely identify client subscription. + * @param subscriptionId Azure subscription ID + * @param options The parameter options + */ + constructor(credentials, subscriptionId, options) { + var _a, _b; + if (credentials === undefined) { + throw new Error("'credentials' cannot be null"); + } + if (subscriptionId === undefined) { + throw new Error("'subscriptionId' cannot be null"); + } + // Initializing default values for options + if (!options) { + options = {}; + } + const defaults = { + requestContentType: "application/json; charset=utf-8", + credential: credentials + }; + const packageDetails = `azsdk-js-arm-security/5.0.0`; + const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix + ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` + : `${packageDetails}`; + if (!options.credentialScopes) { + options.credentialScopes = ["https://management.azure.com/.default"]; + } + const optionsWithDefaults = Object.assign(Object.assign(Object.assign({}, defaults), options), { userAgentOptions: { + userAgentPrefix + }, baseUri: (_b = (_a = options.endpoint) !== null && _a !== void 0 ? _a : options.baseUri) !== null && _b !== void 0 ? _b : "https://management.azure.com" }); + super(optionsWithDefaults); + // Parameter assignments + this.subscriptionId = subscriptionId; + // Assigning values to Constant parameters + this.$host = options.$host || "https://management.azure.com"; + this.mdeOnboardings = new MdeOnboardingsImpl(this); + this.customAssessmentAutomations = new CustomAssessmentAutomationsImpl(this); + this.customEntityStoreAssignments = new CustomEntityStoreAssignmentsImpl(this); + this.complianceResults = new ComplianceResultsImpl(this); + this.pricings = new PricingsImpl(this); + this.advancedThreatProtection = new AdvancedThreatProtectionImpl(this); + this.deviceSecurityGroups = new DeviceSecurityGroupsImpl(this); + this.iotSecuritySolution = new IotSecuritySolutionImpl(this); + this.iotSecuritySolutionAnalytics = new IotSecuritySolutionAnalyticsImpl(this); + this.iotSecuritySolutionsAnalyticsAggregatedAlert = new IotSecuritySolutionsAnalyticsAggregatedAlertImpl(this); + this.iotSecuritySolutionsAnalyticsRecommendation = new IotSecuritySolutionsAnalyticsRecommendationImpl(this); + this.locations = new LocationsImpl(this); + this.operations = new OperationsImpl(this); + this.tasks = new TasksImpl(this); + this.autoProvisioningSettings = new AutoProvisioningSettingsImpl(this); + this.compliances = new CompliancesImpl(this); + this.informationProtectionPolicies = new InformationProtectionPoliciesImpl(this); + this.securityContacts = new SecurityContactsImpl(this); + this.workspaceSettings = new WorkspaceSettingsImpl(this); + this.regulatoryComplianceStandards = new RegulatoryComplianceStandardsImpl(this); + this.regulatoryComplianceControls = new RegulatoryComplianceControlsImpl(this); + this.regulatoryComplianceAssessments = new RegulatoryComplianceAssessmentsImpl(this); + this.subAssessments = new SubAssessmentsImpl(this); + this.automations = new AutomationsImpl(this); + this.alertsSuppressionRules = new AlertsSuppressionRulesImpl(this); + this.serverVulnerabilityAssessmentOperations = new ServerVulnerabilityAssessmentOperationsImpl(this); + this.assessmentsMetadata = new AssessmentsMetadataImpl(this); + this.assessments = new AssessmentsImpl(this); + this.adaptiveApplicationControls = new AdaptiveApplicationControlsImpl(this); + this.adaptiveNetworkHardenings = new AdaptiveNetworkHardeningsImpl(this); + this.allowedConnections = new AllowedConnectionsImpl(this); + this.topology = new TopologyImpl(this); + this.jitNetworkAccessPolicies = new JitNetworkAccessPoliciesImpl(this); + this.discoveredSecuritySolutions = new DiscoveredSecuritySolutionsImpl(this); + this.securitySolutionsReferenceDataOperations = new SecuritySolutionsReferenceDataOperationsImpl(this); + this.externalSecuritySolutions = new ExternalSecuritySolutionsImpl(this); + this.secureScores = new SecureScoresImpl(this); + this.secureScoreControls = new SecureScoreControlsImpl(this); + this.secureScoreControlDefinitions = new SecureScoreControlDefinitionsImpl(this); + this.securitySolutions = new SecuritySolutionsImpl(this); + this.connectors = new ConnectorsImpl(this); + this.sqlVulnerabilityAssessmentScans = new SqlVulnerabilityAssessmentScansImpl(this); + this.sqlVulnerabilityAssessmentScanResults = new SqlVulnerabilityAssessmentScanResultsImpl(this); + this.sqlVulnerabilityAssessmentBaselineRules = new SqlVulnerabilityAssessmentBaselineRulesImpl(this); + this.alerts = new AlertsImpl(this); + this.settings = new SettingsImpl(this); + this.ingestionSettings = new IngestionSettingsImpl(this); + this.softwareInventories = new SoftwareInventoriesImpl(this); + this.securityConnectors = new SecurityConnectorsImpl(this); + } +} + +exports.SecurityCenter = SecurityCenter; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 3983: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var logger$m = __nccwpck_require__(6515); +var coreClient = __nccwpck_require__(160); +var coreUtil = __nccwpck_require__(7779); +var coreRestPipeline = __nccwpck_require__(778); +var coreTracing = __nccwpck_require__(623); +var fs = __nccwpck_require__(9896); +var os = __nccwpck_require__(857); +var path = __nccwpck_require__(6928); +var abortController = __nccwpck_require__(7934); +var msalCommon = __nccwpck_require__(7); +var open = __nccwpck_require__(1964); +var promises = __nccwpck_require__(1943); +var child_process = __nccwpck_require__(5317); +var crypto = __nccwpck_require__(6982); +var node_crypto = __nccwpck_require__(7598); +var promises$1 = __nccwpck_require__(1455); + +function _interopNamespaceDefault(e) { + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n.default = e; + return Object.freeze(n); +} + +var msalCommon__namespace = /*#__PURE__*/_interopNamespaceDefault(msalCommon); +var child_process__namespace = /*#__PURE__*/_interopNamespaceDefault(child_process); + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Current version of the `@azure/identity` package. + */ +const SDK_VERSION = `4.5.0`; +/** + * The default client ID for authentication + * @internal + */ +// TODO: temporary - this is the Azure CLI clientID - we'll replace it when +// Developer Sign On application is available +// https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/Constants.cs#L9 +const DeveloperSignOnClientId = "04b07795-8ddb-461a-bbee-02f9e1bf7b46"; +/** + * The default tenant for authentication + * @internal + */ +const DefaultTenantId = "common"; +/** + * A list of known Azure authority hosts + */ +exports.AzureAuthorityHosts = void 0; +(function (AzureAuthorityHosts) { + /** + * China-based Azure Authority Host + */ + AzureAuthorityHosts["AzureChina"] = "https://login.chinacloudapi.cn"; + /** + * Germany-based Azure Authority Host + */ + AzureAuthorityHosts["AzureGermany"] = "https://login.microsoftonline.de"; + /** + * US Government Azure Authority Host + */ + AzureAuthorityHosts["AzureGovernment"] = "https://login.microsoftonline.us"; + /** + * Public Cloud Azure Authority Host + */ + AzureAuthorityHosts["AzurePublicCloud"] = "https://login.microsoftonline.com"; +})(exports.AzureAuthorityHosts || (exports.AzureAuthorityHosts = {})); +/** + * @internal + * The default authority host. + */ +const DefaultAuthorityHost = exports.AzureAuthorityHosts.AzurePublicCloud; +/** + * @internal + * Allow acquiring tokens for any tenant for multi-tentant auth. + */ +const ALL_TENANTS = ["*"]; +/** + * @internal + */ +const CACHE_CAE_SUFFIX = "cae"; +/** + * @internal + */ +const CACHE_NON_CAE_SUFFIX = "nocae"; +/** + * @internal + * + * The default name for the cache persistence plugin. + * Matches the constant defined in the cache persistence package. + */ +const DEFAULT_TOKEN_CACHE_NAME = "msal.cache"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * The current persistence provider, undefined by default. + * @internal + */ +let persistenceProvider = undefined; +/** + * An object that allows setting the persistence provider. + * @internal + */ +const msalNodeFlowCacheControl = { + setPersistence(pluginProvider) { + persistenceProvider = pluginProvider; + }, +}; +/** + * The current native broker provider, undefined by default. + * @internal + */ +let nativeBrokerInfo = undefined; +/** + * An object that allows setting the native broker provider. + * @internal + */ +const msalNodeFlowNativeBrokerControl = { + setNativeBroker(broker) { + nativeBrokerInfo = { + broker, + }; + }, +}; +/** + * Configures plugins, validating that required plugins are available and enabled. + * + * Does not create the plugins themselves, but rather returns the configuration that will be used to create them. + * + * @param options - options for creating the MSAL client + * @returns plugin configuration + */ +function generatePluginConfiguration(options) { + var _a, _b, _c, _d, _e, _f, _g; + const config = { + cache: {}, + broker: { + isEnabled: (_b = (_a = options.brokerOptions) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : false, + enableMsaPassthrough: (_d = (_c = options.brokerOptions) === null || _c === void 0 ? void 0 : _c.legacyEnableMsaPassthrough) !== null && _d !== void 0 ? _d : false, + parentWindowHandle: (_e = options.brokerOptions) === null || _e === void 0 ? void 0 : _e.parentWindowHandle, + }, + }; + if ((_f = options.tokenCachePersistenceOptions) === null || _f === void 0 ? void 0 : _f.enabled) { + if (persistenceProvider === undefined) { + throw new Error([ + "Persistent token caching was requested, but no persistence provider was configured.", + "You must install the identity-cache-persistence plugin package (`npm install --save @azure/identity-cache-persistence`)", + "and enable it by importing `useIdentityPlugin` from `@azure/identity` and calling", + "`useIdentityPlugin(cachePersistencePlugin)` before using `tokenCachePersistenceOptions`.", + ].join(" ")); + } + const cacheBaseName = options.tokenCachePersistenceOptions.name || DEFAULT_TOKEN_CACHE_NAME; + config.cache.cachePlugin = persistenceProvider(Object.assign({ name: `${cacheBaseName}.${CACHE_NON_CAE_SUFFIX}` }, options.tokenCachePersistenceOptions)); + config.cache.cachePluginCae = persistenceProvider(Object.assign({ name: `${cacheBaseName}.${CACHE_CAE_SUFFIX}` }, options.tokenCachePersistenceOptions)); + } + if ((_g = options.brokerOptions) === null || _g === void 0 ? void 0 : _g.enabled) { + if (nativeBrokerInfo === undefined) { + throw new Error([ + "Broker for WAM was requested to be enabled, but no native broker was configured.", + "You must install the identity-broker plugin package (`npm install --save @azure/identity-broker`)", + "and enable it by importing `useIdentityPlugin` from `@azure/identity` and calling", + "`useIdentityPlugin(createNativeBrokerPlugin())` before using `enableBroker`.", + ].join(" ")); + } + config.broker.nativeBrokerPlugin = nativeBrokerInfo.broker; + } + return config; +} +/** + * Wraps generatePluginConfiguration as a writeable property for test stubbing purposes. + */ +const msalPlugins = { + generatePluginConfiguration, +}; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * The AzureLogger used for all clients within the identity package + */ +const logger$l = logger$m.createClientLogger("identity"); +/** + * Separates a list of environment variable names into a plain object with two arrays: an array of missing environment variables and another array with assigned environment variables. + * @param supportedEnvVars - List of environment variable names + */ +function processEnvVars(supportedEnvVars) { + return supportedEnvVars.reduce((acc, envVariable) => { + if (process.env[envVariable]) { + acc.assigned.push(envVariable); + } + else { + acc.missing.push(envVariable); + } + return acc; + }, { missing: [], assigned: [] }); +} +/** + * Formatting the success event on the credentials + */ +function formatSuccess(scope) { + return `SUCCESS. Scopes: ${Array.isArray(scope) ? scope.join(", ") : scope}.`; +} +/** + * Formatting the success event on the credentials + */ +function formatError(scope, error) { + let message = "ERROR."; + if (scope === null || scope === void 0 ? void 0 : scope.length) { + message += ` Scopes: ${Array.isArray(scope) ? scope.join(", ") : scope}.`; + } + return `${message} Error message: ${typeof error === "string" ? error : error.message}.`; +} +/** + * Generates a CredentialLoggerInstance. + * + * It logs with the format: + * + * `[title] => [message]` + * + */ +function credentialLoggerInstance(title, parent, log = logger$l) { + const fullTitle = parent ? `${parent.fullTitle} ${title}` : title; + function info(message) { + log.info(`${fullTitle} =>`, message); + } + function warning(message) { + log.warning(`${fullTitle} =>`, message); + } + function verbose(message) { + log.verbose(`${fullTitle} =>`, message); + } + function error(message) { + log.error(`${fullTitle} =>`, message); + } + return { + title, + fullTitle, + info, + warning, + verbose, + error, + }; +} +/** + * Generates a CredentialLogger, which is a logger declared at the credential's constructor, and used at any point in the credential. + * It has all the properties of a CredentialLoggerInstance, plus other logger instances, one per method. + * + * It logs with the format: + * + * `[title] => [message]` + * `[title] => getToken() => [message]` + * + */ +function credentialLogger(title, log = logger$l) { + const credLogger = credentialLoggerInstance(title, undefined, log); + return Object.assign(Object.assign({}, credLogger), { parent: log, getToken: credentialLoggerInstance("=> getToken()", credLogger, log) }); +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +function isErrorResponse(errorResponse) { + return (errorResponse && + typeof errorResponse.error === "string" && + typeof errorResponse.error_description === "string"); +} +/** + * The Error.name value of an CredentialUnavailable + */ +const CredentialUnavailableErrorName = "CredentialUnavailableError"; +/** + * This signifies that the credential that was tried in a chained credential + * was not available to be used as the credential. Rather than treating this as + * an error that should halt the chain, it's caught and the chain continues + */ +class CredentialUnavailableError extends Error { + constructor(message, options) { + // @ts-expect-error - TypeScript does not recognize this until we use ES2022 as the target; however, all our major runtimes do support the `cause` property + super(message, options); + this.name = CredentialUnavailableErrorName; + } +} +/** + * The Error.name value of an AuthenticationError + */ +const AuthenticationErrorName = "AuthenticationError"; +/** + * Provides details about a failure to authenticate with Azure Active + * Directory. The `errorResponse` field contains more details about + * the specific failure. + */ +class AuthenticationError extends Error { + constructor(statusCode, errorBody, options) { + let errorResponse = { + error: "unknown", + errorDescription: "An unknown error occurred and no additional details are available.", + }; + if (isErrorResponse(errorBody)) { + errorResponse = convertOAuthErrorResponseToErrorResponse(errorBody); + } + else if (typeof errorBody === "string") { + try { + // Most error responses will contain JSON-formatted error details + // in the response body + const oauthErrorResponse = JSON.parse(errorBody); + errorResponse = convertOAuthErrorResponseToErrorResponse(oauthErrorResponse); + } + catch (e) { + if (statusCode === 400) { + errorResponse = { + error: "invalid_request", + errorDescription: `The service indicated that the request was invalid.\n\n${errorBody}`, + }; + } + else { + errorResponse = { + error: "unknown_error", + errorDescription: `An unknown error has occurred. Response body:\n\n${errorBody}`, + }; + } + } + } + else { + errorResponse = { + error: "unknown_error", + errorDescription: "An unknown error occurred and no additional details are available.", + }; + } + super(`${errorResponse.error} Status code: ${statusCode}\nMore details:\n${errorResponse.errorDescription},`, + // @ts-expect-error - TypeScript does not recognize this until we use ES2022 as the target; however, all our major runtimes do support the `cause` property + options); + this.statusCode = statusCode; + this.errorResponse = errorResponse; + // Ensure that this type reports the correct name + this.name = AuthenticationErrorName; + } +} +/** + * The Error.name value of an AggregateAuthenticationError + */ +const AggregateAuthenticationErrorName = "AggregateAuthenticationError"; +/** + * Provides an `errors` array containing {@link AuthenticationError} instance + * for authentication failures from credentials in a {@link ChainedTokenCredential}. + */ +class AggregateAuthenticationError extends Error { + constructor(errors, errorMessage) { + const errorDetail = errors.join("\n"); + super(`${errorMessage}\n${errorDetail}`); + this.errors = errors; + // Ensure that this type reports the correct name + this.name = AggregateAuthenticationErrorName; + } +} +function convertOAuthErrorResponseToErrorResponse(errorBody) { + return { + error: errorBody.error, + errorDescription: errorBody.error_description, + correlationId: errorBody.correlation_id, + errorCodes: errorBody.error_codes, + timestamp: errorBody.timestamp, + traceId: errorBody.trace_id, + }; +} +/** + * Error used to enforce authentication after trying to retrieve a token silently. + */ +class AuthenticationRequiredError extends Error { + constructor( + /** + * Optional parameters. A message can be specified. The {@link GetTokenOptions} of the request can also be specified to more easily associate the error with the received parameters. + */ + options) { + super(options.message, + // @ts-expect-error - TypeScript does not recognize this until we use ES2022 as the target; however, all our major runtimes do support the `cause` property + options.cause ? { cause: options.cause } : undefined); + this.scopes = options.scopes; + this.getTokenOptions = options.getTokenOptions; + this.name = "AuthenticationRequiredError"; + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +function createConfigurationErrorMessage(tenantId) { + return `The current credential is not configured to acquire tokens for tenant ${tenantId}. To enable acquiring tokens for this tenant add it to the AdditionallyAllowedTenants on the credential options, or add "*" to AdditionallyAllowedTenants to allow acquiring tokens for any tenant.`; +} +/** + * Of getToken contains a tenantId, this functions allows picking this tenantId as the appropriate for authentication, + * unless multitenant authentication has been disabled through the AZURE_IDENTITY_DISABLE_MULTITENANTAUTH (on Node.js), + * or unless the original tenant Id is `adfs`. + * @internal + */ +function processMultiTenantRequest(tenantId, getTokenOptions, additionallyAllowedTenantIds = [], logger) { + var _a; + let resolvedTenantId; + if (process.env.AZURE_IDENTITY_DISABLE_MULTITENANTAUTH) { + resolvedTenantId = tenantId; + } + else if (tenantId === "adfs") { + resolvedTenantId = tenantId; + } + else { + resolvedTenantId = (_a = getTokenOptions === null || getTokenOptions === void 0 ? void 0 : getTokenOptions.tenantId) !== null && _a !== void 0 ? _a : tenantId; + } + if (tenantId && + resolvedTenantId !== tenantId && + !additionallyAllowedTenantIds.includes("*") && + !additionallyAllowedTenantIds.some((t) => t.localeCompare(resolvedTenantId) === 0)) { + const message = createConfigurationErrorMessage(tenantId); + logger === null || logger === void 0 ? void 0 : logger.info(message); + throw new CredentialUnavailableError(message); + } + return resolvedTenantId; +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * @internal + */ +function checkTenantId(logger, tenantId) { + if (!tenantId.match(/^[0-9a-zA-Z-.]+$/)) { + const error = new Error("Invalid tenant id provided. You can locate your tenant id by following the instructions listed here: https://learn.microsoft.com/partner-center/find-ids-and-domain-names."); + logger.info(formatError("", error)); + throw error; + } +} +/** + * @internal + */ +function resolveTenantId(logger, tenantId, clientId) { + if (tenantId) { + checkTenantId(logger, tenantId); + return tenantId; + } + if (!clientId) { + clientId = DeveloperSignOnClientId; + } + if (clientId !== DeveloperSignOnClientId) { + return "common"; + } + return "organizations"; +} +/** + * @internal + */ +function resolveAdditionallyAllowedTenantIds(additionallyAllowedTenants) { + if (!additionallyAllowedTenants || additionallyAllowedTenants.length === 0) { + return []; + } + if (additionallyAllowedTenants.includes("*")) { + return ALL_TENANTS; + } + return additionallyAllowedTenants; +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +function getIdentityTokenEndpointSuffix(tenantId) { + if (tenantId === "adfs") { + return "oauth2/token"; + } + else { + return "oauth2/v2.0/token"; + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Creates a span using the global tracer. + * @internal + */ +const tracingClient = coreTracing.createTracingClient({ + namespace: "Microsoft.AAD", + packageName: "@azure/identity", + packageVersion: SDK_VERSION, +}); + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const DefaultScopeSuffix = "/.default"; +const imdsHost = "http://169.254.169.254"; +const imdsEndpointPath = "/metadata/identity/oauth2/token"; +const imdsApiVersion = "2018-02-01"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Most MSIs send requests to the IMDS endpoint, or a similar endpoint. + * These are GET requests that require sending a `resource` parameter on the query. + * This resource can be derived from the scopes received through the getToken call, as long as only one scope is received. + * Multiple scopes assume that the resulting token will have access to multiple resources, which won't be the case. + * + * For that reason, when we encounter multiple scopes, we return undefined. + * It's up to the individual MSI implementations to throw the errors (which helps us provide less generic errors). + */ +function mapScopesToResource(scopes) { + let scope = ""; + if (Array.isArray(scopes)) { + if (scopes.length !== 1) { + return; + } + scope = scopes[0]; + } + else if (typeof scopes === "string") { + scope = scopes; + } + if (!scope.endsWith(DefaultScopeSuffix)) { + return scope; + } + return scope.substr(0, scope.lastIndexOf(DefaultScopeSuffix)); +} +/** + * Given a token response, return the expiration timestamp as the number of milliseconds from the Unix epoch. + * @param body - A parsed response body from the authentication endpoint. + */ +function parseExpirationTimestamp(body) { + if (typeof body.expires_on === "number") { + return body.expires_on * 1000; + } + if (typeof body.expires_on === "string") { + const asNumber = +body.expires_on; + if (!isNaN(asNumber)) { + return asNumber * 1000; + } + const asDate = Date.parse(body.expires_on); + if (!isNaN(asDate)) { + return asDate; + } + } + if (typeof body.expires_in === "number") { + return Date.now() + body.expires_in * 1000; + } + throw new Error(`Failed to parse token expiration from body. expires_in="${body.expires_in}", expires_on="${body.expires_on}"`); +} +/** + * Given a token response, return the expiration timestamp as the number of milliseconds from the Unix epoch. + * @param body - A parsed response body from the authentication endpoint. + */ +function parseRefreshTimestamp(body) { + if (body.refresh_on) { + if (typeof body.refresh_on === "number") { + return body.refresh_on * 1000; + } + if (typeof body.refresh_on === "string") { + const asNumber = +body.refresh_on; + if (!isNaN(asNumber)) { + return asNumber * 1000; + } + const asDate = Date.parse(body.refresh_on); + if (!isNaN(asDate)) { + return asDate; + } + } + throw new Error(`Failed to parse refresh_on from body. refresh_on="${body.refresh_on}"`); + } + else { + return undefined; + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const noCorrelationId = "noCorrelationId"; +/** + * @internal + */ +function getIdentityClientAuthorityHost(options) { + // The authorityHost can come from options or from the AZURE_AUTHORITY_HOST environment variable. + let authorityHost = options === null || options === void 0 ? void 0 : options.authorityHost; + // The AZURE_AUTHORITY_HOST environment variable can only be provided in Node.js. + if (coreUtil.isNode) { + authorityHost = authorityHost !== null && authorityHost !== void 0 ? authorityHost : process.env.AZURE_AUTHORITY_HOST; + } + // If the authorityHost is not provided, we use the default one from the public cloud: https://login.microsoftonline.com + return authorityHost !== null && authorityHost !== void 0 ? authorityHost : DefaultAuthorityHost; +} +/** + * The network module used by the Identity credentials. + * + * It allows for credentials to abort any pending request independently of the MSAL flow, + * by calling to the `abortRequests()` method. + * + */ +class IdentityClient extends coreClient.ServiceClient { + constructor(options) { + var _a, _b; + const packageDetails = `azsdk-js-identity/${SDK_VERSION}`; + const userAgentPrefix = ((_a = options === null || options === void 0 ? void 0 : options.userAgentOptions) === null || _a === void 0 ? void 0 : _a.userAgentPrefix) + ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` + : `${packageDetails}`; + const baseUri = getIdentityClientAuthorityHost(options); + if (!baseUri.startsWith("https:")) { + throw new Error("The authorityHost address must use the 'https' protocol."); + } + super(Object.assign(Object.assign({ requestContentType: "application/json; charset=utf-8", retryOptions: { + maxRetries: 3, + } }, options), { userAgentOptions: { + userAgentPrefix, + }, baseUri })); + this.allowInsecureConnection = false; + this.authorityHost = baseUri; + this.abortControllers = new Map(); + this.allowLoggingAccountIdentifiers = (_b = options === null || options === void 0 ? void 0 : options.loggingOptions) === null || _b === void 0 ? void 0 : _b.allowLoggingAccountIdentifiers; + // used for WorkloadIdentity + this.tokenCredentialOptions = Object.assign({}, options); + // used for ManagedIdentity + if (options === null || options === void 0 ? void 0 : options.allowInsecureConnection) { + this.allowInsecureConnection = options.allowInsecureConnection; + } + } + async sendTokenRequest(request) { + logger$l.info(`IdentityClient: sending token request to [${request.url}]`); + const response = await this.sendRequest(request); + if (response.bodyAsText && (response.status === 200 || response.status === 201)) { + const parsedBody = JSON.parse(response.bodyAsText); + if (!parsedBody.access_token) { + return null; + } + this.logIdentifiers(response); + const token = { + accessToken: { + token: parsedBody.access_token, + expiresOnTimestamp: parseExpirationTimestamp(parsedBody), + refreshAfterTimestamp: parseRefreshTimestamp(parsedBody), + tokenType: "Bearer", + }, + refreshToken: parsedBody.refresh_token, + }; + logger$l.info(`IdentityClient: [${request.url}] token acquired, expires on ${token.accessToken.expiresOnTimestamp}`); + return token; + } + else { + const error = new AuthenticationError(response.status, response.bodyAsText); + logger$l.warning(`IdentityClient: authentication error. HTTP status: ${response.status}, ${error.errorResponse.errorDescription}`); + throw error; + } + } + async refreshAccessToken(tenantId, clientId, scopes, refreshToken, clientSecret, options = {}) { + if (refreshToken === undefined) { + return null; + } + logger$l.info(`IdentityClient: refreshing access token with client ID: ${clientId}, scopes: ${scopes} started`); + const refreshParams = { + grant_type: "refresh_token", + client_id: clientId, + refresh_token: refreshToken, + scope: scopes, + }; + if (clientSecret !== undefined) { + refreshParams.client_secret = clientSecret; + } + const query = new URLSearchParams(refreshParams); + return tracingClient.withSpan("IdentityClient.refreshAccessToken", options, async (updatedOptions) => { + try { + const urlSuffix = getIdentityTokenEndpointSuffix(tenantId); + const request = coreRestPipeline.createPipelineRequest({ + url: `${this.authorityHost}/${tenantId}/${urlSuffix}`, + method: "POST", + body: query.toString(), + abortSignal: options.abortSignal, + headers: coreRestPipeline.createHttpHeaders({ + Accept: "application/json", + "Content-Type": "application/x-www-form-urlencoded", + }), + tracingOptions: updatedOptions.tracingOptions, + }); + const response = await this.sendTokenRequest(request); + logger$l.info(`IdentityClient: refreshed token for client ID: ${clientId}`); + return response; + } + catch (err) { + if (err.name === AuthenticationErrorName && + err.errorResponse.error === "interaction_required") { + // It's likely that the refresh token has expired, so + // return null so that the credential implementation will + // initiate the authentication flow again. + logger$l.info(`IdentityClient: interaction required for client ID: ${clientId}`); + return null; + } + else { + logger$l.warning(`IdentityClient: failed refreshing token for client ID: ${clientId}: ${err}`); + throw err; + } + } + }); + } + // Here is a custom layer that allows us to abort requests that go through MSAL, + // since MSAL doesn't allow us to pass options all the way through. + generateAbortSignal(correlationId) { + const controller = new AbortController(); + const controllers = this.abortControllers.get(correlationId) || []; + controllers.push(controller); + this.abortControllers.set(correlationId, controllers); + const existingOnAbort = controller.signal.onabort; + controller.signal.onabort = (...params) => { + this.abortControllers.set(correlationId, undefined); + if (existingOnAbort) { + existingOnAbort.apply(controller.signal, params); + } + }; + return controller.signal; + } + abortRequests(correlationId) { + const key = correlationId || noCorrelationId; + const controllers = [ + ...(this.abortControllers.get(key) || []), + // MSAL passes no correlation ID to the get requests... + ...(this.abortControllers.get(noCorrelationId) || []), + ]; + if (!controllers.length) { + return; + } + for (const controller of controllers) { + controller.abort(); + } + this.abortControllers.set(key, undefined); + } + getCorrelationId(options) { + var _a; + const parameter = (_a = options === null || options === void 0 ? void 0 : options.body) === null || _a === void 0 ? void 0 : _a.split("&").map((part) => part.split("=")).find(([key]) => key === "client-request-id"); + return parameter && parameter.length ? parameter[1] || noCorrelationId : noCorrelationId; + } + // The MSAL network module methods follow + async sendGetRequestAsync(url, options) { + const request = coreRestPipeline.createPipelineRequest({ + url, + method: "GET", + body: options === null || options === void 0 ? void 0 : options.body, + allowInsecureConnection: this.allowInsecureConnection, + headers: coreRestPipeline.createHttpHeaders(options === null || options === void 0 ? void 0 : options.headers), + abortSignal: this.generateAbortSignal(noCorrelationId), + }); + const response = await this.sendRequest(request); + this.logIdentifiers(response); + return { + body: response.bodyAsText ? JSON.parse(response.bodyAsText) : undefined, + headers: response.headers.toJSON(), + status: response.status, + }; + } + async sendPostRequestAsync(url, options) { + const request = coreRestPipeline.createPipelineRequest({ + url, + method: "POST", + body: options === null || options === void 0 ? void 0 : options.body, + headers: coreRestPipeline.createHttpHeaders(options === null || options === void 0 ? void 0 : options.headers), + allowInsecureConnection: this.allowInsecureConnection, + // MSAL doesn't send the correlation ID on the get requests. + abortSignal: this.generateAbortSignal(this.getCorrelationId(options)), + }); + const response = await this.sendRequest(request); + this.logIdentifiers(response); + return { + body: response.bodyAsText ? JSON.parse(response.bodyAsText) : undefined, + headers: response.headers.toJSON(), + status: response.status, + }; + } + /** + * + * @internal + */ + getTokenCredentialOptions() { + return this.tokenCredentialOptions; + } + /** + * If allowLoggingAccountIdentifiers was set on the constructor options + * we try to log the account identifiers by parsing the received access token. + * + * The account identifiers we try to log are: + * - `appid`: The application or Client Identifier. + * - `upn`: User Principal Name. + * - It might not be available in some authentication scenarios. + * - If it's not available, we put a placeholder: "No User Principal Name available". + * - `tid`: Tenant Identifier. + * - `oid`: Object Identifier of the authenticated user. + */ + logIdentifiers(response) { + if (!this.allowLoggingAccountIdentifiers || !response.bodyAsText) { + return; + } + const unavailableUpn = "No User Principal Name available"; + try { + const parsed = response.parsedBody || JSON.parse(response.bodyAsText); + const accessToken = parsed.access_token; + if (!accessToken) { + // Without an access token allowLoggingAccountIdentifiers isn't useful. + return; + } + const base64Metadata = accessToken.split(".")[1]; + const { appid, upn, tid, oid } = JSON.parse(Buffer.from(base64Metadata, "base64").toString("utf8")); + logger$l.info(`[Authenticated account] Client ID: ${appid}. Tenant ID: ${tid}. User Principal Name: ${upn || unavailableUpn}. Object ID (user): ${oid}`); + } + catch (e) { + logger$l.warning("allowLoggingAccountIdentifiers was set, but we couldn't log the account information. Error:", e.message); + } + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const CommonTenantId = "common"; +const AzureAccountClientId = "aebc6443-996d-45c2-90f0-388ff96faa56"; // VSC: 'aebc6443-996d-45c2-90f0-388ff96faa56' +const logger$k = credentialLogger("VisualStudioCodeCredential"); +let findCredentials = undefined; +const vsCodeCredentialControl = { + setVsCodeCredentialFinder(finder) { + findCredentials = finder; + }, +}; +// Map of unsupported Tenant IDs and the errors we will be throwing. +const unsupportedTenantIds = { + adfs: "The VisualStudioCodeCredential does not support authentication with ADFS tenants.", +}; +function checkUnsupportedTenant(tenantId) { + // If the Tenant ID isn't supported, we throw. + const unsupportedTenantError = unsupportedTenantIds[tenantId]; + if (unsupportedTenantError) { + throw new CredentialUnavailableError(unsupportedTenantError); + } +} +const mapVSCodeAuthorityHosts = { + AzureCloud: exports.AzureAuthorityHosts.AzurePublicCloud, + AzureChina: exports.AzureAuthorityHosts.AzureChina, + AzureGermanCloud: exports.AzureAuthorityHosts.AzureGermany, + AzureUSGovernment: exports.AzureAuthorityHosts.AzureGovernment, +}; +/** + * Attempts to load a specific property from the VSCode configurations of the current OS. + * If it fails at any point, returns undefined. + */ +function getPropertyFromVSCode(property) { + const settingsPath = ["User", "settings.json"]; + // Eventually we can add more folders for more versions of VSCode. + const vsCodeFolder = "Code"; + const homedir = os.homedir(); + function loadProperty(...pathSegments) { + const fullPath = path.join(...pathSegments, vsCodeFolder, ...settingsPath); + const settings = JSON.parse(fs.readFileSync(fullPath, { encoding: "utf8" })); + return settings[property]; + } + try { + let appData; + switch (process.platform) { + case "win32": + appData = process.env.APPDATA; + return appData ? loadProperty(appData) : undefined; + case "darwin": + return loadProperty(homedir, "Library", "Application Support"); + case "linux": + return loadProperty(homedir, ".config"); + default: + return; + } + } + catch (e) { + logger$k.info(`Failed to load the Visual Studio Code configuration file. Error: ${e.message}`); + return; + } +} +/** + * Connects to Azure using the credential provided by the VSCode extension 'Azure Account'. + * Once the user has logged in via the extension, this credential can share the same refresh token + * that is cached by the extension. + * + * It's a [known issue](https://github.com/Azure/azure-sdk-for-js/issues/20500) that this credential doesn't + * work with [Azure Account extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.azure-account) + * versions newer than **0.9.11**. A long-term fix to this problem is in progress. In the meantime, consider + * authenticating with {@link AzureCliCredential}. + */ +class VisualStudioCodeCredential { + /** + * Creates an instance of VisualStudioCodeCredential to use for automatically authenticating via VSCode. + * + * **Note**: `VisualStudioCodeCredential` is provided by a plugin package: + * `@azure/identity-vscode`. If this package is not installed and registered + * using the plugin API (`useIdentityPlugin`), then authentication using + * `VisualStudioCodeCredential` will not be available. + * + * @param options - Options for configuring the client which makes the authentication request. + */ + constructor(options) { + // We want to make sure we use the one assigned by the user on the VSCode settings. + // Or just `AzureCloud` by default. + this.cloudName = (getPropertyFromVSCode("azure.cloud") || "AzureCloud"); + // Picking an authority host based on the cloud name. + const authorityHost = mapVSCodeAuthorityHosts[this.cloudName]; + this.identityClient = new IdentityClient(Object.assign({ authorityHost }, options)); + if (options && options.tenantId) { + checkTenantId(logger$k, options.tenantId); + this.tenantId = options.tenantId; + } + else { + this.tenantId = CommonTenantId; + } + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + checkUnsupportedTenant(this.tenantId); + } + /** + * Runs preparations for any further getToken request. + */ + async prepare() { + // Attempts to load the tenant from the VSCode configuration file. + const settingsTenant = getPropertyFromVSCode("azure.tenant"); + if (settingsTenant) { + this.tenantId = settingsTenant; + } + checkUnsupportedTenant(this.tenantId); + } + /** + * Runs preparations for any further getToken, but only once. + */ + prepareOnce() { + if (!this.preparePromise) { + this.preparePromise = this.prepare(); + } + return this.preparePromise; + } + /** + * Returns the token found by searching VSCode's authentication cache or + * returns null if no token could be found. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * `TokenCredential` implementation might make. + */ + async getToken(scopes, options) { + var _a, _b; + await this.prepareOnce(); + const tenantId = processMultiTenantRequest(this.tenantId, options, this.additionallyAllowedTenantIds, logger$k) || this.tenantId; + if (findCredentials === undefined) { + throw new CredentialUnavailableError([ + "No implementation of `VisualStudioCodeCredential` is available.", + "You must install the identity-vscode plugin package (`npm install --save-dev @azure/identity-vscode`)", + "and enable it by importing `useIdentityPlugin` from `@azure/identity` and calling", + "`useIdentityPlugin(vsCodePlugin)` before creating a `VisualStudioCodeCredential`.", + "To troubleshoot, visit https://aka.ms/azsdk/js/identity/vscodecredential/troubleshoot.", + ].join(" ")); + } + let scopeString = typeof scopes === "string" ? scopes : scopes.join(" "); + // Check to make sure the scope we get back is a valid scope + if (!scopeString.match(/^[0-9a-zA-Z-.:/]+$/)) { + const error = new Error("Invalid scope was specified by the user or calling client"); + logger$k.getToken.info(formatError(scopes, error)); + throw error; + } + if (scopeString.indexOf("offline_access") < 0) { + scopeString += " offline_access"; + } + // findCredentials returns an array similar to: + // [ + // { + // account: "", + // password: "", + // }, + // /* ... */ + // ] + const credentials = await findCredentials(); + // If we can't find the credential based on the name, we'll pick the first one available. + const { password: refreshToken } = (_b = (_a = credentials.find(({ account }) => account === this.cloudName)) !== null && _a !== void 0 ? _a : credentials[0]) !== null && _b !== void 0 ? _b : {}; + if (refreshToken) { + const tokenResponse = await this.identityClient.refreshAccessToken(tenantId, AzureAccountClientId, scopeString, refreshToken, undefined); + if (tokenResponse) { + logger$k.getToken.info(formatSuccess(scopes)); + return tokenResponse.accessToken; + } + else { + const error = new CredentialUnavailableError("Could not retrieve the token associated with Visual Studio Code. Have you connected using the 'Azure Account' extension recently? To troubleshoot, visit https://aka.ms/azsdk/js/identity/vscodecredential/troubleshoot."); + logger$k.getToken.info(formatError(scopes, error)); + throw error; + } + } + else { + const error = new CredentialUnavailableError("Could not retrieve the token associated with Visual Studio Code. Did you connect using the 'Azure Account' extension? To troubleshoot, visit https://aka.ms/azsdk/js/identity/vscodecredential/troubleshoot."); + logger$k.getToken.info(formatError(scopes, error)); + throw error; + } + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * The context passed to an Identity plugin. This contains objects that + * plugins can use to set backend implementations. + * @internal + */ +const pluginContext = { + cachePluginControl: msalNodeFlowCacheControl, + nativeBrokerPluginControl: msalNodeFlowNativeBrokerControl, + vsCodeCredentialControl: vsCodeCredentialControl, +}; +/** + * Extend Azure Identity with additional functionality. Pass a plugin from + * a plugin package, such as: + * + * - `@azure/identity-cache-persistence`: provides persistent token caching + * - `@azure/identity-vscode`: provides the dependencies of + * `VisualStudioCodeCredential` and enables it + * + * Example: + * + * ```ts snippet:consumer_example + * import { useIdentityPlugin, DeviceCodeCredential } from "@azure/identity"; + * + * useIdentityPlugin(cachePersistencePlugin); + * // The plugin has the capability to extend `DeviceCodeCredential` and to + * // add middleware to the underlying credentials, such as persistence. + * const credential = new DeviceCodeCredential({ + * tokenCachePersistenceOptions: { + * enabled: true, + * }, + * }); + * ``` + * + * @param plugin - the plugin to register + */ +function useIdentityPlugin(plugin) { + plugin(pluginContext); +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * @internal + */ +const logger$j = credentialLogger("IdentityUtils"); +/** + * Latest AuthenticationRecord version + * @internal + */ +const LatestAuthenticationRecordVersion = "1.0"; +/** + * Ensures the validity of the MSAL token + * @internal + */ +function ensureValidMsalToken(scopes, msalToken, getTokenOptions) { + const error = (message) => { + logger$j.getToken.info(message); + return new AuthenticationRequiredError({ + scopes: Array.isArray(scopes) ? scopes : [scopes], + getTokenOptions, + message, + }); + }; + if (!msalToken) { + throw error("No response"); + } + if (!msalToken.expiresOn) { + throw error(`Response had no "expiresOn" property.`); + } + if (!msalToken.accessToken) { + throw error(`Response had no "accessToken" property.`); + } +} +/** + * Returns the authority host from either the options bag or the AZURE_AUTHORITY_HOST environment variable. + * + * Defaults to {@link DefaultAuthorityHost}. + * @internal + */ +function getAuthorityHost(options) { + let authorityHost = options === null || options === void 0 ? void 0 : options.authorityHost; + if (!authorityHost && coreUtil.isNodeLike) { + authorityHost = process.env.AZURE_AUTHORITY_HOST; + } + return authorityHost !== null && authorityHost !== void 0 ? authorityHost : DefaultAuthorityHost; +} +/** + * Generates a valid authority by combining a host with a tenantId. + * @internal + */ +function getAuthority(tenantId, host) { + if (!host) { + host = DefaultAuthorityHost; + } + if (new RegExp(`${tenantId}/?$`).test(host)) { + return host; + } + if (host.endsWith("/")) { + return host + tenantId; + } + else { + return `${host}/${tenantId}`; + } +} +/** + * Generates the known authorities. + * If the Tenant Id is `adfs`, the authority can't be validated since the format won't match the expected one. + * For that reason, we have to force MSAL to disable validating the authority + * by sending it within the known authorities in the MSAL configuration. + * @internal + */ +function getKnownAuthorities(tenantId, authorityHost, disableInstanceDiscovery) { + if ((tenantId === "adfs" && authorityHost) || disableInstanceDiscovery) { + return [authorityHost]; + } + return []; +} +/** + * Generates a logger that can be passed to the MSAL clients. + * @param credLogger - The logger of the credential. + * @internal + */ +const defaultLoggerCallback = (credLogger, platform = coreUtil.isNode ? "Node" : "Browser") => (level, message, containsPii) => { + if (containsPii) { + return; + } + switch (level) { + case msalCommon__namespace.LogLevel.Error: + credLogger.info(`MSAL ${platform} V2 error: ${message}`); + return; + case msalCommon__namespace.LogLevel.Info: + credLogger.info(`MSAL ${platform} V2 info message: ${message}`); + return; + case msalCommon__namespace.LogLevel.Verbose: + credLogger.info(`MSAL ${platform} V2 verbose message: ${message}`); + return; + case msalCommon__namespace.LogLevel.Warning: + credLogger.info(`MSAL ${platform} V2 warning: ${message}`); + return; + } +}; +/** + * @internal + */ +function getMSALLogLevel(logLevel) { + switch (logLevel) { + case "error": + return msalCommon__namespace.LogLevel.Error; + case "info": + return msalCommon__namespace.LogLevel.Info; + case "verbose": + return msalCommon__namespace.LogLevel.Verbose; + case "warning": + return msalCommon__namespace.LogLevel.Warning; + default: + // default msal logging level should be Info + return msalCommon__namespace.LogLevel.Info; + } +} +/** + * Handles MSAL errors. + */ +function handleMsalError(scopes, error, getTokenOptions) { + if (error.name === "AuthError" || + error.name === "ClientAuthError" || + error.name === "BrowserAuthError") { + const msalError = error; + switch (msalError.errorCode) { + case "endpoints_resolution_error": + logger$j.info(formatError(scopes, error.message)); + return new CredentialUnavailableError(error.message); + case "device_code_polling_cancelled": + return new abortController.AbortError("The authentication has been aborted by the caller."); + case "consent_required": + case "interaction_required": + case "login_required": + logger$j.info(formatError(scopes, `Authentication returned errorCode ${msalError.errorCode}`)); + break; + default: + logger$j.info(formatError(scopes, `Failed to acquire token: ${error.message}`)); + break; + } + } + if (error.name === "ClientConfigurationError" || + error.name === "BrowserConfigurationAuthError" || + error.name === "AbortError" || + error.name === "AuthenticationError") { + return error; + } + if (error.name === "NativeAuthError") { + logger$j.info(formatError(scopes, `Error from the native broker: ${error.message} with status code: ${error.statusCode}`)); + return error; + } + return new AuthenticationRequiredError({ scopes, getTokenOptions, message: error.message }); +} +// transformations.ts +function publicToMsal(account) { + const [environment] = account.authority.match(/([a-z]*\.[a-z]*\.[a-z]*)/) || [""]; + return Object.assign(Object.assign({}, account), { localAccountId: account.homeAccountId, environment }); +} +function msalToPublic(clientId, account) { + const record = { + authority: getAuthority(account.tenantId, account.environment), + homeAccountId: account.homeAccountId, + tenantId: account.tenantId || DefaultTenantId, + username: account.username, + clientId, + version: LatestAuthenticationRecordVersion, + }; + return record; +} +/** + * Serializes an `AuthenticationRecord` into a string. + * + * The output of a serialized authentication record will contain the following properties: + * + * - "authority" + * - "homeAccountId" + * - "clientId" + * - "tenantId" + * - "username" + * - "version" + * + * To later convert this string to a serialized `AuthenticationRecord`, please use the exported function `deserializeAuthenticationRecord()`. + */ +function serializeAuthenticationRecord(record) { + return JSON.stringify(record); +} +/** + * Deserializes a previously serialized authentication record from a string into an object. + * + * The input string must contain the following properties: + * + * - "authority" + * - "homeAccountId" + * - "clientId" + * - "tenantId" + * - "username" + * - "version" + * + * If the version we receive is unsupported, an error will be thrown. + * + * At the moment, the only available version is: "1.0", which is always set when the authentication record is serialized. + * + * @param serializedRecord - Authentication record previously serialized into string. + * @returns AuthenticationRecord. + */ +function deserializeAuthenticationRecord(serializedRecord) { + const parsed = JSON.parse(serializedRecord); + if (parsed.version && parsed.version !== LatestAuthenticationRecordVersion) { + throw Error("Unsupported AuthenticationRecord version"); + } + return parsed; +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const msiName$1 = "ManagedIdentityCredential - IMDS"; +const logger$i = credentialLogger(msiName$1); +/** + * Generates the options used on the request for an access token. + */ +function prepareRequestOptions(scopes, clientId, resourceId, options) { + var _a; + const resource = mapScopesToResource(scopes); + if (!resource) { + throw new Error(`${msiName$1}: Multiple scopes are not supported.`); + } + const { skipQuery, skipMetadataHeader } = options || {}; + let query = ""; + // Pod Identity will try to process this request even if the Metadata header is missing. + // We can exclude the request query to ensure no IMDS endpoint tries to process the ping request. + if (!skipQuery) { + const queryParameters = { + resource, + "api-version": imdsApiVersion, + }; + if (clientId) { + queryParameters.client_id = clientId; + } + if (resourceId) { + queryParameters.msi_res_id = resourceId; + } + const params = new URLSearchParams(queryParameters); + query = `?${params.toString()}`; + } + const url = new URL(imdsEndpointPath, (_a = process.env.AZURE_POD_IDENTITY_AUTHORITY_HOST) !== null && _a !== void 0 ? _a : imdsHost); + const rawHeaders = { + Accept: "application/json", + Metadata: "true", + }; + // Remove the Metadata header to invoke a request error from some IMDS endpoints. + if (skipMetadataHeader) { + delete rawHeaders.Metadata; + } + return { + // In this case, the `?` should be added in the "query" variable `skipQuery` is not set. + url: `${url}${query}`, + method: "GET", + headers: coreRestPipeline.createHttpHeaders(rawHeaders), + }; +} +/** + * Defines how to determine whether the Azure IMDS MSI is available, and also how to retrieve a token from the Azure IMDS MSI. + */ +const imdsMsi = { + name: "imdsMsi", + async isAvailable({ scopes, identityClient, clientId, resourceId, getTokenOptions = {}, }) { + const resource = mapScopesToResource(scopes); + if (!resource) { + logger$i.info(`${msiName$1}: Unavailable. Multiple scopes are not supported.`); + return false; + } + // if the PodIdentityEndpoint environment variable was set no need to probe the endpoint, it can be assumed to exist + if (process.env.AZURE_POD_IDENTITY_AUTHORITY_HOST) { + return true; + } + if (!identityClient) { + throw new Error("Missing IdentityClient"); + } + const requestOptions = prepareRequestOptions(resource, clientId, resourceId, { + skipMetadataHeader: true, + skipQuery: true, + }); + return tracingClient.withSpan("ManagedIdentityCredential-pingImdsEndpoint", getTokenOptions, async (options) => { + var _a, _b; + requestOptions.tracingOptions = options.tracingOptions; + // Create a request with a timeout since we expect that + // not having a "Metadata" header should cause an error to be + // returned quickly from the endpoint, proving its availability. + const request = coreRestPipeline.createPipelineRequest(requestOptions); + // Default to 1000 if the default of 0 is used. + // Negative values can still be used to disable the timeout. + request.timeout = ((_a = options.requestOptions) === null || _a === void 0 ? void 0 : _a.timeout) || 1000; + // This MSI uses the imdsEndpoint to get the token, which only uses http:// + request.allowInsecureConnection = true; + let response; + try { + logger$i.info(`${msiName$1}: Pinging the Azure IMDS endpoint`); + response = await identityClient.sendRequest(request); + } + catch (err) { + // If the request failed, or Node.js was unable to establish a connection, + // or the host was down, we'll assume the IMDS endpoint isn't available. + if (coreUtil.isError(err)) { + logger$i.verbose(`${msiName$1}: Caught error ${err.name}: ${err.message}`); + } + // This is a special case for Docker Desktop which responds with a 403 with a message that contains "A socket operation was attempted to an unreachable network" or "A socket operation was attempted to an unreachable host" + // rather than just timing out, as expected. + logger$i.info(`${msiName$1}: The Azure IMDS endpoint is unavailable`); + return false; + } + if (response.status === 403) { + if ((_b = response.bodyAsText) === null || _b === void 0 ? void 0 : _b.includes("unreachable")) { + logger$i.info(`${msiName$1}: The Azure IMDS endpoint is unavailable`); + logger$i.info(`${msiName$1}: ${response.bodyAsText}`); + return false; + } + } + // If we received any response, the endpoint is available + logger$i.info(`${msiName$1}: The Azure IMDS endpoint is available`); + return true; + }); + }, + async getToken(configuration, getTokenOptions = {}) { + const { identityClient, scopes, clientId, resourceId } = configuration; + if (process.env.AZURE_POD_IDENTITY_AUTHORITY_HOST) { + logger$i.info(`${msiName$1}: Using the Azure IMDS endpoint coming from the environment variable AZURE_POD_IDENTITY_AUTHORITY_HOST=${process.env.AZURE_POD_IDENTITY_AUTHORITY_HOST}.`); + } + else { + logger$i.info(`${msiName$1}: Using the default Azure IMDS endpoint ${imdsHost}.`); + } + let nextDelayInMs = configuration.retryConfig.startDelayInMs; + for (let retries = 0; retries < configuration.retryConfig.maxRetries; retries++) { + try { + const request = coreRestPipeline.createPipelineRequest(Object.assign(Object.assign({ abortSignal: getTokenOptions.abortSignal }, prepareRequestOptions(scopes, clientId, resourceId)), { allowInsecureConnection: true })); + const tokenResponse = await identityClient.sendTokenRequest(request); + return (tokenResponse && tokenResponse.accessToken) || null; + } + catch (error) { + if (error.statusCode === 404) { + await coreUtil.delay(nextDelayInMs); + nextDelayInMs *= configuration.retryConfig.intervalIncrement; + continue; + } + throw error; + } + } + throw new AuthenticationError(404, `${msiName$1}: Failed to retrieve IMDS token after ${configuration.retryConfig.maxRetries} retries.`); + }, +}; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Matches the default retry configuration in expontentialRetryStrategy.ts +const DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 64; +/** + * An additional policy that retries on 404 errors. The default retry policy does not retry on + * 404s, but the IMDS endpoint can return 404s when the token is not yet available. This policy + * will retry on 404s with an exponential backoff. + * + * @param msiRetryConfig - The retry configuration for the MSI credential. + * @returns - The policy that will retry on 404s. + */ +function imdsRetryPolicy(msiRetryConfig) { + return coreRestPipeline.retryPolicy([ + { + name: "imdsRetryPolicy", + retry: ({ retryCount, response }) => { + if ((response === null || response === void 0 ? void 0 : response.status) !== 404) { + return { skipStrategy: true }; + } + return coreUtil.calculateRetryDelay(retryCount, { + retryDelayInMs: msiRetryConfig.startDelayInMs, + maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL, + }); + }, + }, + ], { + maxRetries: msiRetryConfig.maxRetries, + }); +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Helps specify a regional authority, or "AutoDiscoverRegion" to auto-detect the region. + */ +var RegionalAuthority; +(function (RegionalAuthority) { + /** Instructs MSAL to attempt to discover the region */ + RegionalAuthority["AutoDiscoverRegion"] = "AutoDiscoverRegion"; + /** Uses the {@link RegionalAuthority} for the Azure 'westus' region. */ + RegionalAuthority["USWest"] = "westus"; + /** Uses the {@link RegionalAuthority} for the Azure 'westus2' region. */ + RegionalAuthority["USWest2"] = "westus2"; + /** Uses the {@link RegionalAuthority} for the Azure 'centralus' region. */ + RegionalAuthority["USCentral"] = "centralus"; + /** Uses the {@link RegionalAuthority} for the Azure 'eastus' region. */ + RegionalAuthority["USEast"] = "eastus"; + /** Uses the {@link RegionalAuthority} for the Azure 'eastus2' region. */ + RegionalAuthority["USEast2"] = "eastus2"; + /** Uses the {@link RegionalAuthority} for the Azure 'northcentralus' region. */ + RegionalAuthority["USNorthCentral"] = "northcentralus"; + /** Uses the {@link RegionalAuthority} for the Azure 'southcentralus' region. */ + RegionalAuthority["USSouthCentral"] = "southcentralus"; + /** Uses the {@link RegionalAuthority} for the Azure 'westcentralus' region. */ + RegionalAuthority["USWestCentral"] = "westcentralus"; + /** Uses the {@link RegionalAuthority} for the Azure 'canadacentral' region. */ + RegionalAuthority["CanadaCentral"] = "canadacentral"; + /** Uses the {@link RegionalAuthority} for the Azure 'canadaeast' region. */ + RegionalAuthority["CanadaEast"] = "canadaeast"; + /** Uses the {@link RegionalAuthority} for the Azure 'brazilsouth' region. */ + RegionalAuthority["BrazilSouth"] = "brazilsouth"; + /** Uses the {@link RegionalAuthority} for the Azure 'northeurope' region. */ + RegionalAuthority["EuropeNorth"] = "northeurope"; + /** Uses the {@link RegionalAuthority} for the Azure 'westeurope' region. */ + RegionalAuthority["EuropeWest"] = "westeurope"; + /** Uses the {@link RegionalAuthority} for the Azure 'uksouth' region. */ + RegionalAuthority["UKSouth"] = "uksouth"; + /** Uses the {@link RegionalAuthority} for the Azure 'ukwest' region. */ + RegionalAuthority["UKWest"] = "ukwest"; + /** Uses the {@link RegionalAuthority} for the Azure 'francecentral' region. */ + RegionalAuthority["FranceCentral"] = "francecentral"; + /** Uses the {@link RegionalAuthority} for the Azure 'francesouth' region. */ + RegionalAuthority["FranceSouth"] = "francesouth"; + /** Uses the {@link RegionalAuthority} for the Azure 'switzerlandnorth' region. */ + RegionalAuthority["SwitzerlandNorth"] = "switzerlandnorth"; + /** Uses the {@link RegionalAuthority} for the Azure 'switzerlandwest' region. */ + RegionalAuthority["SwitzerlandWest"] = "switzerlandwest"; + /** Uses the {@link RegionalAuthority} for the Azure 'germanynorth' region. */ + RegionalAuthority["GermanyNorth"] = "germanynorth"; + /** Uses the {@link RegionalAuthority} for the Azure 'germanywestcentral' region. */ + RegionalAuthority["GermanyWestCentral"] = "germanywestcentral"; + /** Uses the {@link RegionalAuthority} for the Azure 'norwaywest' region. */ + RegionalAuthority["NorwayWest"] = "norwaywest"; + /** Uses the {@link RegionalAuthority} for the Azure 'norwayeast' region. */ + RegionalAuthority["NorwayEast"] = "norwayeast"; + /** Uses the {@link RegionalAuthority} for the Azure 'eastasia' region. */ + RegionalAuthority["AsiaEast"] = "eastasia"; + /** Uses the {@link RegionalAuthority} for the Azure 'southeastasia' region. */ + RegionalAuthority["AsiaSouthEast"] = "southeastasia"; + /** Uses the {@link RegionalAuthority} for the Azure 'japaneast' region. */ + RegionalAuthority["JapanEast"] = "japaneast"; + /** Uses the {@link RegionalAuthority} for the Azure 'japanwest' region. */ + RegionalAuthority["JapanWest"] = "japanwest"; + /** Uses the {@link RegionalAuthority} for the Azure 'australiaeast' region. */ + RegionalAuthority["AustraliaEast"] = "australiaeast"; + /** Uses the {@link RegionalAuthority} for the Azure 'australiasoutheast' region. */ + RegionalAuthority["AustraliaSouthEast"] = "australiasoutheast"; + /** Uses the {@link RegionalAuthority} for the Azure 'australiacentral' region. */ + RegionalAuthority["AustraliaCentral"] = "australiacentral"; + /** Uses the {@link RegionalAuthority} for the Azure 'australiacentral2' region. */ + RegionalAuthority["AustraliaCentral2"] = "australiacentral2"; + /** Uses the {@link RegionalAuthority} for the Azure 'centralindia' region. */ + RegionalAuthority["IndiaCentral"] = "centralindia"; + /** Uses the {@link RegionalAuthority} for the Azure 'southindia' region. */ + RegionalAuthority["IndiaSouth"] = "southindia"; + /** Uses the {@link RegionalAuthority} for the Azure 'westindia' region. */ + RegionalAuthority["IndiaWest"] = "westindia"; + /** Uses the {@link RegionalAuthority} for the Azure 'koreasouth' region. */ + RegionalAuthority["KoreaSouth"] = "koreasouth"; + /** Uses the {@link RegionalAuthority} for the Azure 'koreacentral' region. */ + RegionalAuthority["KoreaCentral"] = "koreacentral"; + /** Uses the {@link RegionalAuthority} for the Azure 'uaecentral' region. */ + RegionalAuthority["UAECentral"] = "uaecentral"; + /** Uses the {@link RegionalAuthority} for the Azure 'uaenorth' region. */ + RegionalAuthority["UAENorth"] = "uaenorth"; + /** Uses the {@link RegionalAuthority} for the Azure 'southafricanorth' region. */ + RegionalAuthority["SouthAfricaNorth"] = "southafricanorth"; + /** Uses the {@link RegionalAuthority} for the Azure 'southafricawest' region. */ + RegionalAuthority["SouthAfricaWest"] = "southafricawest"; + /** Uses the {@link RegionalAuthority} for the Azure 'chinanorth' region. */ + RegionalAuthority["ChinaNorth"] = "chinanorth"; + /** Uses the {@link RegionalAuthority} for the Azure 'chinaeast' region. */ + RegionalAuthority["ChinaEast"] = "chinaeast"; + /** Uses the {@link RegionalAuthority} for the Azure 'chinanorth2' region. */ + RegionalAuthority["ChinaNorth2"] = "chinanorth2"; + /** Uses the {@link RegionalAuthority} for the Azure 'chinaeast2' region. */ + RegionalAuthority["ChinaEast2"] = "chinaeast2"; + /** Uses the {@link RegionalAuthority} for the Azure 'germanycentral' region. */ + RegionalAuthority["GermanyCentral"] = "germanycentral"; + /** Uses the {@link RegionalAuthority} for the Azure 'germanynortheast' region. */ + RegionalAuthority["GermanyNorthEast"] = "germanynortheast"; + /** Uses the {@link RegionalAuthority} for the Azure 'usgovvirginia' region. */ + RegionalAuthority["GovernmentUSVirginia"] = "usgovvirginia"; + /** Uses the {@link RegionalAuthority} for the Azure 'usgoviowa' region. */ + RegionalAuthority["GovernmentUSIowa"] = "usgoviowa"; + /** Uses the {@link RegionalAuthority} for the Azure 'usgovarizona' region. */ + RegionalAuthority["GovernmentUSArizona"] = "usgovarizona"; + /** Uses the {@link RegionalAuthority} for the Azure 'usgovtexas' region. */ + RegionalAuthority["GovernmentUSTexas"] = "usgovtexas"; + /** Uses the {@link RegionalAuthority} for the Azure 'usdodeast' region. */ + RegionalAuthority["GovernmentUSDodEast"] = "usdodeast"; + /** Uses the {@link RegionalAuthority} for the Azure 'usdodcentral' region. */ + RegionalAuthority["GovernmentUSDodCentral"] = "usdodcentral"; +})(RegionalAuthority || (RegionalAuthority = {})); +/** + * Calculates the correct regional authority based on the supplied value + * and the AZURE_REGIONAL_AUTHORITY_NAME environment variable. + * + * Values will be returned verbatim, except for {@link RegionalAuthority.AutoDiscoverRegion} + * which is mapped to a value MSAL can understand. + * + * @internal + */ +function calculateRegionalAuthority(regionalAuthority) { + // Note: as of today only 3 credentials support regional authority, and the parameter + // is not exposed via the public API. Regional Authority is _only_ supported + // via the AZURE_REGIONAL_AUTHORITY_NAME env var and _only_ for: ClientSecretCredential, ClientCertificateCredential, and ClientAssertionCredential. + var _a, _b; + // Accepting the regionalAuthority parameter will allow us to support it in the future. + let azureRegion = regionalAuthority; + if (azureRegion === undefined && + ((_b = (_a = globalThis.process) === null || _a === void 0 ? void 0 : _a.env) === null || _b === void 0 ? void 0 : _b.AZURE_REGIONAL_AUTHORITY_NAME) !== undefined) { + azureRegion = process.env.AZURE_REGIONAL_AUTHORITY_NAME; + } + if (azureRegion === RegionalAuthority.AutoDiscoverRegion) { + return "AUTO_DISCOVER"; + } + return azureRegion; +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * The default logger used if no logger was passed in by the credential. + */ +const msalLogger = credentialLogger("MsalClient"); +/** + * A call to open(), but mockable + * @internal + */ +const interactiveBrowserMockable = { + open, +}; +/** + * Generates the configuration for MSAL (Microsoft Authentication Library). + * + * @param clientId - The client ID of the application. + * @param tenantId - The tenant ID of the Azure Active Directory. + * @param msalClientOptions - Optional. Additional options for creating the MSAL client. + * @returns The MSAL configuration object. + */ +function generateMsalConfiguration(clientId, tenantId, msalClientOptions = {}) { + var _a, _b, _c; + const resolvedTenant = resolveTenantId((_a = msalClientOptions.logger) !== null && _a !== void 0 ? _a : msalLogger, tenantId, clientId); + // TODO: move and reuse getIdentityClientAuthorityHost + const authority = getAuthority(resolvedTenant, getAuthorityHost(msalClientOptions)); + const httpClient = new IdentityClient(Object.assign(Object.assign({}, msalClientOptions.tokenCredentialOptions), { authorityHost: authority, loggingOptions: msalClientOptions.loggingOptions })); + const msalConfig = { + auth: { + clientId, + authority, + knownAuthorities: getKnownAuthorities(resolvedTenant, authority, msalClientOptions.disableInstanceDiscovery), + }, + system: { + networkClient: httpClient, + loggerOptions: { + loggerCallback: defaultLoggerCallback((_b = msalClientOptions.logger) !== null && _b !== void 0 ? _b : msalLogger), + logLevel: getMSALLogLevel(logger$m.getLogLevel()), + piiLoggingEnabled: (_c = msalClientOptions.loggingOptions) === null || _c === void 0 ? void 0 : _c.enableUnsafeSupportLogging, + }, + }, + }; + return msalConfig; +} +/** + * Creates an instance of the MSAL (Microsoft Authentication Library) client. + * + * @param clientId - The client ID of the application. + * @param tenantId - The tenant ID of the Azure Active Directory. + * @param createMsalClientOptions - Optional. Additional options for creating the MSAL client. + * @returns An instance of the MSAL client. + * + * @public + */ +function createMsalClient(clientId, tenantId, createMsalClientOptions = {}) { + var _a; + const state = { + msalConfig: generateMsalConfiguration(clientId, tenantId, createMsalClientOptions), + cachedAccount: createMsalClientOptions.authenticationRecord + ? publicToMsal(createMsalClientOptions.authenticationRecord) + : null, + pluginConfiguration: msalPlugins.generatePluginConfiguration(createMsalClientOptions), + logger: (_a = createMsalClientOptions.logger) !== null && _a !== void 0 ? _a : msalLogger, + }; + const publicApps = new Map(); + async function getPublicApp(options = {}) { + const appKey = options.enableCae ? "CAE" : "default"; + let publicClientApp = publicApps.get(appKey); + if (publicClientApp) { + state.logger.getToken.info("Existing PublicClientApplication found in cache, returning it."); + return publicClientApp; + } + // Initialize a new app and cache it + state.logger.getToken.info(`Creating new PublicClientApplication with CAE ${options.enableCae ? "enabled" : "disabled"}.`); + const cachePlugin = options.enableCae + ? state.pluginConfiguration.cache.cachePluginCae + : state.pluginConfiguration.cache.cachePlugin; + state.msalConfig.auth.clientCapabilities = options.enableCae ? ["cp1"] : undefined; + publicClientApp = new msalCommon__namespace.PublicClientApplication(Object.assign(Object.assign({}, state.msalConfig), { broker: { nativeBrokerPlugin: state.pluginConfiguration.broker.nativeBrokerPlugin }, cache: { cachePlugin: await cachePlugin } })); + publicApps.set(appKey, publicClientApp); + return publicClientApp; + } + const confidentialApps = new Map(); + async function getConfidentialApp(options = {}) { + const appKey = options.enableCae ? "CAE" : "default"; + let confidentialClientApp = confidentialApps.get(appKey); + if (confidentialClientApp) { + state.logger.getToken.info("Existing ConfidentialClientApplication found in cache, returning it."); + return confidentialClientApp; + } + // Initialize a new app and cache it + state.logger.getToken.info(`Creating new ConfidentialClientApplication with CAE ${options.enableCae ? "enabled" : "disabled"}.`); + const cachePlugin = options.enableCae + ? state.pluginConfiguration.cache.cachePluginCae + : state.pluginConfiguration.cache.cachePlugin; + state.msalConfig.auth.clientCapabilities = options.enableCae ? ["cp1"] : undefined; + confidentialClientApp = new msalCommon__namespace.ConfidentialClientApplication(Object.assign(Object.assign({}, state.msalConfig), { broker: { nativeBrokerPlugin: state.pluginConfiguration.broker.nativeBrokerPlugin }, cache: { cachePlugin: await cachePlugin } })); + confidentialApps.set(appKey, confidentialClientApp); + return confidentialClientApp; + } + async function getTokenSilent(app, scopes, options = {}) { + if (state.cachedAccount === null) { + state.logger.getToken.info("No cached account found in local state, attempting to load it from MSAL cache."); + const cache = app.getTokenCache(); + const accounts = await cache.getAllAccounts(); + if (accounts === undefined || accounts.length === 0) { + throw new AuthenticationRequiredError({ scopes }); + } + if (accounts.length > 1) { + state.logger + .info(`More than one account was found authenticated for this Client ID and Tenant ID. +However, no "authenticationRecord" has been provided for this credential, +therefore we're unable to pick between these accounts. +A new login attempt will be requested, to ensure the correct account is picked. +To work with multiple accounts for the same Client ID and Tenant ID, please provide an "authenticationRecord" when initializing a credential to prevent this from happening.`); + throw new AuthenticationRequiredError({ scopes }); + } + state.cachedAccount = accounts[0]; + } + // Keep track and reuse the claims we received across challenges + if (options.claims) { + state.cachedClaims = options.claims; + } + const silentRequest = { + account: state.cachedAccount, + scopes, + claims: state.cachedClaims, + }; + if (state.pluginConfiguration.broker.isEnabled) { + silentRequest.tokenQueryParameters || (silentRequest.tokenQueryParameters = {}); + if (state.pluginConfiguration.broker.enableMsaPassthrough) { + silentRequest.tokenQueryParameters["msal_request_type"] = "consumer_passthrough"; + } + } + if (options.proofOfPossessionOptions) { + silentRequest.shrNonce = options.proofOfPossessionOptions.nonce; + silentRequest.authenticationScheme = "pop"; + silentRequest.resourceRequestMethod = options.proofOfPossessionOptions.resourceRequestMethod; + silentRequest.resourceRequestUri = options.proofOfPossessionOptions.resourceRequestUrl; + } + state.logger.getToken.info("Attempting to acquire token silently"); + return app.acquireTokenSilent(silentRequest); + } + /** + * Builds an authority URL for the given request. The authority may be different than the one used when creating the MSAL client + * if the user is creating cross-tenant requests + */ + function calculateRequestAuthority(options) { + if (options === null || options === void 0 ? void 0 : options.tenantId) { + return getAuthority(options.tenantId, getAuthorityHost(createMsalClientOptions)); + } + return state.msalConfig.auth.authority; + } + /** + * Performs silent authentication using MSAL to acquire an access token. + * If silent authentication fails, falls back to interactive authentication. + * + * @param msalApp - The MSAL application instance. + * @param scopes - The scopes for which to acquire the access token. + * @param options - The options for acquiring the access token. + * @param onAuthenticationRequired - A callback function to handle interactive authentication when silent authentication fails. + * @returns A promise that resolves to an AccessToken object containing the access token and its expiration timestamp. + */ + async function withSilentAuthentication(msalApp, scopes, options, onAuthenticationRequired) { + var _a, _b; + let response = null; + try { + response = await getTokenSilent(msalApp, scopes, options); + } + catch (e) { + if (e.name !== "AuthenticationRequiredError") { + throw e; + } + if (options.disableAutomaticAuthentication) { + throw new AuthenticationRequiredError({ + scopes, + getTokenOptions: options, + message: "Automatic authentication has been disabled. You may call the authentication() method.", + }); + } + } + // Silent authentication failed + if (response === null) { + try { + response = await onAuthenticationRequired(); + } + catch (err) { + throw handleMsalError(scopes, err, options); + } + } + // At this point we should have a token, process it + ensureValidMsalToken(scopes, response, options); + state.cachedAccount = (_a = response === null || response === void 0 ? void 0 : response.account) !== null && _a !== void 0 ? _a : null; + state.logger.getToken.info(formatSuccess(scopes)); + return { + token: response.accessToken, + expiresOnTimestamp: response.expiresOn.getTime(), + refreshAfterTimestamp: (_b = response.refreshOn) === null || _b === void 0 ? void 0 : _b.getTime(), + tokenType: response.tokenType, + }; + } + async function getTokenByClientSecret(scopes, clientSecret, options = {}) { + var _a; + state.logger.getToken.info(`Attempting to acquire token using client secret`); + state.msalConfig.auth.clientSecret = clientSecret; + const msalApp = await getConfidentialApp(options); + try { + const response = await msalApp.acquireTokenByClientCredential({ + scopes, + authority: calculateRequestAuthority(options), + azureRegion: calculateRegionalAuthority(), + claims: options === null || options === void 0 ? void 0 : options.claims, + }); + ensureValidMsalToken(scopes, response, options); + state.logger.getToken.info(formatSuccess(scopes)); + return { + token: response.accessToken, + expiresOnTimestamp: response.expiresOn.getTime(), + refreshAfterTimestamp: (_a = response.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(), + tokenType: response.tokenType, + }; + } + catch (err) { + throw handleMsalError(scopes, err, options); + } + } + async function getTokenByClientAssertion(scopes, clientAssertion, options = {}) { + var _a; + state.logger.getToken.info(`Attempting to acquire token using client assertion`); + state.msalConfig.auth.clientAssertion = clientAssertion; + const msalApp = await getConfidentialApp(options); + try { + const response = await msalApp.acquireTokenByClientCredential({ + scopes, + authority: calculateRequestAuthority(options), + azureRegion: calculateRegionalAuthority(), + claims: options === null || options === void 0 ? void 0 : options.claims, + clientAssertion, + }); + ensureValidMsalToken(scopes, response, options); + state.logger.getToken.info(formatSuccess(scopes)); + return { + token: response.accessToken, + expiresOnTimestamp: response.expiresOn.getTime(), + refreshAfterTimestamp: (_a = response.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(), + tokenType: response.tokenType, + }; + } + catch (err) { + throw handleMsalError(scopes, err, options); + } + } + async function getTokenByClientCertificate(scopes, certificate, options = {}) { + var _a; + state.logger.getToken.info(`Attempting to acquire token using client certificate`); + state.msalConfig.auth.clientCertificate = certificate; + const msalApp = await getConfidentialApp(options); + try { + const response = await msalApp.acquireTokenByClientCredential({ + scopes, + authority: calculateRequestAuthority(options), + azureRegion: calculateRegionalAuthority(), + claims: options === null || options === void 0 ? void 0 : options.claims, + }); + ensureValidMsalToken(scopes, response, options); + state.logger.getToken.info(formatSuccess(scopes)); + return { + token: response.accessToken, + expiresOnTimestamp: response.expiresOn.getTime(), + refreshAfterTimestamp: (_a = response.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(), + tokenType: response.tokenType, + }; + } + catch (err) { + throw handleMsalError(scopes, err, options); + } + } + async function getTokenByDeviceCode(scopes, deviceCodeCallback, options = {}) { + state.logger.getToken.info(`Attempting to acquire token using device code`); + const msalApp = await getPublicApp(options); + return withSilentAuthentication(msalApp, scopes, options, () => { + var _a, _b; + const requestOptions = { + scopes, + cancel: (_b = (_a = options === null || options === void 0 ? void 0 : options.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) !== null && _b !== void 0 ? _b : false, + deviceCodeCallback, + authority: calculateRequestAuthority(options), + claims: options === null || options === void 0 ? void 0 : options.claims, + }; + const deviceCodeRequest = msalApp.acquireTokenByDeviceCode(requestOptions); + if (options.abortSignal) { + options.abortSignal.addEventListener("abort", () => { + requestOptions.cancel = true; + }); + } + return deviceCodeRequest; + }); + } + async function getTokenByUsernamePassword(scopes, username, password, options = {}) { + state.logger.getToken.info(`Attempting to acquire token using username and password`); + const msalApp = await getPublicApp(options); + return withSilentAuthentication(msalApp, scopes, options, () => { + const requestOptions = { + scopes, + username, + password, + authority: calculateRequestAuthority(options), + claims: options === null || options === void 0 ? void 0 : options.claims, + }; + return msalApp.acquireTokenByUsernamePassword(requestOptions); + }); + } + function getActiveAccount() { + if (!state.cachedAccount) { + return undefined; + } + return msalToPublic(clientId, state.cachedAccount); + } + async function getTokenByAuthorizationCode(scopes, redirectUri, authorizationCode, clientSecret, options = {}) { + state.logger.getToken.info(`Attempting to acquire token using authorization code`); + let msalApp; + if (clientSecret) { + // If a client secret is provided, we need to use a confidential client application + // See https://learn.microsoft.com/entra/identity-platform/v2-oauth2-auth-code-flow#request-an-access-token-with-a-client_secret + state.msalConfig.auth.clientSecret = clientSecret; + msalApp = await getConfidentialApp(options); + } + else { + msalApp = await getPublicApp(options); + } + return withSilentAuthentication(msalApp, scopes, options, () => { + return msalApp.acquireTokenByCode({ + scopes, + redirectUri, + code: authorizationCode, + authority: calculateRequestAuthority(options), + claims: options === null || options === void 0 ? void 0 : options.claims, + }); + }); + } + async function getTokenOnBehalfOf(scopes, userAssertionToken, clientCredentials, options = {}) { + var _a; + msalLogger.getToken.info(`Attempting to acquire token on behalf of another user`); + if (typeof clientCredentials === "string") { + // Client secret + msalLogger.getToken.info(`Using client secret for on behalf of flow`); + state.msalConfig.auth.clientSecret = clientCredentials; + } + else if (typeof clientCredentials === "function") { + // Client Assertion + msalLogger.getToken.info(`Using client assertion callback for on behalf of flow`); + state.msalConfig.auth.clientAssertion = clientCredentials; + } + else { + // Client certificate + msalLogger.getToken.info(`Using client certificate for on behalf of flow`); + state.msalConfig.auth.clientCertificate = clientCredentials; + } + const msalApp = await getConfidentialApp(options); + try { + const response = await msalApp.acquireTokenOnBehalfOf({ + scopes, + authority: calculateRequestAuthority(options), + claims: options.claims, + oboAssertion: userAssertionToken, + }); + ensureValidMsalToken(scopes, response, options); + msalLogger.getToken.info(formatSuccess(scopes)); + return { + token: response.accessToken, + expiresOnTimestamp: response.expiresOn.getTime(), + refreshAfterTimestamp: (_a = response.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(), + tokenType: response.tokenType, + }; + } + catch (err) { + throw handleMsalError(scopes, err, options); + } + } + async function getTokenByInteractiveRequest(scopes, options = {}) { + msalLogger.getToken.info(`Attempting to acquire token interactively`); + const app = await getPublicApp(options); + /** + * A helper function that supports brokered authentication through the MSAL's public application. + * + * When options.useDefaultBrokerAccount is true, the method will attempt to authenticate using the default broker account. + * If the default broker account is not available, the method will fall back to interactive authentication. + */ + async function getBrokeredToken(useDefaultBrokerAccount) { + var _a; + msalLogger.verbose("Authentication will resume through the broker"); + const interactiveRequest = createBaseInteractiveRequest(); + if (state.pluginConfiguration.broker.parentWindowHandle) { + interactiveRequest.windowHandle = Buffer.from(state.pluginConfiguration.broker.parentWindowHandle); + } + else { + // this is a bug, as the pluginConfiguration handler should validate this case. + msalLogger.warning("Parent window handle is not specified for the broker. This may cause unexpected behavior. Please provide the parentWindowHandle."); + } + if (state.pluginConfiguration.broker.enableMsaPassthrough) { + ((_a = interactiveRequest.tokenQueryParameters) !== null && _a !== void 0 ? _a : (interactiveRequest.tokenQueryParameters = {}))["msal_request_type"] = + "consumer_passthrough"; + } + if (useDefaultBrokerAccount) { + interactiveRequest.prompt = "none"; + msalLogger.verbose("Attempting broker authentication using the default broker account"); + } + else { + msalLogger.verbose("Attempting broker authentication without the default broker account"); + } + if (options.proofOfPossessionOptions) { + interactiveRequest.shrNonce = options.proofOfPossessionOptions.nonce; + interactiveRequest.authenticationScheme = "pop"; + interactiveRequest.resourceRequestMethod = + options.proofOfPossessionOptions.resourceRequestMethod; + interactiveRequest.resourceRequestUri = options.proofOfPossessionOptions.resourceRequestUrl; + } + try { + return await app.acquireTokenInteractive(interactiveRequest); + } + catch (e) { + msalLogger.verbose(`Failed to authenticate through the broker: ${e.message}`); + // If we tried to use the default broker account and failed, fall back to interactive authentication + if (useDefaultBrokerAccount) { + return getBrokeredToken(/* useDefaultBrokerAccount: */ false); + } + else { + throw e; + } + } + } + function createBaseInteractiveRequest() { + var _a, _b; + return { + openBrowser: async (url) => { + await interactiveBrowserMockable.open(url, { wait: true, newInstance: true }); + }, + scopes, + authority: calculateRequestAuthority(options), + claims: options === null || options === void 0 ? void 0 : options.claims, + loginHint: options === null || options === void 0 ? void 0 : options.loginHint, + errorTemplate: (_a = options === null || options === void 0 ? void 0 : options.browserCustomizationOptions) === null || _a === void 0 ? void 0 : _a.errorMessage, + successTemplate: (_b = options === null || options === void 0 ? void 0 : options.browserCustomizationOptions) === null || _b === void 0 ? void 0 : _b.successMessage, + }; + } + return withSilentAuthentication(app, scopes, options, async () => { + var _a; + const interactiveRequest = createBaseInteractiveRequest(); + if (state.pluginConfiguration.broker.isEnabled) { + return getBrokeredToken((_a = state.pluginConfiguration.broker.useDefaultBrokerAccount) !== null && _a !== void 0 ? _a : false); + } + if (options.proofOfPossessionOptions) { + interactiveRequest.shrNonce = options.proofOfPossessionOptions.nonce; + interactiveRequest.authenticationScheme = "pop"; + interactiveRequest.resourceRequestMethod = + options.proofOfPossessionOptions.resourceRequestMethod; + interactiveRequest.resourceRequestUri = options.proofOfPossessionOptions.resourceRequestUrl; + } + return app.acquireTokenInteractive(interactiveRequest); + }); + } + return { + getActiveAccount, + getTokenByClientSecret, + getTokenByClientAssertion, + getTokenByClientCertificate, + getTokenByDeviceCode, + getTokenByUsernamePassword, + getTokenByAuthorizationCode, + getTokenOnBehalfOf, + getTokenByInteractiveRequest, + }; +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$h = credentialLogger("ClientAssertionCredential"); +/** + * Authenticates a service principal with a JWT assertion. + */ +class ClientAssertionCredential { + /** + * Creates an instance of the ClientAssertionCredential with the details + * needed to authenticate against Microsoft Entra ID with a client + * assertion provided by the developer through the `getAssertion` function parameter. + * + * @param tenantId - The Microsoft Entra tenant (directory) ID. + * @param clientId - The client (application) ID of an App Registration in the tenant. + * @param getAssertion - A function that retrieves the assertion for the credential to use. + * @param options - Options for configuring the client which makes the authentication request. + */ + constructor(tenantId, clientId, getAssertion, options = {}) { + if (!tenantId) { + throw new CredentialUnavailableError("ClientAssertionCredential: tenantId is a required parameter."); + } + if (!clientId) { + throw new CredentialUnavailableError("ClientAssertionCredential: clientId is a required parameter."); + } + if (!getAssertion) { + throw new CredentialUnavailableError("ClientAssertionCredential: clientAssertion is a required parameter."); + } + this.tenantId = tenantId; + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + this.options = options; + this.getAssertion = getAssertion; + this.msalClient = createMsalClient(clientId, tenantId, Object.assign(Object.assign({}, options), { logger: logger$h, tokenCredentialOptions: this.options })); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async (newOptions) => { + newOptions.tenantId = processMultiTenantRequest(this.tenantId, newOptions, this.additionallyAllowedTenantIds, logger$h); + const arrayScopes = Array.isArray(scopes) ? scopes : [scopes]; + return this.msalClient.getTokenByClientAssertion(arrayScopes, this.getAssertion, newOptions); + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const credentialName$4 = "WorkloadIdentityCredential"; +/** + * Contains the list of all supported environment variable names so that an + * appropriate error message can be generated when no credentials can be + * configured. + * + * @internal + */ +const SupportedWorkloadEnvironmentVariables = [ + "AZURE_TENANT_ID", + "AZURE_CLIENT_ID", + "AZURE_FEDERATED_TOKEN_FILE", +]; +const logger$g = credentialLogger(credentialName$4); +/** + * Workload Identity authentication is a feature in Azure that allows applications running on virtual machines (VMs) + * to access other Azure resources without the need for a service principal or managed identity. With Workload Identity + * authentication, applications authenticate themselves using their own identity, rather than using a shared service + * principal or managed identity. Under the hood, Workload Identity authentication uses the concept of Service Account + * Credentials (SACs), which are automatically created by Azure and stored securely in the VM. By using Workload + * Identity authentication, you can avoid the need to manage and rotate service principals or managed identities for + * each application on each VM. Additionally, because SACs are created automatically and managed by Azure, you don't + * need to worry about storing and securing sensitive credentials themselves. + * The WorkloadIdentityCredential supports Microsoft Entra Workload ID authentication on Azure Kubernetes and acquires + * a token using the SACs available in the Azure Kubernetes environment. + * Refer to Microsoft Entra + * Workload ID for more information. + */ +class WorkloadIdentityCredential { + /** + * WorkloadIdentityCredential supports Microsoft Entra Workload ID on Kubernetes. + * + * @param options - The identity client options to use for authentication. + */ + constructor(options) { + this.azureFederatedTokenFileContent = undefined; + this.cacheDate = undefined; + // Logging environment variables for error details + const assignedEnv = processEnvVars(SupportedWorkloadEnvironmentVariables).assigned.join(", "); + logger$g.info(`Found the following environment variables: ${assignedEnv}`); + const workloadIdentityCredentialOptions = options !== null && options !== void 0 ? options : {}; + const tenantId = workloadIdentityCredentialOptions.tenantId || process.env.AZURE_TENANT_ID; + const clientId = workloadIdentityCredentialOptions.clientId || process.env.AZURE_CLIENT_ID; + this.federatedTokenFilePath = + workloadIdentityCredentialOptions.tokenFilePath || process.env.AZURE_FEDERATED_TOKEN_FILE; + if (tenantId) { + checkTenantId(logger$g, tenantId); + } + if (!clientId) { + throw new CredentialUnavailableError(`${credentialName$4}: is unavailable. clientId is a required parameter. In DefaultAzureCredential and ManagedIdentityCredential, this can be provided as an environment variable - "AZURE_CLIENT_ID". + See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/workloadidentitycredential/troubleshoot`); + } + if (!tenantId) { + throw new CredentialUnavailableError(`${credentialName$4}: is unavailable. tenantId is a required parameter. In DefaultAzureCredential and ManagedIdentityCredential, this can be provided as an environment variable - "AZURE_TENANT_ID". + See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/workloadidentitycredential/troubleshoot`); + } + if (!this.federatedTokenFilePath) { + throw new CredentialUnavailableError(`${credentialName$4}: is unavailable. federatedTokenFilePath is a required parameter. In DefaultAzureCredential and ManagedIdentityCredential, this can be provided as an environment variable - "AZURE_FEDERATED_TOKEN_FILE". + See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/workloadidentitycredential/troubleshoot`); + } + logger$g.info(`Invoking ClientAssertionCredential with tenant ID: ${tenantId}, clientId: ${workloadIdentityCredentialOptions.clientId} and federated token path: [REDACTED]`); + this.client = new ClientAssertionCredential(tenantId, clientId, this.readFileContents.bind(this), options); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options) { + if (!this.client) { + const errorMessage = `${credentialName$4}: is unavailable. tenantId, clientId, and federatedTokenFilePath are required parameters. + In DefaultAzureCredential and ManagedIdentityCredential, these can be provided as environment variables - + "AZURE_TENANT_ID", + "AZURE_CLIENT_ID", + "AZURE_FEDERATED_TOKEN_FILE". See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/workloadidentitycredential/troubleshoot`; + logger$g.info(errorMessage); + throw new CredentialUnavailableError(errorMessage); + } + logger$g.info("Invoking getToken() of Client Assertion Credential"); + return this.client.getToken(scopes, options); + } + async readFileContents() { + // Cached assertions expire after 5 minutes + if (this.cacheDate !== undefined && Date.now() - this.cacheDate >= 1000 * 60 * 5) { + this.azureFederatedTokenFileContent = undefined; + } + if (!this.federatedTokenFilePath) { + throw new CredentialUnavailableError(`${credentialName$4}: is unavailable. Invalid file path provided ${this.federatedTokenFilePath}.`); + } + if (!this.azureFederatedTokenFileContent) { + const file = await promises.readFile(this.federatedTokenFilePath, "utf8"); + const value = file.trim(); + if (!value) { + throw new CredentialUnavailableError(`${credentialName$4}: is unavailable. No content on the file ${this.federatedTokenFilePath}.`); + } + else { + this.azureFederatedTokenFileContent = value; + this.cacheDate = Date.now(); + } + } + return this.azureFederatedTokenFileContent; + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const msiName = "ManagedIdentityCredential - Token Exchange"; +const logger$f = credentialLogger(msiName); +/** + * Defines how to determine whether the token exchange MSI is available, and also how to retrieve a token from the token exchange MSI. + */ +const tokenExchangeMsi = { + name: "tokenExchangeMsi", + async isAvailable({ clientId }) { + const env = process.env; + const result = Boolean((clientId || env.AZURE_CLIENT_ID) && + env.AZURE_TENANT_ID && + process.env.AZURE_FEDERATED_TOKEN_FILE); + if (!result) { + logger$f.info(`${msiName}: Unavailable. The environment variables needed are: AZURE_CLIENT_ID (or the client ID sent through the parameters), AZURE_TENANT_ID and AZURE_FEDERATED_TOKEN_FILE`); + } + return result; + }, + async getToken(configuration, getTokenOptions = {}) { + const { scopes, clientId } = configuration; + const identityClientTokenCredentialOptions = {}; + const workloadIdentityCredential = new WorkloadIdentityCredential(Object.assign(Object.assign({ clientId, tenantId: process.env.AZURE_TENANT_ID, tokenFilePath: process.env.AZURE_FEDERATED_TOKEN_FILE }, identityClientTokenCredentialOptions), { disableInstanceDiscovery: true })); + return workloadIdentityCredential.getToken(scopes, getTokenOptions); + }, +}; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$e = credentialLogger("ManagedIdentityCredential(MSAL)"); +class MsalMsiProvider { + constructor(clientIdOrOptions, options = {}) { + var _a, _b; + this.msiRetryConfig = { + maxRetries: 5, + startDelayInMs: 800, + intervalIncrement: 2, + }; + let _options = {}; + if (typeof clientIdOrOptions === "string") { + this.clientId = clientIdOrOptions; + _options = options; + } + else { + this.clientId = clientIdOrOptions === null || clientIdOrOptions === void 0 ? void 0 : clientIdOrOptions.clientId; + _options = clientIdOrOptions !== null && clientIdOrOptions !== void 0 ? clientIdOrOptions : {}; + } + this.resourceId = _options === null || _options === void 0 ? void 0 : _options.resourceId; + this.objectId = _options === null || _options === void 0 ? void 0 : _options.objectId; + // For JavaScript users. + const providedIds = [this.clientId, this.resourceId, this.objectId].filter(Boolean); + if (providedIds.length > 1) { + throw new Error(`ManagedIdentityCredential: only one of 'clientId', 'resourceId', or 'objectId' can be provided. Received values: ${JSON.stringify({ clientId: this.clientId, resourceId: this.resourceId, objectId: this.objectId })}`); + } + // ManagedIdentity uses http for local requests + _options.allowInsecureConnection = true; + if (((_a = _options === null || _options === void 0 ? void 0 : _options.retryOptions) === null || _a === void 0 ? void 0 : _a.maxRetries) !== undefined) { + this.msiRetryConfig.maxRetries = _options.retryOptions.maxRetries; + } + this.identityClient = new IdentityClient(Object.assign(Object.assign({}, _options), { additionalPolicies: [{ policy: imdsRetryPolicy(this.msiRetryConfig), position: "perCall" }] })); + this.managedIdentityApp = new msalCommon.ManagedIdentityApplication({ + managedIdentityIdParams: { + userAssignedClientId: this.clientId, + userAssignedResourceId: this.resourceId, + userAssignedObjectId: this.objectId, + }, + system: { + // todo: proxyUrl? + disableInternalRetries: true, + networkClient: this.identityClient, + loggerOptions: { + logLevel: getMSALLogLevel(logger$m.getLogLevel()), + piiLoggingEnabled: (_b = options.loggingOptions) === null || _b === void 0 ? void 0 : _b.enableUnsafeSupportLogging, + loggerCallback: defaultLoggerCallback(logger$e), + }, + }, + }); + this.isAvailableIdentityClient = new IdentityClient(Object.assign(Object.assign({}, _options), { retryOptions: { + maxRetries: 0, + } })); + // CloudShell MSI will ignore any user-assigned identity passed as parameters. To avoid confusion, we prevent this from happening as early as possible. + if (this.managedIdentityApp.getManagedIdentitySource() === "CloudShell") { + if (this.clientId || this.resourceId || this.objectId) { + logger$e.warning(`CloudShell MSI detected with user-provided IDs - throwing. Received values: ${JSON.stringify({ + clientId: this.clientId, + resourceId: this.resourceId, + objectId: this.objectId, + })}.`); + throw new CredentialUnavailableError("ManagedIdentityCredential: Specifying a user-assigned managed identity is not supported for CloudShell at runtime. When using Managed Identity in CloudShell, omit the clientId, resourceId, and objectId parameters."); + } + } + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * If an unexpected error occurs, an {@link AuthenticationError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + logger$e.getToken.info("Using the MSAL provider for Managed Identity."); + const resource = mapScopesToResource(scopes); + if (!resource) { + throw new CredentialUnavailableError(`ManagedIdentityCredential: Multiple scopes are not supported. Scopes: ${JSON.stringify(scopes)}`); + } + return tracingClient.withSpan("ManagedIdentityCredential.getToken", options, async () => { + var _a; + try { + const isTokenExchangeMsi = await tokenExchangeMsi.isAvailable({ + scopes, + clientId: this.clientId, + getTokenOptions: options, + identityClient: this.identityClient, + resourceId: this.resourceId, + }); + // Most scenarios are handled by MSAL except for two: + // AKS pod identity - MSAL does not implement the token exchange flow. + // IMDS Endpoint probing - MSAL does not do any probing before trying to get a token. + // As a DefaultAzureCredential optimization we probe the IMDS endpoint with a short timeout and no retries before actually trying to get a token + // We will continue to implement these features in the Identity library. + const identitySource = this.managedIdentityApp.getManagedIdentitySource(); + const isImdsMsi = identitySource === "DefaultToImds" || identitySource === "Imds"; // Neither actually checks that IMDS endpoint is available, just that it's the source the MSAL _would_ try to use. + logger$e.getToken.info(`MSAL Identity source: ${identitySource}`); + if (isTokenExchangeMsi) { + // In the AKS scenario we will use the existing tokenExchangeMsi indefinitely. + logger$e.getToken.info("Using the token exchange managed identity."); + const result = await tokenExchangeMsi.getToken({ + scopes, + clientId: this.clientId, + identityClient: this.identityClient, + retryConfig: this.msiRetryConfig, + resourceId: this.resourceId, + }); + if (result === null) { + throw new CredentialUnavailableError("Attempted to use the token exchange managed identity, but received a null response."); + } + return result; + } + else if (isImdsMsi) { + // In the IMDS scenario we will probe the IMDS endpoint to ensure it's available before trying to get a token. + // If the IMDS endpoint is not available and this is the source that MSAL will use, we will fail-fast with an error that tells DAC to move to the next credential. + logger$e.getToken.info("Using the IMDS endpoint to probe for availability."); + const isAvailable = await imdsMsi.isAvailable({ + scopes, + clientId: this.clientId, + getTokenOptions: options, + identityClient: this.isAvailableIdentityClient, + resourceId: this.resourceId, + }); + if (!isAvailable) { + throw new CredentialUnavailableError(`Attempted to use the IMDS endpoint, but it is not available.`); + } + } + // If we got this far, it means: + // - This is not a tokenExchangeMsi, + // - We already probed for IMDS endpoint availability and failed-fast if it's unreachable. + // We can proceed normally by calling MSAL for a token. + logger$e.getToken.info("Calling into MSAL for managed identity token."); + const token = await this.managedIdentityApp.acquireToken({ + resource, + }); + this.ensureValidMsalToken(scopes, token, options); + logger$e.getToken.info(formatSuccess(scopes)); + return { + expiresOnTimestamp: token.expiresOn.getTime(), + token: token.accessToken, + refreshAfterTimestamp: (_a = token.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(), + tokenType: "Bearer", + }; + } + catch (err) { + logger$e.getToken.error(formatError(scopes, err)); + // AuthenticationRequiredError described as Error to enforce authentication after trying to retrieve a token silently. + // TODO: why would this _ever_ happen considering we're not trying the silent request in this flow? + if (err.name === "AuthenticationRequiredError") { + throw err; + } + if (isNetworkError(err)) { + throw new CredentialUnavailableError(`ManagedIdentityCredential: Network unreachable. Message: ${err.message}`, { cause: err }); + } + throw new CredentialUnavailableError(`ManagedIdentityCredential: Authentication failed. Message ${err.message}`, { cause: err }); + } + }); + } + /** + * Ensures the validity of the MSAL token + */ + ensureValidMsalToken(scopes, msalToken, getTokenOptions) { + const createError = (message) => { + logger$e.getToken.info(message); + return new AuthenticationRequiredError({ + scopes: Array.isArray(scopes) ? scopes : [scopes], + getTokenOptions, + message, + }); + }; + if (!msalToken) { + throw createError("No response."); + } + if (!msalToken.expiresOn) { + throw createError(`Response had no "expiresOn" property.`); + } + if (!msalToken.accessToken) { + throw createError(`Response had no "accessToken" property.`); + } + } +} +function isNetworkError(err) { + // MSAL error + if (err.errorCode === "network_error") { + return true; + } + // Probe errors + if (err.code === "ENETUNREACH" || err.code === "EHOSTUNREACH") { + return true; + } + // This is a special case for Docker Desktop which responds with a 403 with a message that contains "A socket operation was attempted to an unreachable network" or "A socket operation was attempted to an unreachable host" + // rather than just timing out, as expected. + if (err.statusCode === 403 || err.code === 403) { + if (err.message.includes("unreachable")) { + return true; + } + } + return false; +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Attempts authentication using a managed identity available at the deployment environment. + * This authentication type works in Azure VMs, App Service instances, Azure Functions applications, + * Azure Kubernetes Services, Azure Service Fabric instances and inside of the Azure Cloud Shell. + * + * More information about configuring managed identities can be found here: + * https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview + */ +class ManagedIdentityCredential { + /** + * @internal + * @hidden + */ + constructor(clientIdOrOptions, options) { + // https://github.com/Azure/azure-sdk-for-js/issues/30189 + // If needed, you may release a hotfix to quickly rollback to the legacy implementation by changing the following line to: + // this.implProvider = new LegacyMsiProvider(clientIdOrOptions, options); + // Once stabilized, you can remove the legacy implementation and inline the msalMsiProvider code here as a drop-in replacement. + this.implProvider = new MsalMsiProvider(clientIdOrOptions, options); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * If an unexpected error occurs, an {@link AuthenticationError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options) { + return this.implProvider.getToken(scopes, options); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Ensures the scopes value is an array. + * @internal + */ +function ensureScopes(scopes) { + return Array.isArray(scopes) ? scopes : [scopes]; +} +/** + * Throws if the received scope is not valid. + * @internal + */ +function ensureValidScopeForDevTimeCreds(scope, logger) { + if (!scope.match(/^[0-9a-zA-Z-_.:/]+$/)) { + const error = new Error("Invalid scope was specified by the user or calling client"); + logger.getToken.info(formatError(scope, error)); + throw error; + } +} +/** + * Returns the resource out of a scope. + * @internal + */ +function getScopeResource(scope) { + return scope.replace(/\/.default$/, ""); +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Mockable reference to the CLI credential cliCredentialFunctions + * @internal + */ +const cliCredentialInternals = { + /** + * @internal + */ + getSafeWorkingDir() { + if (process.platform === "win32") { + if (!process.env.SystemRoot) { + throw new Error("Azure CLI credential expects a 'SystemRoot' environment variable"); + } + return process.env.SystemRoot; + } + else { + return "/bin"; + } + }, + /** + * Gets the access token from Azure CLI + * @param resource - The resource to use when getting the token + * @internal + */ + async getAzureCliAccessToken(resource, tenantId, timeout) { + let tenantSection = []; + if (tenantId) { + tenantSection = ["--tenant", tenantId]; + } + return new Promise((resolve, reject) => { + try { + child_process.execFile("az", [ + "account", + "get-access-token", + "--output", + "json", + "--resource", + resource, + ...tenantSection, + ], { cwd: cliCredentialInternals.getSafeWorkingDir(), shell: true, timeout }, (error, stdout, stderr) => { + resolve({ stdout: stdout, stderr: stderr, error }); + }); + } + catch (err) { + reject(err); + } + }); + }, +}; +const logger$d = credentialLogger("AzureCliCredential"); +/** + * This credential will use the currently logged-in user login information + * via the Azure CLI ('az') commandline tool. + * To do so, it will read the user access token and expire time + * with Azure CLI command "az account get-access-token". + */ +class AzureCliCredential { + /** + * Creates an instance of the {@link AzureCliCredential}. + * + * To use this credential, ensure that you have already logged + * in via the 'az' tool using the command "az login" from the commandline. + * + * @param options - Options, to optionally allow multi-tenant requests. + */ + constructor(options) { + if (options === null || options === void 0 ? void 0 : options.tenantId) { + checkTenantId(logger$d, options === null || options === void 0 ? void 0 : options.tenantId); + this.tenantId = options === null || options === void 0 ? void 0 : options.tenantId; + } + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + this.timeout = options === null || options === void 0 ? void 0 : options.processTimeoutInMs; + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + const tenantId = processMultiTenantRequest(this.tenantId, options, this.additionallyAllowedTenantIds); + if (tenantId) { + checkTenantId(logger$d, tenantId); + } + const scope = typeof scopes === "string" ? scopes : scopes[0]; + logger$d.getToken.info(`Using the scope ${scope}`); + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async () => { + var _a, _b, _c, _d; + try { + ensureValidScopeForDevTimeCreds(scope, logger$d); + const resource = getScopeResource(scope); + const obj = await cliCredentialInternals.getAzureCliAccessToken(resource, tenantId, this.timeout); + const specificScope = (_a = obj.stderr) === null || _a === void 0 ? void 0 : _a.match("(.*)az login --scope(.*)"); + const isLoginError = ((_b = obj.stderr) === null || _b === void 0 ? void 0 : _b.match("(.*)az login(.*)")) && !specificScope; + const isNotInstallError = ((_c = obj.stderr) === null || _c === void 0 ? void 0 : _c.match("az:(.*)not found")) || ((_d = obj.stderr) === null || _d === void 0 ? void 0 : _d.startsWith("'az' is not recognized")); + if (isNotInstallError) { + const error = new CredentialUnavailableError("Azure CLI could not be found. Please visit https://aka.ms/azure-cli for installation instructions and then, once installed, authenticate to your Azure account using 'az login'."); + logger$d.getToken.info(formatError(scopes, error)); + throw error; + } + if (isLoginError) { + const error = new CredentialUnavailableError("Please run 'az login' from a command prompt to authenticate before using this credential."); + logger$d.getToken.info(formatError(scopes, error)); + throw error; + } + try { + const responseData = obj.stdout; + const response = this.parseRawResponse(responseData); + logger$d.getToken.info(formatSuccess(scopes)); + return response; + } + catch (e) { + if (obj.stderr) { + throw new CredentialUnavailableError(obj.stderr); + } + throw e; + } + } + catch (err) { + const error = err.name === "CredentialUnavailableError" + ? err + : new CredentialUnavailableError(err.message || "Unknown error while trying to retrieve the access token"); + logger$d.getToken.info(formatError(scopes, error)); + throw error; + } + }); + } + /** + * Parses the raw JSON response from the Azure CLI into a usable AccessToken object + * + * @param rawResponse - The raw JSON response from the Azure CLI + * @returns An access token with the expiry time parsed from the raw response + * + * The expiryTime of the credential's access token, in milliseconds, is calculated as follows: + * + * When available, expires_on (introduced in Azure CLI v2.54.0) will be preferred. Otherwise falls back to expiresOn. + */ + parseRawResponse(rawResponse) { + const response = JSON.parse(rawResponse); + const token = response.accessToken; + // if available, expires_on will be a number representing seconds since epoch. + // ensure it's a number or NaN + let expiresOnTimestamp = Number.parseInt(response.expires_on, 10) * 1000; + if (!isNaN(expiresOnTimestamp)) { + logger$d.getToken.info("expires_on is available and is valid, using it"); + return { + token, + expiresOnTimestamp, + tokenType: "Bearer", + }; + } + // fallback to the older expiresOn - an RFC3339 date string + expiresOnTimestamp = new Date(response.expiresOn).getTime(); + // ensure expiresOn is well-formatted + if (isNaN(expiresOnTimestamp)) { + throw new CredentialUnavailableError(`Unexpected response from Azure CLI when getting token. Expected "expiresOn" to be a RFC3339 date string. Got: "${response.expiresOn}"`); + } + return { + token, + expiresOnTimestamp, + tokenType: "Bearer", + }; + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Mockable reference to the Developer CLI credential cliCredentialFunctions + * @internal + */ +const developerCliCredentialInternals = { + /** + * @internal + */ + getSafeWorkingDir() { + if (process.platform === "win32") { + if (!process.env.SystemRoot) { + throw new Error("Azure Developer CLI credential expects a 'SystemRoot' environment variable"); + } + return process.env.SystemRoot; + } + else { + return "/bin"; + } + }, + /** + * Gets the access token from Azure Developer CLI + * @param scopes - The scopes to use when getting the token + * @internal + */ + async getAzdAccessToken(scopes, tenantId, timeout) { + let tenantSection = []; + if (tenantId) { + tenantSection = ["--tenant-id", tenantId]; + } + return new Promise((resolve, reject) => { + try { + child_process.execFile("azd", [ + "auth", + "token", + "--output", + "json", + ...scopes.reduce((previous, current) => previous.concat("--scope", current), []), + ...tenantSection, + ], { + cwd: developerCliCredentialInternals.getSafeWorkingDir(), + timeout, + }, (error, stdout, stderr) => { + resolve({ stdout, stderr, error }); + }); + } + catch (err) { + reject(err); + } + }); + }, +}; +const logger$c = credentialLogger("AzureDeveloperCliCredential"); +/** + * Azure Developer CLI is a command-line interface tool that allows developers to create, manage, and deploy + * resources in Azure. It's built on top of the Azure CLI and provides additional functionality specific + * to Azure developers. It allows users to authenticate as a user and/or a service principal against + * Microsoft Entra ID. The + * AzureDeveloperCliCredential authenticates in a development environment and acquires a token on behalf of + * the logged-in user or service principal in the Azure Developer CLI. It acts as the Azure Developer CLI logged in user or + * service principal and executes an Azure CLI command underneath to authenticate the application against + * Microsoft Entra ID. + * + *

Configure AzureDeveloperCliCredential

+ * + * To use this credential, the developer needs to authenticate locally in Azure Developer CLI using one of the + * commands below: + * + *
    + *
  1. Run "azd auth login" in Azure Developer CLI to authenticate interactively as a user.
  2. + *
  3. Run "azd auth login --client-id clientID --client-secret clientSecret + * --tenant-id tenantID" to authenticate as a service principal.
  4. + *
+ * + * You may need to repeat this process after a certain time period, depending on the refresh token validity in your + * organization. Generally, the refresh token validity period is a few weeks to a few months. + * AzureDeveloperCliCredential will prompt you to sign in again. + */ +class AzureDeveloperCliCredential { + /** + * Creates an instance of the {@link AzureDeveloperCliCredential}. + * + * To use this credential, ensure that you have already logged + * in via the 'azd' tool using the command "azd auth login" from the commandline. + * + * @param options - Options, to optionally allow multi-tenant requests. + */ + constructor(options) { + if (options === null || options === void 0 ? void 0 : options.tenantId) { + checkTenantId(logger$c, options === null || options === void 0 ? void 0 : options.tenantId); + this.tenantId = options === null || options === void 0 ? void 0 : options.tenantId; + } + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + this.timeout = options === null || options === void 0 ? void 0 : options.processTimeoutInMs; + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + const tenantId = processMultiTenantRequest(this.tenantId, options, this.additionallyAllowedTenantIds); + if (tenantId) { + checkTenantId(logger$c, tenantId); + } + let scopeList; + if (typeof scopes === "string") { + scopeList = [scopes]; + } + else { + scopeList = scopes; + } + logger$c.getToken.info(`Using the scopes ${scopes}`); + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async () => { + var _a, _b, _c, _d; + try { + scopeList.forEach((scope) => { + ensureValidScopeForDevTimeCreds(scope, logger$c); + }); + const obj = await developerCliCredentialInternals.getAzdAccessToken(scopeList, tenantId, this.timeout); + const isNotLoggedInError = ((_a = obj.stderr) === null || _a === void 0 ? void 0 : _a.match("not logged in, run `azd login` to login")) || + ((_b = obj.stderr) === null || _b === void 0 ? void 0 : _b.match("not logged in, run `azd auth login` to login")); + const isNotInstallError = ((_c = obj.stderr) === null || _c === void 0 ? void 0 : _c.match("azd:(.*)not found")) || + ((_d = obj.stderr) === null || _d === void 0 ? void 0 : _d.startsWith("'azd' is not recognized")); + if (isNotInstallError || (obj.error && obj.error.code === "ENOENT")) { + const error = new CredentialUnavailableError("Azure Developer CLI couldn't be found. To mitigate this issue, see the troubleshooting guidelines at https://aka.ms/azsdk/js/identity/azdevclicredential/troubleshoot."); + logger$c.getToken.info(formatError(scopes, error)); + throw error; + } + if (isNotLoggedInError) { + const error = new CredentialUnavailableError("Please run 'azd auth login' from a command prompt to authenticate before using this credential. For more information, see the troubleshooting guidelines at https://aka.ms/azsdk/js/identity/azdevclicredential/troubleshoot."); + logger$c.getToken.info(formatError(scopes, error)); + throw error; + } + try { + const resp = JSON.parse(obj.stdout); + logger$c.getToken.info(formatSuccess(scopes)); + return { + token: resp.token, + expiresOnTimestamp: new Date(resp.expiresOn).getTime(), + tokenType: "Bearer", + }; + } + catch (e) { + if (obj.stderr) { + throw new CredentialUnavailableError(obj.stderr); + } + throw e; + } + } + catch (err) { + const error = err.name === "CredentialUnavailableError" + ? err + : new CredentialUnavailableError(err.message || "Unknown error while trying to retrieve the access token"); + logger$c.getToken.info(formatError(scopes, error)); + throw error; + } + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Easy to mock childProcess utils. + * @internal + */ +const processUtils = { + /** + * Promisifying childProcess.execFile + * @internal + */ + execFile(file, params, options) { + return new Promise((resolve, reject) => { + child_process__namespace.execFile(file, params, options, (error, stdout, stderr) => { + if (Buffer.isBuffer(stdout)) { + stdout = stdout.toString("utf8"); + } + if (Buffer.isBuffer(stderr)) { + stderr = stderr.toString("utf8"); + } + if (stderr || error) { + reject(stderr ? new Error(stderr) : error); + } + else { + resolve(stdout); + } + }); + }); + }, +}; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$b = credentialLogger("AzurePowerShellCredential"); +const isWindows = process.platform === "win32"; +/** + * Returns a platform-appropriate command name by appending ".exe" on Windows. + * + * @internal + */ +function formatCommand(commandName) { + if (isWindows) { + return `${commandName}.exe`; + } + else { + return commandName; + } +} +/** + * Receives a list of commands to run, executes them, then returns the outputs. + * If anything fails, an error is thrown. + * @internal + */ +async function runCommands(commands, timeout) { + const results = []; + for (const command of commands) { + const [file, ...parameters] = command; + const result = (await processUtils.execFile(file, parameters, { + encoding: "utf8", + timeout, + })); + results.push(result); + } + return results; +} +/** + * Known PowerShell errors + * @internal + */ +const powerShellErrors = { + login: "Run Connect-AzAccount to login", + installed: "The specified module 'Az.Accounts' with version '2.2.0' was not loaded because no valid module file was found in any module directory", +}; +/** + * Messages to use when throwing in this credential. + * @internal + */ +const powerShellPublicErrorMessages = { + login: "Please run 'Connect-AzAccount' from PowerShell to authenticate before using this credential.", + installed: `The 'Az.Account' module >= 2.2.0 is not installed. Install the Azure Az PowerShell module with: "Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force".`, + troubleshoot: `To troubleshoot, visit https://aka.ms/azsdk/js/identity/powershellcredential/troubleshoot.`, +}; +// PowerShell Azure User not logged in error check. +const isLoginError = (err) => err.message.match(`(.*)${powerShellErrors.login}(.*)`); +// Az Module not Installed in Azure PowerShell check. +const isNotInstalledError = (err) => err.message.match(powerShellErrors.installed); +/** + * The PowerShell commands to be tried, in order. + * + * @internal + */ +const commandStack = [formatCommand("pwsh")]; +if (isWindows) { + commandStack.push(formatCommand("powershell")); +} +/** + * This credential will use the currently logged-in user information from the + * Azure PowerShell module. To do so, it will read the user access token and + * expire time with Azure PowerShell command `Get-AzAccessToken -ResourceUrl {ResourceScope}` + */ +class AzurePowerShellCredential { + /** + * Creates an instance of the {@link AzurePowerShellCredential}. + * + * To use this credential: + * - Install the Azure Az PowerShell module with: + * `Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force`. + * - You have already logged in to Azure PowerShell using the command + * `Connect-AzAccount` from the command line. + * + * @param options - Options, to optionally allow multi-tenant requests. + */ + constructor(options) { + if (options === null || options === void 0 ? void 0 : options.tenantId) { + checkTenantId(logger$b, options === null || options === void 0 ? void 0 : options.tenantId); + this.tenantId = options === null || options === void 0 ? void 0 : options.tenantId; + } + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + this.timeout = options === null || options === void 0 ? void 0 : options.processTimeoutInMs; + } + /** + * Gets the access token from Azure PowerShell + * @param resource - The resource to use when getting the token + */ + async getAzurePowerShellAccessToken(resource, tenantId, timeout) { + // Clone the stack to avoid mutating it while iterating + for (const powerShellCommand of [...commandStack]) { + try { + await runCommands([[powerShellCommand, "/?"]], timeout); + } + catch (e) { + // Remove this credential from the original stack so that we don't try it again. + commandStack.shift(); + continue; + } + const results = await runCommands([ + [ + powerShellCommand, + "-NoProfile", + "-NonInteractive", + "-Command", + ` + $tenantId = "${tenantId !== null && tenantId !== void 0 ? tenantId : ""}" + $m = Import-Module Az.Accounts -MinimumVersion 2.2.0 -PassThru + $useSecureString = $m.Version -ge [version]'2.17.0' + + $params = @{ + ResourceUrl = "${resource}" + } + + if ($tenantId.Length -gt 0) { + $params["TenantId"] = $tenantId + } + + if ($useSecureString) { + $params["AsSecureString"] = $true + } + + $token = Get-AzAccessToken @params + + $result = New-Object -TypeName PSObject + $result | Add-Member -MemberType NoteProperty -Name ExpiresOn -Value $token.ExpiresOn + if ($useSecureString) { + $result | Add-Member -MemberType NoteProperty -Name Token -Value (ConvertFrom-SecureString -AsPlainText $token.Token) + } else { + $result | Add-Member -MemberType NoteProperty -Name Token -Value $token.Token + } + + Write-Output (ConvertTo-Json $result) + `, + ], + ]); + const result = results[0]; + return parseJsonToken(result); + } + throw new Error(`Unable to execute PowerShell. Ensure that it is installed in your system`); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If the authentication cannot be performed through PowerShell, a {@link CredentialUnavailableError} will be thrown. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async () => { + const tenantId = processMultiTenantRequest(this.tenantId, options, this.additionallyAllowedTenantIds); + const scope = typeof scopes === "string" ? scopes : scopes[0]; + if (tenantId) { + checkTenantId(logger$b, tenantId); + } + try { + ensureValidScopeForDevTimeCreds(scope, logger$b); + logger$b.getToken.info(`Using the scope ${scope}`); + const resource = getScopeResource(scope); + const response = await this.getAzurePowerShellAccessToken(resource, tenantId, this.timeout); + logger$b.getToken.info(formatSuccess(scopes)); + return { + token: response.Token, + expiresOnTimestamp: new Date(response.ExpiresOn).getTime(), + tokenType: "Bearer", + }; + } + catch (err) { + if (isNotInstalledError(err)) { + const error = new CredentialUnavailableError(powerShellPublicErrorMessages.installed); + logger$b.getToken.info(formatError(scope, error)); + throw error; + } + else if (isLoginError(err)) { + const error = new CredentialUnavailableError(powerShellPublicErrorMessages.login); + logger$b.getToken.info(formatError(scope, error)); + throw error; + } + const error = new CredentialUnavailableError(`${err}. ${powerShellPublicErrorMessages.troubleshoot}`); + logger$b.getToken.info(formatError(scope, error)); + throw error; + } + }); + } +} +/** + * + * @internal + */ +async function parseJsonToken(result) { + const jsonRegex = /{[^{}]*}/g; + const matches = result.match(jsonRegex); + let resultWithoutToken = result; + if (matches) { + try { + for (const item of matches) { + try { + const jsonContent = JSON.parse(item); + if (jsonContent === null || jsonContent === void 0 ? void 0 : jsonContent.Token) { + resultWithoutToken = resultWithoutToken.replace(item, ""); + if (resultWithoutToken) { + logger$b.getToken.warning(resultWithoutToken); + } + return jsonContent; + } + } + catch (e) { + continue; + } + } + } + catch (e) { + throw new Error(`Unable to parse the output of PowerShell. Received output: ${result}`); + } + } + throw new Error(`No access token found in the output. Received output: ${result}`); +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * @internal + */ +const logger$a = credentialLogger("ChainedTokenCredential"); +/** + * Enables multiple `TokenCredential` implementations to be tried in order + * until one of the getToken methods returns an access token. + */ +class ChainedTokenCredential { + /** + * Creates an instance of ChainedTokenCredential using the given credentials. + * + * @param sources - `TokenCredential` implementations to be tried in order. + * + * Example usage: + * ```ts snippet:chained_token_credential_example + * import { ClientSecretCredential, ChainedTokenCredential } from "@azure/identity"; + * + * const tenantId = ""; + * const clientId = ""; + * const clientSecret = ""; + * const anotherClientId = ""; + * const anotherSecret = ""; + * const firstCredential = new ClientSecretCredential(tenantId, clientId, clientSecret); + * const secondCredential = new ClientSecretCredential(tenantId, anotherClientId, anotherSecret); + * const credentialChain = new ChainedTokenCredential(firstCredential, secondCredential); + * ``` + */ + constructor(...sources) { + this._sources = []; + this._sources = sources; + } + /** + * Returns the first access token returned by one of the chained + * `TokenCredential` implementations. Throws an {@link AggregateAuthenticationError} + * when one or more credentials throws an {@link AuthenticationError} and + * no credentials have returned an access token. + * + * This method is called automatically by Azure SDK client libraries. You may call this method + * directly, but you must also handle token caching and token refreshing. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * `TokenCredential` implementation might make. + */ + async getToken(scopes, options = {}) { + const { token } = await this.getTokenInternal(scopes, options); + return token; + } + async getTokenInternal(scopes, options = {}) { + let token = null; + let successfulCredential; + const errors = []; + return tracingClient.withSpan("ChainedTokenCredential.getToken", options, async (updatedOptions) => { + for (let i = 0; i < this._sources.length && token === null; i++) { + try { + token = await this._sources[i].getToken(scopes, updatedOptions); + successfulCredential = this._sources[i]; + } + catch (err) { + if (err.name === "CredentialUnavailableError" || + err.name === "AuthenticationRequiredError") { + errors.push(err); + } + else { + logger$a.getToken.info(formatError(scopes, err)); + throw err; + } + } + } + if (!token && errors.length > 0) { + const err = new AggregateAuthenticationError(errors, "ChainedTokenCredential authentication failed."); + logger$a.getToken.info(formatError(scopes, err)); + throw err; + } + logger$a.getToken.info(`Result for ${successfulCredential.constructor.name}: ${formatSuccess(scopes)}`); + if (token === null) { + throw new CredentialUnavailableError("Failed to retrieve a valid token"); + } + return { token, successfulCredential }; + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const credentialName$3 = "ClientCertificateCredential"; +const logger$9 = credentialLogger(credentialName$3); +/** + * Enables authentication to Microsoft Entra ID using a PEM-encoded + * certificate that is assigned to an App Registration. More information + * on how to configure certificate authentication can be found here: + * + * https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-certificate-credentials#register-your-certificate-with-azure-ad + * + */ +class ClientCertificateCredential { + constructor(tenantId, clientId, certificatePathOrConfiguration, options = {}) { + if (!tenantId || !clientId) { + throw new Error(`${credentialName$3}: tenantId and clientId are required parameters.`); + } + this.tenantId = tenantId; + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + this.sendCertificateChain = options.sendCertificateChain; + this.certificateConfiguration = Object.assign({}, (typeof certificatePathOrConfiguration === "string" + ? { + certificatePath: certificatePathOrConfiguration, + } + : certificatePathOrConfiguration)); + const certificate = this.certificateConfiguration.certificate; + const certificatePath = this.certificateConfiguration.certificatePath; + if (!this.certificateConfiguration || !(certificate || certificatePath)) { + throw new Error(`${credentialName$3}: Provide either a PEM certificate in string form, or the path to that certificate in the filesystem. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot.`); + } + if (certificate && certificatePath) { + throw new Error(`${credentialName$3}: To avoid unexpected behaviors, providing both the contents of a PEM certificate and the path to a PEM certificate is forbidden. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot.`); + } + this.msalClient = createMsalClient(clientId, tenantId, Object.assign(Object.assign({}, options), { logger: logger$9, tokenCredentialOptions: options })); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${credentialName$3}.getToken`, options, async (newOptions) => { + newOptions.tenantId = processMultiTenantRequest(this.tenantId, newOptions, this.additionallyAllowedTenantIds, logger$9); + const arrayScopes = Array.isArray(scopes) ? scopes : [scopes]; + const certificate = await this.buildClientCertificate(); + return this.msalClient.getTokenByClientCertificate(arrayScopes, certificate, newOptions); + }); + } + async buildClientCertificate() { + var _a; + const parts = await parseCertificate(this.certificateConfiguration, (_a = this.sendCertificateChain) !== null && _a !== void 0 ? _a : false); + let privateKey; + if (this.certificateConfiguration.certificatePassword !== undefined) { + privateKey = crypto.createPrivateKey({ + key: parts.certificateContents, + passphrase: this.certificateConfiguration.certificatePassword, + format: "pem", + }) + .export({ + format: "pem", + type: "pkcs8", + }) + .toString(); + } + else { + privateKey = parts.certificateContents; + } + return { + thumbprint: parts.thumbprint, + privateKey, + x5c: parts.x5c, + }; + } +} +/** + * Parses a certificate into its relevant parts + * + * @param certificateConfiguration - The certificate contents or path to the certificate + * @param sendCertificateChain - true if the entire certificate chain should be sent for SNI, false otherwise + * @returns The parsed certificate parts and the certificate contents + */ +async function parseCertificate(certificateConfiguration, sendCertificateChain) { + const certificate = certificateConfiguration.certificate; + const certificatePath = certificateConfiguration.certificatePath; + const certificateContents = certificate || (await promises.readFile(certificatePath, "utf8")); + const x5c = sendCertificateChain ? certificateContents : undefined; + const certificatePattern = /(-+BEGIN CERTIFICATE-+)(\n\r?|\r\n?)([A-Za-z0-9+/\n\r]+=*)(\n\r?|\r\n?)(-+END CERTIFICATE-+)/g; + const publicKeys = []; + // Match all possible certificates, in the order they are in the file. These will form the chain that is used for x5c + let match; + do { + match = certificatePattern.exec(certificateContents); + if (match) { + publicKeys.push(match[3]); + } + } while (match); + if (publicKeys.length === 0) { + throw new Error("The file at the specified path does not contain a PEM-encoded certificate."); + } + const thumbprint = crypto.createHash("sha1") + .update(Buffer.from(publicKeys[0], "base64")) + .digest("hex") + .toUpperCase(); + return { + certificateContents, + thumbprint, + x5c, + }; +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$8 = credentialLogger("ClientSecretCredential"); +/** + * Enables authentication to Microsoft Entra ID using a client secret + * that was generated for an App Registration. More information on how + * to configure a client secret can be found here: + * + * https://learn.microsoft.com/entra/identity-platform/quickstart-configure-app-access-web-apis#add-credentials-to-your-web-application + * + */ +class ClientSecretCredential { + /** + * Creates an instance of the ClientSecretCredential with the details + * needed to authenticate against Microsoft Entra ID with a client + * secret. + * + * @param tenantId - The Microsoft Entra tenant (directory) ID. + * @param clientId - The client (application) ID of an App Registration in the tenant. + * @param clientSecret - A client secret that was generated for the App Registration. + * @param options - Options for configuring the client which makes the authentication request. + */ + constructor(tenantId, clientId, clientSecret, options = {}) { + if (!tenantId) { + throw new CredentialUnavailableError("ClientSecretCredential: tenantId is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot."); + } + if (!clientId) { + throw new CredentialUnavailableError("ClientSecretCredential: clientId is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot."); + } + if (!clientSecret) { + throw new CredentialUnavailableError("ClientSecretCredential: clientSecret is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot."); + } + this.clientSecret = clientSecret; + this.tenantId = tenantId; + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + this.msalClient = createMsalClient(clientId, tenantId, Object.assign(Object.assign({}, options), { logger: logger$8, tokenCredentialOptions: options })); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async (newOptions) => { + newOptions.tenantId = processMultiTenantRequest(this.tenantId, newOptions, this.additionallyAllowedTenantIds, logger$8); + const arrayScopes = ensureScopes(scopes); + return this.msalClient.getTokenByClientSecret(arrayScopes, this.clientSecret, newOptions); + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$7 = credentialLogger("UsernamePasswordCredential"); +/** + * Enables authentication to Microsoft Entra ID with a user's + * username and password. This credential requires a high degree of + * trust so you should only use it when other, more secure credential + * types can't be used. + */ +class UsernamePasswordCredential { + /** + * Creates an instance of the UsernamePasswordCredential with the details + * needed to authenticate against Microsoft Entra ID with a username + * and password. + * + * @param tenantId - The Microsoft Entra tenant (directory). + * @param clientId - The client (application) ID of an App Registration in the tenant. + * @param username - The user account's e-mail address (user name). + * @param password - The user account's account password + * @param options - Options for configuring the client which makes the authentication request. + */ + constructor(tenantId, clientId, username, password, options = {}) { + if (!tenantId) { + throw new CredentialUnavailableError("UsernamePasswordCredential: tenantId is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/usernamepasswordcredential/troubleshoot."); + } + if (!clientId) { + throw new CredentialUnavailableError("UsernamePasswordCredential: clientId is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/usernamepasswordcredential/troubleshoot."); + } + if (!username) { + throw new CredentialUnavailableError("UsernamePasswordCredential: username is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/usernamepasswordcredential/troubleshoot."); + } + if (!password) { + throw new CredentialUnavailableError("UsernamePasswordCredential: password is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/usernamepasswordcredential/troubleshoot."); + } + this.tenantId = tenantId; + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + this.username = username; + this.password = password; + this.msalClient = createMsalClient(clientId, this.tenantId, Object.assign(Object.assign({}, options), { tokenCredentialOptions: options !== null && options !== void 0 ? options : {} })); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * If the user provided the option `disableAutomaticAuthentication`, + * once the token can't be retrieved silently, + * this method won't attempt to request user interaction to retrieve the token. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async (newOptions) => { + newOptions.tenantId = processMultiTenantRequest(this.tenantId, newOptions, this.additionallyAllowedTenantIds, logger$7); + const arrayScopes = ensureScopes(scopes); + return this.msalClient.getTokenByUsernamePassword(arrayScopes, this.username, this.password, newOptions); + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Contains the list of all supported environment variable names so that an + * appropriate error message can be generated when no credentials can be + * configured. + * + * @internal + */ +const AllSupportedEnvironmentVariables = [ + "AZURE_TENANT_ID", + "AZURE_CLIENT_ID", + "AZURE_CLIENT_SECRET", + "AZURE_CLIENT_CERTIFICATE_PATH", + "AZURE_CLIENT_CERTIFICATE_PASSWORD", + "AZURE_USERNAME", + "AZURE_PASSWORD", + "AZURE_ADDITIONALLY_ALLOWED_TENANTS", + "AZURE_CLIENT_SEND_CERTIFICATE_CHAIN", +]; +function getAdditionallyAllowedTenants() { + var _a; + const additionallyAllowedValues = (_a = process.env.AZURE_ADDITIONALLY_ALLOWED_TENANTS) !== null && _a !== void 0 ? _a : ""; + return additionallyAllowedValues.split(";"); +} +const credentialName$2 = "EnvironmentCredential"; +const logger$6 = credentialLogger(credentialName$2); +function getSendCertificateChain() { + var _a; + const sendCertificateChain = ((_a = process.env.AZURE_CLIENT_SEND_CERTIFICATE_CHAIN) !== null && _a !== void 0 ? _a : "").toLowerCase(); + const result = sendCertificateChain === "true" || sendCertificateChain === "1"; + logger$6.verbose(`AZURE_CLIENT_SEND_CERTIFICATE_CHAIN: ${process.env.AZURE_CLIENT_SEND_CERTIFICATE_CHAIN}; sendCertificateChain: ${result}`); + return result; +} +/** + * Enables authentication to Microsoft Entra ID using a client secret or certificate, or as a user + * with a username and password. + */ +class EnvironmentCredential { + /** + * Creates an instance of the EnvironmentCredential class and decides what credential to use depending on the available environment variables. + * + * Required environment variables: + * - `AZURE_TENANT_ID`: The Microsoft Entra tenant (directory) ID. + * - `AZURE_CLIENT_ID`: The client (application) ID of an App Registration in the tenant. + * + * If setting the AZURE_TENANT_ID, then you can also set the additionally allowed tenants + * - `AZURE_ADDITIONALLY_ALLOWED_TENANTS`: For multi-tenant applications, specifies additional tenants for which the credential may acquire tokens with a single semicolon delimited string. Use * to allow all tenants. + * + * Environment variables used for client credential authentication: + * - `AZURE_CLIENT_SECRET`: A client secret that was generated for the App Registration. + * - `AZURE_CLIENT_CERTIFICATE_PATH`: The path to a PEM certificate to use during the authentication, instead of the client secret. + * - `AZURE_CLIENT_CERTIFICATE_PASSWORD`: (optional) password for the certificate file. + * - `AZURE_CLIENT_SEND_CERTIFICATE_CHAIN`: (optional) indicates that the certificate chain should be set in x5c header to support subject name / issuer based authentication. + * + * Alternatively, users can provide environment variables for username and password authentication: + * - `AZURE_USERNAME`: Username to authenticate with. + * - `AZURE_PASSWORD`: Password to authenticate with. + * + * If the environment variables required to perform the authentication are missing, a {@link CredentialUnavailableError} will be thrown. + * If the authentication fails, or if there's an unknown error, an {@link AuthenticationError} will be thrown. + * + * @param options - Options for configuring the client which makes the authentication request. + */ + constructor(options) { + // Keep track of any missing environment variables for error details + this._credential = undefined; + const assigned = processEnvVars(AllSupportedEnvironmentVariables).assigned.join(", "); + logger$6.info(`Found the following environment variables: ${assigned}`); + const tenantId = process.env.AZURE_TENANT_ID, clientId = process.env.AZURE_CLIENT_ID, clientSecret = process.env.AZURE_CLIENT_SECRET; + const additionallyAllowedTenantIds = getAdditionallyAllowedTenants(); + const sendCertificateChain = getSendCertificateChain(); + const newOptions = Object.assign(Object.assign({}, options), { additionallyAllowedTenantIds, sendCertificateChain }); + if (tenantId) { + checkTenantId(logger$6, tenantId); + } + if (tenantId && clientId && clientSecret) { + logger$6.info(`Invoking ClientSecretCredential with tenant ID: ${tenantId}, clientId: ${clientId} and clientSecret: [REDACTED]`); + this._credential = new ClientSecretCredential(tenantId, clientId, clientSecret, newOptions); + return; + } + const certificatePath = process.env.AZURE_CLIENT_CERTIFICATE_PATH; + const certificatePassword = process.env.AZURE_CLIENT_CERTIFICATE_PASSWORD; + if (tenantId && clientId && certificatePath) { + logger$6.info(`Invoking ClientCertificateCredential with tenant ID: ${tenantId}, clientId: ${clientId} and certificatePath: ${certificatePath}`); + this._credential = new ClientCertificateCredential(tenantId, clientId, { certificatePath, certificatePassword }, newOptions); + return; + } + const username = process.env.AZURE_USERNAME; + const password = process.env.AZURE_PASSWORD; + if (tenantId && clientId && username && password) { + logger$6.info(`Invoking UsernamePasswordCredential with tenant ID: ${tenantId}, clientId: ${clientId} and username: ${username}`); + this._credential = new UsernamePasswordCredential(tenantId, clientId, username, password, newOptions); + } + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - Optional parameters. See {@link GetTokenOptions}. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${credentialName$2}.getToken`, options, async (newOptions) => { + if (this._credential) { + try { + const result = await this._credential.getToken(scopes, newOptions); + logger$6.getToken.info(formatSuccess(scopes)); + return result; + } + catch (err) { + const authenticationError = new AuthenticationError(400, { + error: `${credentialName$2} authentication failed. To troubleshoot, visit https://aka.ms/azsdk/js/identity/environmentcredential/troubleshoot.`, + error_description: err.message.toString().split("More details:").join(""), + }); + logger$6.getToken.info(formatError(scopes, authenticationError)); + throw authenticationError; + } + } + throw new CredentialUnavailableError(`${credentialName$2} is unavailable. No underlying credential could be used. To troubleshoot, visit https://aka.ms/azsdk/js/identity/environmentcredential/troubleshoot.`); + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$5 = credentialLogger("DefaultAzureCredential"); +/** + * Creates a {@link ManagedIdentityCredential} from the provided options. + * @param options - Options to configure the credential. + * + * @internal + */ +function createDefaultManagedIdentityCredential(options = {}) { + var _a, _b, _c, _d; + (_a = options.retryOptions) !== null && _a !== void 0 ? _a : (options.retryOptions = { + maxRetries: 5, + retryDelayInMs: 800, + }); + const managedIdentityClientId = (_b = options === null || options === void 0 ? void 0 : options.managedIdentityClientId) !== null && _b !== void 0 ? _b : process.env.AZURE_CLIENT_ID; + const workloadIdentityClientId = (_c = options === null || options === void 0 ? void 0 : options.workloadIdentityClientId) !== null && _c !== void 0 ? _c : managedIdentityClientId; + const managedResourceId = options === null || options === void 0 ? void 0 : options.managedIdentityResourceId; + const workloadFile = process.env.AZURE_FEDERATED_TOKEN_FILE; + const tenantId = (_d = options === null || options === void 0 ? void 0 : options.tenantId) !== null && _d !== void 0 ? _d : process.env.AZURE_TENANT_ID; + if (managedResourceId) { + const managedIdentityResourceIdOptions = Object.assign(Object.assign({}, options), { resourceId: managedResourceId }); + return new ManagedIdentityCredential(managedIdentityResourceIdOptions); + } + if (workloadFile && workloadIdentityClientId) { + const workloadIdentityCredentialOptions = Object.assign(Object.assign({}, options), { tenantId: tenantId }); + return new ManagedIdentityCredential(workloadIdentityClientId, workloadIdentityCredentialOptions); + } + if (managedIdentityClientId) { + const managedIdentityClientOptions = Object.assign(Object.assign({}, options), { clientId: managedIdentityClientId }); + return new ManagedIdentityCredential(managedIdentityClientOptions); + } + // We may be able to return a UnavailableCredential here, but that may be a breaking change + return new ManagedIdentityCredential(options); +} +/** + * Creates a {@link WorkloadIdentityCredential} from the provided options. + * @param options - Options to configure the credential. + * + * @internal + */ +function createDefaultWorkloadIdentityCredential(options) { + var _a, _b, _c; + const managedIdentityClientId = (_a = options === null || options === void 0 ? void 0 : options.managedIdentityClientId) !== null && _a !== void 0 ? _a : process.env.AZURE_CLIENT_ID; + const workloadIdentityClientId = (_b = options === null || options === void 0 ? void 0 : options.workloadIdentityClientId) !== null && _b !== void 0 ? _b : managedIdentityClientId; + const workloadFile = process.env.AZURE_FEDERATED_TOKEN_FILE; + const tenantId = (_c = options === null || options === void 0 ? void 0 : options.tenantId) !== null && _c !== void 0 ? _c : process.env.AZURE_TENANT_ID; + if (workloadFile && workloadIdentityClientId) { + const workloadIdentityCredentialOptions = Object.assign(Object.assign({}, options), { tenantId, clientId: workloadIdentityClientId, tokenFilePath: workloadFile }); + return new WorkloadIdentityCredential(workloadIdentityCredentialOptions); + } + if (tenantId) { + const workloadIdentityClientTenantOptions = Object.assign(Object.assign({}, options), { tenantId }); + return new WorkloadIdentityCredential(workloadIdentityClientTenantOptions); + } + // We may be able to return a UnavailableCredential here, but that may be a breaking change + return new WorkloadIdentityCredential(options); +} +/** + * Creates a {@link AzureDeveloperCliCredential} from the provided options. + * @param options - Options to configure the credential. + * + * @internal + */ +function createDefaultAzureDeveloperCliCredential(options = {}) { + const processTimeoutInMs = options.processTimeoutInMs; + return new AzureDeveloperCliCredential(Object.assign({ processTimeoutInMs }, options)); +} +/** + * Creates a {@link AzureCliCredential} from the provided options. + * @param options - Options to configure the credential. + * + * @internal + */ +function createDefaultAzureCliCredential(options = {}) { + const processTimeoutInMs = options.processTimeoutInMs; + return new AzureCliCredential(Object.assign({ processTimeoutInMs }, options)); +} +/** + * Creates a {@link AzurePowerShellCredential} from the provided options. + * @param options - Options to configure the credential. + * + * @internal + */ +function createDefaultAzurePowershellCredential(options = {}) { + const processTimeoutInMs = options.processTimeoutInMs; + return new AzurePowerShellCredential(Object.assign({ processTimeoutInMs }, options)); +} +/** + * Creates an {@link EnvironmentCredential} from the provided options. + * @param options - Options to configure the credential. + * + * @internal + */ +function createEnvironmentCredential(options = {}) { + return new EnvironmentCredential(options); +} +/** + * A no-op credential that logs the reason it was skipped if getToken is called. + * @internal + */ +class UnavailableDefaultCredential { + constructor(credentialName, message) { + this.credentialName = credentialName; + this.credentialUnavailableErrorMessage = message; + } + getToken() { + logger$5.getToken.info(`Skipping ${this.credentialName}, reason: ${this.credentialUnavailableErrorMessage}`); + return Promise.resolve(null); + } +} +/** + * Provides a default {@link ChainedTokenCredential} configuration that should + * work for most applications that use the Azure SDK. + */ +class DefaultAzureCredential extends ChainedTokenCredential { + constructor(options) { + const credentialFunctions = [ + createEnvironmentCredential, + createDefaultWorkloadIdentityCredential, + createDefaultManagedIdentityCredential, + createDefaultAzureCliCredential, + createDefaultAzurePowershellCredential, + createDefaultAzureDeveloperCliCredential, + ]; + // DefaultCredential constructors should not throw, instead throwing on getToken() which is handled by ChainedTokenCredential. + // When adding new credentials to the default chain, consider: + // 1. Making the constructor parameters required and explicit + // 2. Validating any required parameters in the factory function + // 3. Returning a UnavailableDefaultCredential from the factory function if a credential is unavailable for any reason + const credentials = credentialFunctions.map((createCredentialFn) => { + try { + return createCredentialFn(options); + } + catch (err) { + logger$5.warning(`Skipped ${createCredentialFn.name} because of an error creating the credential: ${err}`); + return new UnavailableDefaultCredential(createCredentialFn.name, err.message); + } + }); + super(...credentials); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$4 = credentialLogger("InteractiveBrowserCredential"); +/** + * Enables authentication to Microsoft Entra ID inside of the web browser + * using the interactive login flow. + */ +class InteractiveBrowserCredential { + /** + * Creates an instance of InteractiveBrowserCredential with the details needed. + * + * This credential uses the [Authorization Code Flow](https://learn.microsoft.com/entra/identity-platform/v2-oauth2-auth-code-flow). + * On Node.js, it will open a browser window while it listens for a redirect response from the authentication service. + * On browsers, it authenticates via popups. The `loginStyle` optional parameter can be set to `redirect` to authenticate by redirecting the user to an Azure secure login page, which then will redirect the user back to the web application where the authentication started. + * + * For Node.js, if a `clientId` is provided, the Microsoft Entra application will need to be configured to have a "Mobile and desktop applications" redirect endpoint. + * Follow our guide on [setting up Redirect URIs for Desktop apps that calls to web APIs](https://learn.microsoft.com/entra/identity-platform/scenario-desktop-app-registration#redirect-uris). + * + * @param options - Options for configuring the client which makes the authentication requests. + */ + constructor(options) { + var _a, _b, _c, _d, _e; + this.tenantId = resolveTenantId(logger$4, options.tenantId, options.clientId); + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + const msalClientOptions = Object.assign(Object.assign({}, options), { tokenCredentialOptions: options, logger: logger$4 }); + const ibcNodeOptions = options; + this.browserCustomizationOptions = ibcNodeOptions.browserCustomizationOptions; + this.loginHint = ibcNodeOptions.loginHint; + if ((_a = ibcNodeOptions === null || ibcNodeOptions === void 0 ? void 0 : ibcNodeOptions.brokerOptions) === null || _a === void 0 ? void 0 : _a.enabled) { + if (!((_b = ibcNodeOptions === null || ibcNodeOptions === void 0 ? void 0 : ibcNodeOptions.brokerOptions) === null || _b === void 0 ? void 0 : _b.parentWindowHandle)) { + throw new Error("In order to do WAM authentication, `parentWindowHandle` under `brokerOptions` is a required parameter"); + } + else { + msalClientOptions.brokerOptions = { + enabled: true, + parentWindowHandle: ibcNodeOptions.brokerOptions.parentWindowHandle, + legacyEnableMsaPassthrough: (_c = ibcNodeOptions.brokerOptions) === null || _c === void 0 ? void 0 : _c.legacyEnableMsaPassthrough, + useDefaultBrokerAccount: (_d = ibcNodeOptions.brokerOptions) === null || _d === void 0 ? void 0 : _d.useDefaultBrokerAccount, + }; + } + } + this.msalClient = createMsalClient((_e = options.clientId) !== null && _e !== void 0 ? _e : DeveloperSignOnClientId, this.tenantId, msalClientOptions); + this.disableAutomaticAuthentication = options === null || options === void 0 ? void 0 : options.disableAutomaticAuthentication; + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * If the user provided the option `disableAutomaticAuthentication`, + * once the token can't be retrieved silently, + * this method won't attempt to request user interaction to retrieve the token. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async (newOptions) => { + newOptions.tenantId = processMultiTenantRequest(this.tenantId, newOptions, this.additionallyAllowedTenantIds, logger$4); + const arrayScopes = ensureScopes(scopes); + return this.msalClient.getTokenByInteractiveRequest(arrayScopes, Object.assign(Object.assign({}, newOptions), { disableAutomaticAuthentication: this.disableAutomaticAuthentication, browserCustomizationOptions: this.browserCustomizationOptions, loginHint: this.loginHint })); + }); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * If the token can't be retrieved silently, this method will always generate a challenge for the user. + * + * On Node.js, this credential has [Proof Key for Code Exchange (PKCE)](https://datatracker.ietf.org/doc/html/rfc7636) enabled by default. + * PKCE is a security feature that mitigates authentication code interception attacks. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async authenticate(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.authenticate`, options, async (newOptions) => { + const arrayScopes = ensureScopes(scopes); + await this.msalClient.getTokenByInteractiveRequest(arrayScopes, Object.assign(Object.assign({}, newOptions), { disableAutomaticAuthentication: false, browserCustomizationOptions: this.browserCustomizationOptions, loginHint: this.loginHint })); + return this.msalClient.getActiveAccount(); + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$3 = credentialLogger("DeviceCodeCredential"); +/** + * Method that logs the user code from the DeviceCodeCredential. + * @param deviceCodeInfo - The device code. + */ +function defaultDeviceCodePromptCallback(deviceCodeInfo) { + console.log(deviceCodeInfo.message); +} +/** + * Enables authentication to Microsoft Entra ID using a device code + * that the user can enter into https://microsoft.com/devicelogin. + */ +class DeviceCodeCredential { + /** + * Creates an instance of DeviceCodeCredential with the details needed + * to initiate the device code authorization flow with Microsoft Entra ID. + * + * A message will be logged, giving users a code that they can use to authenticate once they go to https://microsoft.com/devicelogin + * + * Developers can configure how this message is shown by passing a custom `userPromptCallback`: + * + * ```ts snippet:device_code_credential_example + * import { DeviceCodeCredential } from "@azure/identity"; + * + * const credential = new DeviceCodeCredential({ + * tenantId: process.env.AZURE_TENANT_ID, + * clientId: process.env.AZURE_CLIENT_ID, + * userPromptCallback: (info) => { + * console.log("CUSTOMIZED PROMPT CALLBACK", info.message); + * }, + * }); + * ``` + * + * @param options - Options for configuring the client which makes the authentication requests. + */ + constructor(options) { + var _a, _b; + this.tenantId = options === null || options === void 0 ? void 0 : options.tenantId; + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + const clientId = (_a = options === null || options === void 0 ? void 0 : options.clientId) !== null && _a !== void 0 ? _a : DeveloperSignOnClientId; + const tenantId = resolveTenantId(logger$3, options === null || options === void 0 ? void 0 : options.tenantId, clientId); + this.userPromptCallback = (_b = options === null || options === void 0 ? void 0 : options.userPromptCallback) !== null && _b !== void 0 ? _b : defaultDeviceCodePromptCallback; + this.msalClient = createMsalClient(clientId, tenantId, Object.assign(Object.assign({}, options), { logger: logger$3, tokenCredentialOptions: options || {} })); + this.disableAutomaticAuthentication = options === null || options === void 0 ? void 0 : options.disableAutomaticAuthentication; + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * If the user provided the option `disableAutomaticAuthentication`, + * once the token can't be retrieved silently, + * this method won't attempt to request user interaction to retrieve the token. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async (newOptions) => { + newOptions.tenantId = processMultiTenantRequest(this.tenantId, newOptions, this.additionallyAllowedTenantIds, logger$3); + const arrayScopes = ensureScopes(scopes); + return this.msalClient.getTokenByDeviceCode(arrayScopes, this.userPromptCallback, Object.assign(Object.assign({}, newOptions), { disableAutomaticAuthentication: this.disableAutomaticAuthentication })); + }); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * If the token can't be retrieved silently, this method will always generate a challenge for the user. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async authenticate(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.authenticate`, options, async (newOptions) => { + const arrayScopes = Array.isArray(scopes) ? scopes : [scopes]; + await this.msalClient.getTokenByDeviceCode(arrayScopes, this.userPromptCallback, Object.assign(Object.assign({}, newOptions), { disableAutomaticAuthentication: false })); + return this.msalClient.getActiveAccount(); + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const credentialName$1 = "AzurePipelinesCredential"; +const logger$2 = credentialLogger(credentialName$1); +const OIDC_API_VERSION = "7.1"; +/** + * This credential is designed to be used in Azure Pipelines with service connections + * as a setup for workload identity federation. + */ +class AzurePipelinesCredential { + /** + * AzurePipelinesCredential supports Federated Identity on Azure Pipelines through Service Connections. + * @param tenantId - tenantId associated with the service connection + * @param clientId - clientId associated with the service connection + * @param serviceConnectionId - Unique ID for the service connection, as found in the querystring's resourceId key + * @param systemAccessToken - The pipeline's System.AccessToken value. + * @param options - The identity client options to use for authentication. + */ + constructor(tenantId, clientId, serviceConnectionId, systemAccessToken, options = {}) { + var _a, _b; + if (!clientId) { + throw new CredentialUnavailableError(`${credentialName$1}: is unavailable. clientId is a required parameter.`); + } + if (!tenantId) { + throw new CredentialUnavailableError(`${credentialName$1}: is unavailable. tenantId is a required parameter.`); + } + if (!serviceConnectionId) { + throw new CredentialUnavailableError(`${credentialName$1}: is unavailable. serviceConnectionId is a required parameter.`); + } + if (!systemAccessToken) { + throw new CredentialUnavailableError(`${credentialName$1}: is unavailable. systemAccessToken is a required parameter.`); + } + // Allow these headers to be logged for troubleshooting by AzurePipelines. + options.loggingOptions = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.loggingOptions), { additionalAllowedHeaderNames: [ + ...((_b = (_a = options.loggingOptions) === null || _a === void 0 ? void 0 : _a.additionalAllowedHeaderNames) !== null && _b !== void 0 ? _b : []), + "x-vss-e2eid", + "x-msedge-ref", + ] }); + this.identityClient = new IdentityClient(options); + checkTenantId(logger$2, tenantId); + logger$2.info(`Invoking AzurePipelinesCredential with tenant ID: ${tenantId}, client ID: ${clientId}, and service connection ID: ${serviceConnectionId}`); + if (!process.env.SYSTEM_OIDCREQUESTURI) { + throw new CredentialUnavailableError(`${credentialName$1}: is unavailable. Ensure that you're running this task in an Azure Pipeline, so that following missing system variable(s) can be defined- "SYSTEM_OIDCREQUESTURI"`); + } + const oidcRequestUrl = `${process.env.SYSTEM_OIDCREQUESTURI}?api-version=${OIDC_API_VERSION}&serviceConnectionId=${serviceConnectionId}`; + logger$2.info(`Invoking ClientAssertionCredential with tenant ID: ${tenantId}, client ID: ${clientId} and service connection ID: ${serviceConnectionId}`); + this.clientAssertionCredential = new ClientAssertionCredential(tenantId, clientId, this.requestOidcToken.bind(this, oidcRequestUrl, systemAccessToken), options); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} or {@link AuthenticationError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options) { + if (!this.clientAssertionCredential) { + const errorMessage = `${credentialName$1}: is unavailable. To use Federation Identity in Azure Pipelines, the following parameters are required - + tenantId, + clientId, + serviceConnectionId, + systemAccessToken, + "SYSTEM_OIDCREQUESTURI". + See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/azurepipelinescredential/troubleshoot`; + logger$2.error(errorMessage); + throw new CredentialUnavailableError(errorMessage); + } + logger$2.info("Invoking getToken() of Client Assertion Credential"); + return this.clientAssertionCredential.getToken(scopes, options); + } + /** + * + * @param oidcRequestUrl - oidc request url + * @param systemAccessToken - system access token + * @returns OIDC token from Azure Pipelines + */ + async requestOidcToken(oidcRequestUrl, systemAccessToken) { + logger$2.info("Requesting OIDC token from Azure Pipelines..."); + logger$2.info(oidcRequestUrl); + const request = coreRestPipeline.createPipelineRequest({ + url: oidcRequestUrl, + method: "POST", + headers: coreRestPipeline.createHttpHeaders({ + "Content-Type": "application/json", + Authorization: `Bearer ${systemAccessToken}`, + // Prevents the service from responding with a redirect HTTP status code (useful for automation). + "X-TFS-FedAuthRedirect": "Suppress", + }), + }); + const response = await this.identityClient.sendRequest(request); + return handleOidcResponse(response); + } +} +function handleOidcResponse(response) { + // OIDC token is present in `bodyAsText` field + const text = response.bodyAsText; + if (!text) { + logger$2.error(`${credentialName$1}: Authentication Failed. Received null token from OIDC request. Response status- ${response.status}. Complete response - ${JSON.stringify(response)}`); + throw new AuthenticationError(response.status, { + error: `${credentialName$1}: Authentication Failed. Received null token from OIDC request.`, + error_description: `${JSON.stringify(response)}. See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/azurepipelinescredential/troubleshoot`, + }); + } + try { + const result = JSON.parse(text); + if (result === null || result === void 0 ? void 0 : result.oidcToken) { + return result.oidcToken; + } + else { + const errorMessage = `${credentialName$1}: Authentication Failed. oidcToken field not detected in the response.`; + let errorDescription = ``; + if (response.status !== 200) { + errorDescription = `Response body = ${text}. Response Headers ["x-vss-e2eid"] = ${response.headers.get("x-vss-e2eid")} and ["x-msedge-ref"] = ${response.headers.get("x-msedge-ref")}. See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/azurepipelinescredential/troubleshoot`; + } + logger$2.error(errorMessage); + logger$2.error(errorDescription); + throw new AuthenticationError(response.status, { + error: errorMessage, + error_description: errorDescription, + }); + } + } + catch (e) { + const errorDetails = `${credentialName$1}: Authentication Failed. oidcToken field not detected in the response.`; + logger$2.error(`Response from service = ${text}, Response Headers ["x-vss-e2eid"] = ${response.headers.get("x-vss-e2eid")} + and ["x-msedge-ref"] = ${response.headers.get("x-msedge-ref")}, error message = ${e.message}`); + logger$2.error(errorDetails); + throw new AuthenticationError(response.status, { + error: errorDetails, + error_description: `Response = ${text}. Response headers ["x-vss-e2eid"] = ${response.headers.get("x-vss-e2eid")} and ["x-msedge-ref"] = ${response.headers.get("x-msedge-ref")}. See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/azurepipelinescredential/troubleshoot`, + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const logger$1 = credentialLogger("AuthorizationCodeCredential"); +/** + * Enables authentication to Microsoft Entra ID using an authorization code + * that was obtained through the authorization code flow, described in more detail + * in the Microsoft Entra ID documentation: + * + * https://learn.microsoft.com/entra/identity-platform/v2-oauth2-auth-code-flow + */ +class AuthorizationCodeCredential { + /** + * @hidden + * @internal + */ + constructor(tenantId, clientId, clientSecretOrAuthorizationCode, authorizationCodeOrRedirectUri, redirectUriOrOptions, options) { + checkTenantId(logger$1, tenantId); + this.clientSecret = clientSecretOrAuthorizationCode; + if (typeof redirectUriOrOptions === "string") { + // the clientId+clientSecret constructor + this.authorizationCode = authorizationCodeOrRedirectUri; + this.redirectUri = redirectUriOrOptions; + // in this case, options are good as they come + } + else { + // clientId only + this.authorizationCode = clientSecretOrAuthorizationCode; + this.redirectUri = authorizationCodeOrRedirectUri; + this.clientSecret = undefined; + options = redirectUriOrOptions; + } + // TODO: Validate tenant if provided + this.tenantId = tenantId; + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(options === null || options === void 0 ? void 0 : options.additionallyAllowedTenants); + this.msalClient = createMsalClient(clientId, tenantId, Object.assign(Object.assign({}, options), { logger: logger$1, tokenCredentialOptions: options !== null && options !== void 0 ? options : {} })); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure any requests this + * TokenCredential implementation might make. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${this.constructor.name}.getToken`, options, async (newOptions) => { + const tenantId = processMultiTenantRequest(this.tenantId, newOptions, this.additionallyAllowedTenantIds); + newOptions.tenantId = tenantId; + const arrayScopes = ensureScopes(scopes); + return this.msalClient.getTokenByAuthorizationCode(arrayScopes, this.redirectUri, this.authorizationCode, this.clientSecret, Object.assign(Object.assign({}, newOptions), { disableAutomaticAuthentication: this.disableAutomaticAuthentication })); + }); + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +const credentialName = "OnBehalfOfCredential"; +const logger = credentialLogger(credentialName); +/** + * Enables authentication to Microsoft Entra ID using the [On Behalf Of flow](https://learn.microsoft.com/entra/identity-platform/v2-oauth2-on-behalf-of-flow). + */ +class OnBehalfOfCredential { + constructor(options) { + const { clientSecret } = options; + const { certificatePath, sendCertificateChain } = options; + const { getAssertion } = options; + const { tenantId, clientId, userAssertionToken, additionallyAllowedTenants: additionallyAllowedTenantIds, } = options; + if (!tenantId) { + throw new CredentialUnavailableError(`${credentialName}: tenantId is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot.`); + } + if (!clientId) { + throw new CredentialUnavailableError(`${credentialName}: clientId is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot.`); + } + if (!clientSecret && !certificatePath && !getAssertion) { + throw new CredentialUnavailableError(`${credentialName}: You must provide one of clientSecret, certificatePath, or a getAssertion callback but none were provided. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot.`); + } + if (!userAssertionToken) { + throw new CredentialUnavailableError(`${credentialName}: userAssertionToken is a required parameter. To troubleshoot, visit https://aka.ms/azsdk/js/identity/serviceprincipalauthentication/troubleshoot.`); + } + this.certificatePath = certificatePath; + this.clientSecret = clientSecret; + this.userAssertionToken = userAssertionToken; + this.sendCertificateChain = sendCertificateChain; + this.clientAssertion = getAssertion; + this.tenantId = tenantId; + this.additionallyAllowedTenantIds = resolveAdditionallyAllowedTenantIds(additionallyAllowedTenantIds); + this.msalClient = createMsalClient(clientId, this.tenantId, Object.assign(Object.assign({}, options), { logger, tokenCredentialOptions: options })); + } + /** + * Authenticates with Microsoft Entra ID and returns an access token if successful. + * If authentication fails, a {@link CredentialUnavailableError} will be thrown with the details of the failure. + * + * @param scopes - The list of scopes for which the token will have access. + * @param options - The options used to configure the underlying network requests. + */ + async getToken(scopes, options = {}) { + return tracingClient.withSpan(`${credentialName}.getToken`, options, async (newOptions) => { + newOptions.tenantId = processMultiTenantRequest(this.tenantId, newOptions, this.additionallyAllowedTenantIds, logger); + const arrayScopes = ensureScopes(scopes); + if (this.certificatePath) { + const clientCertificate = await this.buildClientCertificate(this.certificatePath); + return this.msalClient.getTokenOnBehalfOf(arrayScopes, this.userAssertionToken, clientCertificate, newOptions); + } + else if (this.clientSecret) { + return this.msalClient.getTokenOnBehalfOf(arrayScopes, this.userAssertionToken, this.clientSecret, options); + } + else if (this.clientAssertion) { + return this.msalClient.getTokenOnBehalfOf(arrayScopes, this.userAssertionToken, this.clientAssertion, options); + } + else { + // this is an invalid scenario and is a bug, as the constructor should have thrown an error if neither clientSecret nor certificatePath nor clientAssertion were provided + throw new Error("Expected either clientSecret or certificatePath or clientAssertion to be defined."); + } + }); + } + async buildClientCertificate(certificatePath) { + try { + const parts = await this.parseCertificate({ certificatePath }, this.sendCertificateChain); + return { + thumbprint: parts.thumbprint, + privateKey: parts.certificateContents, + x5c: parts.x5c, + }; + } + catch (error) { + logger.info(formatError("", error)); + throw error; + } + } + async parseCertificate(configuration, sendCertificateChain) { + const certificatePath = configuration.certificatePath; + const certificateContents = await promises$1.readFile(certificatePath, "utf8"); + const x5c = sendCertificateChain ? certificateContents : undefined; + const certificatePattern = /(-+BEGIN CERTIFICATE-+)(\n\r?|\r\n?)([A-Za-z0-9+/\n\r]+=*)(\n\r?|\r\n?)(-+END CERTIFICATE-+)/g; + const publicKeys = []; + // Match all possible certificates, in the order they are in the file. These will form the chain that is used for x5c + let match; + do { + match = certificatePattern.exec(certificateContents); + if (match) { + publicKeys.push(match[3]); + } + } while (match); + if (publicKeys.length === 0) { + throw new Error("The file at the specified path does not contain a PEM-encoded certificate."); + } + const thumbprint = node_crypto.createHash("sha1") + .update(Buffer.from(publicKeys[0], "base64")) + .digest("hex") + .toUpperCase(); + return { + certificateContents, + thumbprint, + x5c, + }; + } +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Returns a callback that provides a bearer token. + * For example, the bearer token can be used to authenticate a request as follows: + * ```ts snippet:token_provider_example + * import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity"; + * import { createPipelineRequest } from "@azure/core-rest-pipeline"; + * + * const credential = new DefaultAzureCredential(); + * const scope = "https://cognitiveservices.azure.com/.default"; + * const getAccessToken = getBearerTokenProvider(credential, scope); + * const token = await getAccessToken(); + * // usage + * const request = createPipelineRequest({ url: "https://example.com" }); + * request.headers.set("Authorization", `Bearer ${token}`); + * ``` + * + * @param credential - The credential used to authenticate the request. + * @param scopes - The scopes required for the bearer token. + * @param options - Options to configure the token provider. + * @returns a callback that provides a bearer token. + */ +function getBearerTokenProvider(credential, scopes, options) { + const { abortSignal, tracingOptions } = options || {}; + const pipeline = coreRestPipeline.createEmptyPipeline(); + pipeline.addPolicy(coreRestPipeline.bearerTokenAuthenticationPolicy({ credential, scopes })); + async function getRefreshedToken() { + var _a; + // Create a pipeline with just the bearer token policy + // and run a dummy request through it to get the token + const res = await pipeline.sendRequest({ + sendRequest: (request) => Promise.resolve({ + request, + status: 200, + headers: request.headers, + }), + }, coreRestPipeline.createPipelineRequest({ + url: "https://example.com", + abortSignal, + tracingOptions, + })); + const accessToken = (_a = res.headers.get("authorization")) === null || _a === void 0 ? void 0 : _a.split(" ")[1]; + if (!accessToken) { + throw new Error("Failed to get access token"); + } + return accessToken; + } + return getRefreshedToken; +} + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/** + * Returns a new instance of the {@link DefaultAzureCredential}. + */ +function getDefaultAzureCredential() { + return new DefaultAzureCredential(); +} + +exports.AggregateAuthenticationError = AggregateAuthenticationError; +exports.AggregateAuthenticationErrorName = AggregateAuthenticationErrorName; +exports.AuthenticationError = AuthenticationError; +exports.AuthenticationErrorName = AuthenticationErrorName; +exports.AuthenticationRequiredError = AuthenticationRequiredError; +exports.AuthorizationCodeCredential = AuthorizationCodeCredential; +exports.AzureCliCredential = AzureCliCredential; +exports.AzureDeveloperCliCredential = AzureDeveloperCliCredential; +exports.AzurePipelinesCredential = AzurePipelinesCredential; +exports.AzurePowerShellCredential = AzurePowerShellCredential; +exports.ChainedTokenCredential = ChainedTokenCredential; +exports.ClientAssertionCredential = ClientAssertionCredential; +exports.ClientCertificateCredential = ClientCertificateCredential; +exports.ClientSecretCredential = ClientSecretCredential; +exports.CredentialUnavailableError = CredentialUnavailableError; +exports.CredentialUnavailableErrorName = CredentialUnavailableErrorName; +exports.DefaultAzureCredential = DefaultAzureCredential; +exports.DeviceCodeCredential = DeviceCodeCredential; +exports.EnvironmentCredential = EnvironmentCredential; +exports.InteractiveBrowserCredential = InteractiveBrowserCredential; +exports.ManagedIdentityCredential = ManagedIdentityCredential; +exports.OnBehalfOfCredential = OnBehalfOfCredential; +exports.UsernamePasswordCredential = UsernamePasswordCredential; +exports.VisualStudioCodeCredential = VisualStudioCodeCredential; +exports.WorkloadIdentityCredential = WorkloadIdentityCredential; +exports.deserializeAuthenticationRecord = deserializeAuthenticationRecord; +exports.getBearerTokenProvider = getBearerTokenProvider; +exports.getDefaultAzureCredential = getDefaultAzureCredential; +exports.logger = logger$l; +exports.serializeAuthenticationRecord = serializeAuthenticationRecord; +exports.useIdentityPlugin = useIdentityPlugin; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 8316: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var tslib_1 = __nccwpck_require__(1860); +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +tslib_1.__exportStar(__nccwpck_require__(2992), exports); +tslib_1.__exportStar(__nccwpck_require__(8136), exports); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 2532: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Client = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module Client + */ +var Constants_1 = __nccwpck_require__(5710); +var CustomAuthenticationProvider_1 = __nccwpck_require__(4177); +var GraphRequest_1 = __nccwpck_require__(7374); +var HTTPClient_1 = __nccwpck_require__(8052); +var HTTPClientFactory_1 = __nccwpck_require__(5656); +var ValidatePolyFilling_1 = __nccwpck_require__(4580); +var Client = /** @class */ (function () { + /** + * @private + * @constructor + * Creates an instance of Client + * @param {ClientOptions} clientOptions - The options to instantiate the client object + */ + function Client(clientOptions) { + /** + * @private + * A member which stores the Client instance options + */ + this.config = { + baseUrl: Constants_1.GRAPH_BASE_URL, + debugLogging: false, + defaultVersion: Constants_1.GRAPH_API_VERSION, + }; + (0, ValidatePolyFilling_1.validatePolyFilling)(); + for (var key in clientOptions) { + if (Object.prototype.hasOwnProperty.call(clientOptions, key)) { + this.config[key] = clientOptions[key]; + } + } + var httpClient; + if (clientOptions.authProvider !== undefined && clientOptions.middleware !== undefined) { + var error = new Error(); + error.name = "AmbiguityInInitialization"; + error.message = "Unable to Create Client, Please provide either authentication provider for default middleware chain or custom middleware chain not both"; + throw error; + } + else if (clientOptions.authProvider !== undefined) { + httpClient = HTTPClientFactory_1.HTTPClientFactory.createWithAuthenticationProvider(clientOptions.authProvider); + } + else if (clientOptions.middleware !== undefined) { + httpClient = new (HTTPClient_1.HTTPClient.bind.apply(HTTPClient_1.HTTPClient, tslib_1.__spreadArray([void 0], [].concat(clientOptions.middleware), false)))(); + } + else { + var error = new Error(); + error.name = "InvalidMiddlewareChain"; + error.message = "Unable to Create Client, Please provide either authentication provider for default middleware chain or custom middleware chain"; + throw error; + } + this.httpClient = httpClient; + } + /** + * @public + * @static + * To create a client instance with options and initializes the default middleware chain + * @param {Options} options - The options for client instance + * @returns The Client instance + */ + Client.init = function (options) { + var clientOptions = {}; + for (var i in options) { + if (Object.prototype.hasOwnProperty.call(options, i)) { + clientOptions[i] = i === "authProvider" ? new CustomAuthenticationProvider_1.CustomAuthenticationProvider(options[i]) : options[i]; + } + } + return Client.initWithMiddleware(clientOptions); + }; + /** + * @public + * @static + * To create a client instance with the Client Options + * @param {ClientOptions} clientOptions - The options object for initializing the client + * @returns The Client instance + */ + Client.initWithMiddleware = function (clientOptions) { + return new Client(clientOptions); + }; + /** + * @public + * Entry point to make requests + * @param {string} path - The path string value + * @returns The graph request instance + */ + Client.prototype.api = function (path) { + return new GraphRequest_1.GraphRequest(this.httpClient, this.config, path); + }; + return Client; +}()); +exports.Client = Client; +//# sourceMappingURL=Client.js.map + +/***/ }), + +/***/ 5710: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GRAPH_URLS = exports.GRAPH_BASE_URL = exports.GRAPH_API_VERSION = void 0; +/** + * @module Constants + */ +/** + * @constant + * A Default API endpoint version for a request + */ +exports.GRAPH_API_VERSION = "v1.0"; +/** + * @constant + * A Default base url for a request + */ +exports.GRAPH_BASE_URL = "https://graph.microsoft.com/"; +/** + * To hold list of the service root endpoints for Microsoft Graph and Graph Explorer for each national cloud. + * Set(iterable:Object) is not supported in Internet Explorer. The consumer is recommended to use a suitable polyfill. + */ +exports.GRAPH_URLS = new Set(["graph.microsoft.com", "graph.microsoft.us", "dod-graph.microsoft.us", "graph.microsoft.de", "microsoftgraph.chinacloudapi.cn", "canary.graph.microsoft.com"]); +//# sourceMappingURL=Constants.js.map + +/***/ }), + +/***/ 4177: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CustomAuthenticationProvider = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module CustomAuthenticationProvider + */ +var GraphClientError_1 = __nccwpck_require__(4896); +/** + * @class + * Class representing CustomAuthenticationProvider + * @extends AuthenticationProvider + */ +var CustomAuthenticationProvider = /** @class */ (function () { + /** + * @public + * @constructor + * Creates an instance of CustomAuthenticationProvider + * @param {AuthProviderCallback} provider - An authProvider function + * @returns An instance of CustomAuthenticationProvider + */ + function CustomAuthenticationProvider(provider) { + this.provider = provider; + } + /** + * @public + * @async + * To get the access token + * @returns The promise that resolves to an access token + */ + CustomAuthenticationProvider.prototype.getAccessToken = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var _this = this; + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve, reject) { + _this.provider(function (error, accessToken) { return tslib_1.__awaiter(_this, void 0, void 0, function () { + var invalidTokenMessage, err; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!accessToken) return [3 /*break*/, 1]; + resolve(accessToken); + return [3 /*break*/, 3]; + case 1: + if (!error) { + invalidTokenMessage = "Access token is undefined or empty.\ + Please provide a valid token.\ + For more help - https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/docs/CustomAuthenticationProvider.md"; + error = new GraphClientError_1.GraphClientError(invalidTokenMessage); + } + return [4 /*yield*/, GraphClientError_1.GraphClientError.setGraphClientError(error)]; + case 2: + err = _a.sent(); + reject(err); + _a.label = 3; + case 3: return [2 /*return*/]; + } + }); + }); }); + })]; + }); + }); + }; + return CustomAuthenticationProvider; +}()); +exports.CustomAuthenticationProvider = CustomAuthenticationProvider; +//# sourceMappingURL=CustomAuthenticationProvider.js.map + +/***/ }), + +/***/ 4896: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GraphClientError = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module GraphClientError + */ +/** + * @class + * Create GraphClientError object to handle client-side errors + * encountered within the JavaScript Client SDK. + * Whereas GraphError Class should be used to handle errors in the response from the Graph API. + */ +var GraphClientError = /** @class */ (function (_super) { + tslib_1.__extends(GraphClientError, _super); + /** + * @public + * @constructor + * Creates an instance of GraphClientError + * @param {string} message? - Error message + * @returns An instance of GraphClientError + */ + function GraphClientError(message) { + var _this = _super.call(this, message) || this; + Object.setPrototypeOf(_this, GraphClientError.prototype); + return _this; + } + /** + * @public + * @static + * @async + * To set the GraphClientError object + * @param {any} error - The error returned encountered by the Graph JavaScript Client SDK while processing request + * @returns GraphClientError object set to the error passed + */ + GraphClientError.setGraphClientError = function (error) { + var graphClientError; + if (error instanceof Error) { + graphClientError = error; + } + else { + graphClientError = new GraphClientError(); + graphClientError.customError = error; + } + return graphClientError; + }; + return GraphClientError; +}(Error)); +exports.GraphClientError = GraphClientError; +//# sourceMappingURL=GraphClientError.js.map + +/***/ }), + +/***/ 7893: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GraphError = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module GraphError + */ +/** + * @class + * Class for GraphError + * @NOTE: This is NOT what is returned from the Graph + * GraphError is created from parsing JSON errors returned from the graph + * Some fields are renamed ie, "request-id" => requestId so you can use dot notation + */ +var GraphError = /** @class */ (function (_super) { + tslib_1.__extends(GraphError, _super); + /** + * @public + * @constructor + * Creates an instance of GraphError + * @param {number} [statusCode = -1] - The status code of the error + * @param {string} [message] - The message of the error + * @param {Error} [baseError] - The base error + * @returns An instance of GraphError + */ + function GraphError(statusCode, message, baseError) { + if (statusCode === void 0) { statusCode = -1; } + var _this = _super.call(this, message || (baseError && baseError.message)) || this; + // https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work + Object.setPrototypeOf(_this, GraphError.prototype); + _this.statusCode = statusCode; + _this.code = null; + _this.requestId = null; + _this.date = new Date(); + _this.body = null; + _this.stack = baseError ? baseError.stack : _this.stack; + return _this; + } + return GraphError; +}(Error)); +exports.GraphError = GraphError; +//# sourceMappingURL=GraphError.js.map + +/***/ }), + +/***/ 8389: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GraphErrorHandler = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module GraphErrorHandler + */ +var GraphError_1 = __nccwpck_require__(7893); +/** + * @class + * Class for GraphErrorHandler + */ +var GraphErrorHandler = /** @class */ (function () { + function GraphErrorHandler() { + } + /** + * @private + * @static + * Populates the GraphError instance with Error instance values + * @param {Error} error - The error returned by graph service or some native error + * @param {number} [statusCode] - The status code of the response + * @returns The GraphError instance + */ + GraphErrorHandler.constructError = function (error, statusCode, rawResponse) { + var gError = new GraphError_1.GraphError(statusCode, "", error); + if (error.name !== undefined) { + gError.code = error.name; + } + gError.body = error.toString(); + gError.date = new Date(); + gError.headers = rawResponse === null || rawResponse === void 0 ? void 0 : rawResponse.headers; + return gError; + }; + /** + * @private + * @static + * @async + * Populates the GraphError instance from the Error returned by graph service + * @param {GraphAPIErrorResponse} graphError - The error possibly returned by graph service or some native error + * @param {number} statusCode - The status code of the response + * @returns A promise that resolves to GraphError instance + * + * Example error for https://graph.microsoft.com/v1.0/me/events?$top=3&$search=foo + * { + * "error": { + * "code": "SearchEvents", + * "message": "The parameter $search is not currently supported on the Events resource.", + * "innerError": { + * "request-id": "b31c83fd-944c-4663-aa50-5d9ceb367e19", + * "date": "2016-11-17T18:37:45" + * } + * } + * } + */ + GraphErrorHandler.constructErrorFromResponse = function (graphError, statusCode, rawResponse) { + var error = graphError.error; + var gError = new GraphError_1.GraphError(statusCode, error.message); + gError.code = error.code; + if (error.innerError !== undefined) { + gError.requestId = error.innerError["request-id"]; + gError.date = new Date(error.innerError.date); + } + gError.body = JSON.stringify(error); + gError.headers = rawResponse === null || rawResponse === void 0 ? void 0 : rawResponse.headers; + return gError; + }; + /** + * @public + * @static + * @async + * To get the GraphError object + * Reference - https://docs.microsoft.com/en-us/graph/errors + * @param {any} [error = null] - The error returned by graph service or some native error + * @param {number} [statusCode = -1] - The status code of the response + * @param {GraphRequestCallback} [callback] - The graph request callback function + * @returns A promise that resolves to GraphError instance + */ + GraphErrorHandler.getError = function (error, statusCode, callback, rawResponse) { + if (error === void 0) { error = null; } + if (statusCode === void 0) { statusCode = -1; } + return tslib_1.__awaiter(this, void 0, void 0, function () { + var gError; + return tslib_1.__generator(this, function (_a) { + if (error && error.error) { + gError = GraphErrorHandler.constructErrorFromResponse(error, statusCode, rawResponse); + } + else if (error instanceof Error) { + gError = GraphErrorHandler.constructError(error, statusCode, rawResponse); + } + else { + gError = new GraphError_1.GraphError(statusCode); + gError.body = error; // if a custom error is passed which is not instance of Error object or a graph API response + } + if (typeof callback === "function") { + callback(gError, null); + } + else { + return [2 /*return*/, gError]; + } + return [2 /*return*/]; + }); + }); + }; + return GraphErrorHandler; +}()); +exports.GraphErrorHandler = GraphErrorHandler; +//# sourceMappingURL=GraphErrorHandler.js.map + +/***/ }), + +/***/ 7374: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GraphRequest = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module GraphRequest + */ +var GraphClientError_1 = __nccwpck_require__(4896); +var GraphErrorHandler_1 = __nccwpck_require__(8389); +var GraphRequestUtil_1 = __nccwpck_require__(7362); +var GraphResponseHandler_1 = __nccwpck_require__(7878); +var MiddlewareControl_1 = __nccwpck_require__(8153); +var RequestMethod_1 = __nccwpck_require__(4323); +var ResponseType_1 = __nccwpck_require__(3708); +/** + * @class + * A Class representing GraphRequest + */ +var GraphRequest = /** @class */ (function () { + /** + * @public + * @constructor + * Creates an instance of GraphRequest + * @param {HTTPClient} httpClient - The HTTPClient instance + * @param {ClientOptions} config - The options for making request + * @param {string} path - A path string + */ + function GraphRequest(httpClient, config, path) { + var _this = this; + /** + * @private + * Parses the path string and creates URLComponents out of it + * @param {string} path - The request path string + * @returns Nothing + */ + this.parsePath = function (path) { + // Strips out the base of the url if they passed in + if (path.indexOf("https://") !== -1) { + path = path.replace("https://", ""); + // Find where the host ends + var endOfHostStrPos = path.indexOf("/"); + if (endOfHostStrPos !== -1) { + // Parse out the host + _this.urlComponents.host = "https://" + path.substring(0, endOfHostStrPos); + // Strip the host from path + path = path.substring(endOfHostStrPos + 1, path.length); + } + // Remove the following version + var endOfVersionStrPos = path.indexOf("/"); + if (endOfVersionStrPos !== -1) { + // Parse out the version + _this.urlComponents.version = path.substring(0, endOfVersionStrPos); + // Strip version from path + path = path.substring(endOfVersionStrPos + 1, path.length); + } + } + // Strip out any leading "/" + if (path.charAt(0) === "/") { + path = path.substr(1); + } + var queryStrPos = path.indexOf("?"); + if (queryStrPos === -1) { + // No query string + _this.urlComponents.path = path; + } + else { + _this.urlComponents.path = path.substr(0, queryStrPos); + // Capture query string into oDataQueryParams and otherURLQueryParams + var queryParams = path.substring(queryStrPos + 1, path.length).split("&"); + for (var _i = 0, queryParams_1 = queryParams; _i < queryParams_1.length; _i++) { + var queryParam = queryParams_1[_i]; + _this.parseQueryParameter(queryParam); + } + } + }; + this.httpClient = httpClient; + this.config = config; + this.urlComponents = { + host: this.config.baseUrl, + version: this.config.defaultVersion, + oDataQueryParams: {}, + otherURLQueryParams: {}, + otherURLQueryOptions: [], + }; + this._headers = {}; + this._options = {}; + this._middlewareOptions = []; + this.parsePath(path); + } + /** + * @private + * Adds the query parameter as comma separated values + * @param {string} propertyName - The name of a property + * @param {string|string[]} propertyValue - The vale of a property + * @param {IArguments} additionalProperties - The additional properties + * @returns Nothing + */ + GraphRequest.prototype.addCsvQueryParameter = function (propertyName, propertyValue, additionalProperties) { + // If there are already $propertyName value there, append a "," + this.urlComponents.oDataQueryParams[propertyName] = this.urlComponents.oDataQueryParams[propertyName] ? this.urlComponents.oDataQueryParams[propertyName] + "," : ""; + var allValues = []; + if (additionalProperties.length > 1 && typeof propertyValue === "string") { + allValues = Array.prototype.slice.call(additionalProperties); + } + else if (typeof propertyValue === "string") { + allValues.push(propertyValue); + } + else { + allValues = allValues.concat(propertyValue); + } + this.urlComponents.oDataQueryParams[propertyName] += allValues.join(","); + }; + /** + * @private + * Builds the full url from the URLComponents to make a request + * @returns The URL string that is qualified to make a request to graph endpoint + */ + GraphRequest.prototype.buildFullUrl = function () { + var url = (0, GraphRequestUtil_1.urlJoin)([this.urlComponents.host, this.urlComponents.version, this.urlComponents.path]) + this.createQueryString(); + if (this.config.debugLogging) { + console.log(url); + } + return url; + }; + /** + * @private + * Builds the query string from the URLComponents + * @returns The Constructed query string + */ + GraphRequest.prototype.createQueryString = function () { + // Combining query params from oDataQueryParams and otherURLQueryParams + var urlComponents = this.urlComponents; + var query = []; + if (Object.keys(urlComponents.oDataQueryParams).length !== 0) { + for (var property in urlComponents.oDataQueryParams) { + if (Object.prototype.hasOwnProperty.call(urlComponents.oDataQueryParams, property)) { + query.push(property + "=" + urlComponents.oDataQueryParams[property]); + } + } + } + if (Object.keys(urlComponents.otherURLQueryParams).length !== 0) { + for (var property in urlComponents.otherURLQueryParams) { + if (Object.prototype.hasOwnProperty.call(urlComponents.otherURLQueryParams, property)) { + query.push(property + "=" + urlComponents.otherURLQueryParams[property]); + } + } + } + if (urlComponents.otherURLQueryOptions.length !== 0) { + for (var _i = 0, _a = urlComponents.otherURLQueryOptions; _i < _a.length; _i++) { + var str = _a[_i]; + query.push(str); + } + } + return query.length > 0 ? "?" + query.join("&") : ""; + }; + /** + * @private + * Parses the query parameters to set the urlComponents property of the GraphRequest object + * @param {string|KeyValuePairObjectStringNumber} queryDictionaryOrString - The query parameter + * @returns The same GraphRequest instance that is being called with + */ + GraphRequest.prototype.parseQueryParameter = function (queryDictionaryOrString) { + if (typeof queryDictionaryOrString === "string") { + if (queryDictionaryOrString.charAt(0) === "?") { + queryDictionaryOrString = queryDictionaryOrString.substring(1); + } + if (queryDictionaryOrString.indexOf("&") !== -1) { + var queryParams = queryDictionaryOrString.split("&"); + for (var _i = 0, queryParams_2 = queryParams; _i < queryParams_2.length; _i++) { + var str = queryParams_2[_i]; + this.parseQueryParamenterString(str); + } + } + else { + this.parseQueryParamenterString(queryDictionaryOrString); + } + } + else if (queryDictionaryOrString.constructor === Object) { + for (var key in queryDictionaryOrString) { + if (Object.prototype.hasOwnProperty.call(queryDictionaryOrString, key)) { + this.setURLComponentsQueryParamater(key, queryDictionaryOrString[key]); + } + } + } + return this; + }; + /** + * @private + * Parses the query parameter of string type to set the urlComponents property of the GraphRequest object + * @param {string} queryParameter - the query parameters + * returns nothing + */ + GraphRequest.prototype.parseQueryParamenterString = function (queryParameter) { + /* The query key-value pair must be split on the first equals sign to avoid errors in parsing nested query parameters. + Example-> "/me?$expand=home($select=city)" */ + if (this.isValidQueryKeyValuePair(queryParameter)) { + var indexOfFirstEquals = queryParameter.indexOf("="); + var paramKey = queryParameter.substring(0, indexOfFirstEquals); + var paramValue = queryParameter.substring(indexOfFirstEquals + 1); + this.setURLComponentsQueryParamater(paramKey, paramValue); + } + else { + /* Push values which are not of key-value structure. + Example-> Handle an invalid input->.query(test), .query($select($select=name)) and let the Graph API respond with the error in the URL*/ + this.urlComponents.otherURLQueryOptions.push(queryParameter); + } + }; + /** + * @private + * Sets values into the urlComponents property of GraphRequest object. + * @param {string} paramKey - the query parameter key + * @param {string} paramValue - the query paramter value + * @returns nothing + */ + GraphRequest.prototype.setURLComponentsQueryParamater = function (paramKey, paramValue) { + if (GraphRequestUtil_1.oDataQueryNames.indexOf(paramKey) !== -1) { + var currentValue = this.urlComponents.oDataQueryParams[paramKey]; + var isValueAppendable = currentValue && (paramKey === "$expand" || paramKey === "$select" || paramKey === "$orderby"); + this.urlComponents.oDataQueryParams[paramKey] = isValueAppendable ? currentValue + "," + paramValue : paramValue; + } + else { + this.urlComponents.otherURLQueryParams[paramKey] = paramValue; + } + }; + /** + * @private + * Check if the query parameter string has a valid key-value structure + * @param {string} queryString - the query parameter string. Example -> "name=value" + * #returns true if the query string has a valid key-value structure else false + */ + GraphRequest.prototype.isValidQueryKeyValuePair = function (queryString) { + var indexofFirstEquals = queryString.indexOf("="); + if (indexofFirstEquals === -1) { + return false; + } + var indexofOpeningParanthesis = queryString.indexOf("("); + if (indexofOpeningParanthesis !== -1 && queryString.indexOf("(") < indexofFirstEquals) { + // Example -> .query($select($expand=true)); + return false; + } + return true; + }; + /** + * @private + * Updates the custom headers and options for a request + * @param {FetchOptions} options - The request options object + * @returns Nothing + */ + GraphRequest.prototype.updateRequestOptions = function (options) { + var optionsHeaders = tslib_1.__assign({}, options.headers); + if (this.config.fetchOptions !== undefined) { + var fetchOptions = tslib_1.__assign({}, this.config.fetchOptions); + Object.assign(options, fetchOptions); + if (typeof this.config.fetchOptions.headers !== undefined) { + options.headers = tslib_1.__assign({}, this.config.fetchOptions.headers); + } + } + Object.assign(options, this._options); + if (options.headers !== undefined) { + Object.assign(optionsHeaders, options.headers); + } + Object.assign(optionsHeaders, this._headers); + options.headers = optionsHeaders; + }; + /** + * @private + * @async + * Adds the custom headers and options to the request and makes the HTTPClient send request call + * @param {RequestInfo} request - The request url string or the Request object value + * @param {FetchOptions} options - The options to make a request + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the response content + */ + GraphRequest.prototype.send = function (request, options, callback) { + var _a; + return tslib_1.__awaiter(this, void 0, void 0, function () { + var rawResponse, middlewareControl, customHosts, context_1, response, error_1, statusCode, gError; + return tslib_1.__generator(this, function (_b) { + switch (_b.label) { + case 0: + middlewareControl = new MiddlewareControl_1.MiddlewareControl(this._middlewareOptions); + this.updateRequestOptions(options); + customHosts = (_a = this.config) === null || _a === void 0 ? void 0 : _a.customHosts; + _b.label = 1; + case 1: + _b.trys.push([1, 4, , 6]); + return [4 /*yield*/, this.httpClient.sendRequest({ + request: request, + options: options, + middlewareControl: middlewareControl, + customHosts: customHosts, + })]; + case 2: + context_1 = _b.sent(); + rawResponse = context_1.response; + return [4 /*yield*/, GraphResponseHandler_1.GraphResponseHandler.getResponse(rawResponse, this._responseType, callback)]; + case 3: + response = _b.sent(); + return [2 /*return*/, response]; + case 4: + error_1 = _b.sent(); + if (error_1 instanceof GraphClientError_1.GraphClientError) { + throw error_1; + } + statusCode = void 0; + if (rawResponse) { + statusCode = rawResponse.status; + } + return [4 /*yield*/, GraphErrorHandler_1.GraphErrorHandler.getError(error_1, statusCode, callback, rawResponse)]; + case 5: + gError = _b.sent(); + throw gError; + case 6: return [2 /*return*/]; + } + }); + }); + }; + /** + * @private + * Checks if the content-type is present in the _headers property. If not present, defaults the content-type to application/json + * @param none + * @returns nothing + */ + GraphRequest.prototype.setHeaderContentType = function () { + if (!this._headers) { + this.header("Content-Type", "application/json"); + return; + } + var headerKeys = Object.keys(this._headers); + for (var _i = 0, headerKeys_1 = headerKeys; _i < headerKeys_1.length; _i++) { + var headerKey = headerKeys_1[_i]; + if (headerKey.toLowerCase() === "content-type") { + return; + } + } + // Default the content-type to application/json in case the content-type is not present in the header + this.header("Content-Type", "application/json"); + }; + /** + * @public + * Sets the custom header for a request + * @param {string} headerKey - A header key + * @param {string} headerValue - A header value + * @returns The same GraphRequest instance that is being called with + */ + GraphRequest.prototype.header = function (headerKey, headerValue) { + this._headers[headerKey] = headerValue; + return this; + }; + /** + * @public + * Sets the custom headers for a request + * @param {KeyValuePairObjectStringNumber | HeadersInit} headers - The request headers + * @returns The same GraphRequest instance that is being called with + */ + GraphRequest.prototype.headers = function (headers) { + for (var key in headers) { + if (Object.prototype.hasOwnProperty.call(headers, key)) { + this._headers[key] = headers[key]; + } + } + return this; + }; + /** + * @public + * Sets the option for making a request + * @param {string} key - The key value + * @param {any} value - The value + * @returns The same GraphRequest instance that is being called with + */ + GraphRequest.prototype.option = function (key, value) { + this._options[key] = value; + return this; + }; + /** + * @public + * Sets the options for making a request + * @param {{ [key: string]: any }} options - The options key value pair + * @returns The same GraphRequest instance that is being called with + */ + GraphRequest.prototype.options = function (options) { + for (var key in options) { + if (Object.prototype.hasOwnProperty.call(options, key)) { + this._options[key] = options[key]; + } + } + return this; + }; + /** + * @public + * Sets the middleware options for a request + * @param {MiddlewareOptions[]} options - The array of middleware options + * @returns The same GraphRequest instance that is being called with + */ + GraphRequest.prototype.middlewareOptions = function (options) { + this._middlewareOptions = options; + return this; + }; + /** + * @public + * Sets the api endpoint version for a request + * @param {string} version - The version value + * @returns The same GraphRequest instance that is being called with + */ + GraphRequest.prototype.version = function (version) { + this.urlComponents.version = version; + return this; + }; + /** + * @public + * Sets the api endpoint version for a request + * @param {ResponseType} responseType - The response type value + * @returns The same GraphRequest instance that is being called with + */ + GraphRequest.prototype.responseType = function (responseType) { + this._responseType = responseType; + return this; + }; + /** + * @public + * To add properties for select OData Query param + * @param {string|string[]} properties - The Properties value + * @returns The same GraphRequest instance that is being called with, after adding the properties for $select query + */ + /* + * Accepts .select("displayName,birthday") + * and .select(["displayName", "birthday"]) + * and .select("displayName", "birthday") + * + */ + GraphRequest.prototype.select = function (properties) { + this.addCsvQueryParameter("$select", properties, arguments); + return this; + }; + /** + * @public + * To add properties for expand OData Query param + * @param {string|string[]} properties - The Properties value + * @returns The same GraphRequest instance that is being called with, after adding the properties for $expand query + */ + GraphRequest.prototype.expand = function (properties) { + this.addCsvQueryParameter("$expand", properties, arguments); + return this; + }; + /** + * @public + * To add properties for orderby OData Query param + * @param {string|string[]} properties - The Properties value + * @returns The same GraphRequest instance that is being called with, after adding the properties for $orderby query + */ + GraphRequest.prototype.orderby = function (properties) { + this.addCsvQueryParameter("$orderby", properties, arguments); + return this; + }; + /** + * @public + * To add query string for filter OData Query param. The request URL accepts only one $filter Odata Query option and its value is set to the most recently passed filter query string. + * @param {string} filterStr - The filter query string + * @returns The same GraphRequest instance that is being called with, after adding the $filter query + */ + GraphRequest.prototype.filter = function (filterStr) { + this.urlComponents.oDataQueryParams.$filter = filterStr; + return this; + }; + /** + * @public + * To add criterion for search OData Query param. The request URL accepts only one $search Odata Query option and its value is set to the most recently passed search criterion string. + * @param {string} searchStr - The search criterion string + * @returns The same GraphRequest instance that is being called with, after adding the $search query criteria + */ + GraphRequest.prototype.search = function (searchStr) { + this.urlComponents.oDataQueryParams.$search = searchStr; + return this; + }; + /** + * @public + * To add number for top OData Query param. The request URL accepts only one $top Odata Query option and its value is set to the most recently passed number value. + * @param {number} n - The number value + * @returns The same GraphRequest instance that is being called with, after adding the number for $top query + */ + GraphRequest.prototype.top = function (n) { + this.urlComponents.oDataQueryParams.$top = n; + return this; + }; + /** + * @public + * To add number for skip OData Query param. The request URL accepts only one $skip Odata Query option and its value is set to the most recently passed number value. + * @param {number} n - The number value + * @returns The same GraphRequest instance that is being called with, after adding the number for the $skip query + */ + GraphRequest.prototype.skip = function (n) { + this.urlComponents.oDataQueryParams.$skip = n; + return this; + }; + /** + * @public + * To add token string for skipToken OData Query param. The request URL accepts only one $skipToken Odata Query option and its value is set to the most recently passed token value. + * @param {string} token - The token value + * @returns The same GraphRequest instance that is being called with, after adding the token string for $skipToken query option + */ + GraphRequest.prototype.skipToken = function (token) { + this.urlComponents.oDataQueryParams.$skipToken = token; + return this; + }; + /** + * @public + * To add boolean for count OData Query param. The URL accepts only one $count Odata Query option and its value is set to the most recently passed boolean value. + * @param {boolean} isCount - The count boolean + * @returns The same GraphRequest instance that is being called with, after adding the boolean value for the $count query option + */ + GraphRequest.prototype.count = function (isCount) { + if (isCount === void 0) { isCount = true; } + this.urlComponents.oDataQueryParams.$count = isCount.toString(); + return this; + }; + /** + * @public + * Appends query string to the urlComponent + * @param {string|KeyValuePairObjectStringNumber} queryDictionaryOrString - The query value + * @returns The same GraphRequest instance that is being called with, after appending the query string to the url component + */ + /* + * Accepts .query("displayName=xyz") + * and .select({ name: "value" }) + */ + GraphRequest.prototype.query = function (queryDictionaryOrString) { + return this.parseQueryParameter(queryDictionaryOrString); + }; + /** + * @public + * @async + * Makes a http request with GET method + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the get response + */ + GraphRequest.prototype.get = function (callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, options, response; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = this.buildFullUrl(); + options = { + method: RequestMethod_1.RequestMethod.GET, + }; + return [4 /*yield*/, this.send(url, options, callback)]; + case 1: + response = _a.sent(); + return [2 /*return*/, response]; + } + }); + }); + }; + /** + * @public + * @async + * Makes a http request with POST method + * @param {any} content - The content that needs to be sent with the request + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the post response + */ + GraphRequest.prototype.post = function (content, callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, options, className; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = this.buildFullUrl(); + options = { + method: RequestMethod_1.RequestMethod.POST, + body: (0, GraphRequestUtil_1.serializeContent)(content), + }; + className = content && content.constructor && content.constructor.name; + if (className === "FormData") { + // Content-Type headers should not be specified in case the of FormData type content + options.headers = {}; + } + else { + this.setHeaderContentType(); + options.headers = this._headers; + } + return [4 /*yield*/, this.send(url, options, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Alias for Post request call + * @param {any} content - The content that needs to be sent with the request + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the post response + */ + GraphRequest.prototype.create = function (content, callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.post(content, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Makes http request with PUT method + * @param {any} content - The content that needs to be sent with the request + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the put response + */ + GraphRequest.prototype.put = function (content, callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, options; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = this.buildFullUrl(); + this.setHeaderContentType(); + options = { + method: RequestMethod_1.RequestMethod.PUT, + body: (0, GraphRequestUtil_1.serializeContent)(content), + }; + return [4 /*yield*/, this.send(url, options, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Makes http request with PATCH method + * @param {any} content - The content that needs to be sent with the request + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the patch response + */ + GraphRequest.prototype.patch = function (content, callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, options; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = this.buildFullUrl(); + this.setHeaderContentType(); + options = { + method: RequestMethod_1.RequestMethod.PATCH, + body: (0, GraphRequestUtil_1.serializeContent)(content), + }; + return [4 /*yield*/, this.send(url, options, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Alias for PATCH request + * @param {any} content - The content that needs to be sent with the request + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the patch response + */ + GraphRequest.prototype.update = function (content, callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.patch(content, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Makes http request with DELETE method + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the delete response + */ + GraphRequest.prototype.delete = function (callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, options; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = this.buildFullUrl(); + options = { + method: RequestMethod_1.RequestMethod.DELETE, + }; + return [4 /*yield*/, this.send(url, options, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Alias for delete request call + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the delete response + */ + GraphRequest.prototype.del = function (callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.delete(callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Makes a http request with GET method to read response as a stream. + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the getStream response + */ + GraphRequest.prototype.getStream = function (callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, options; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = this.buildFullUrl(); + options = { + method: RequestMethod_1.RequestMethod.GET, + }; + this.responseType(ResponseType_1.ResponseType.STREAM); + return [4 /*yield*/, this.send(url, options, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Makes a http request with GET method to read response as a stream. + * @param {any} stream - The stream instance + * @param {GraphRequestCallback} [callback] - The callback function to be called in response with async call + * @returns A promise that resolves to the putStream response + */ + GraphRequest.prototype.putStream = function (stream, callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, options; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = this.buildFullUrl(); + options = { + method: RequestMethod_1.RequestMethod.PUT, + headers: { + "Content-Type": "application/octet-stream", + }, + body: stream, + }; + return [4 /*yield*/, this.send(url, options, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + return GraphRequest; +}()); +exports.GraphRequest = GraphRequest; +//# sourceMappingURL=GraphRequest.js.map + +/***/ }), + +/***/ 7362: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isCustomHost = exports.isGraphURL = exports.serializeContent = exports.urlJoin = exports.oDataQueryNames = void 0; +/** + * @module GraphRequestUtil + */ +var Constants_1 = __nccwpck_require__(5710); +var GraphClientError_1 = __nccwpck_require__(4896); +/** + * To hold list of OData query params + */ +exports.oDataQueryNames = ["$select", "$expand", "$orderby", "$filter", "$top", "$skip", "$skipToken", "$count"]; +/** + * To construct the URL by appending the segments with "/" + * @param {string[]} urlSegments - The array of strings + * @returns The constructed URL string + */ +var urlJoin = function (urlSegments) { + var removePostSlash = function (s) { return s.replace(/\/+$/, ""); }; + var removePreSlash = function (s) { return s.replace(/^\/+/, ""); }; + var joiner = function (pre, cur) { return [removePostSlash(pre), removePreSlash(cur)].join("/"); }; + var parts = Array.prototype.slice.call(urlSegments); + return parts.reduce(joiner); +}; +exports.urlJoin = urlJoin; +/** + * Serializes the content + * @param {any} content - The content value that needs to be serialized + * @returns The serialized content + * + * Note: + * This conversion is required due to the following reasons: + * Body parameter of Request method of isomorphic-fetch only accepts Blob, ArrayBuffer, FormData, TypedArrays string. + * Node.js platform does not support Blob, FormData. Javascript File object inherits from Blob so it is also not supported in node. Therefore content of type Blob, File, FormData will only come from browsers. + * Parallel to ArrayBuffer in javascript, node provides Buffer interface. Node's Buffer is able to send the arbitrary binary data to the server successfully for both Browser and Node platform. Whereas sending binary data via ArrayBuffer or TypedArrays was only possible using Browser. To support both Node and Browser, `serializeContent` converts TypedArrays or ArrayBuffer to `Node Buffer`. + * If the data received is in JSON format, `serializeContent` converts the JSON to string. + */ +var serializeContent = function (content) { + var className = content && content.constructor && content.constructor.name; + if (className === "Buffer" || className === "Blob" || className === "File" || className === "FormData" || typeof content === "string") { + return content; + } + if (className === "ArrayBuffer") { + content = Buffer.from(content); + } + else if (className === "Int8Array" || className === "Int16Array" || className === "Int32Array" || className === "Uint8Array" || className === "Uint16Array" || className === "Uint32Array" || className === "Uint8ClampedArray" || className === "Float32Array" || className === "Float64Array" || className === "DataView") { + content = Buffer.from(content.buffer); + } + else { + try { + content = JSON.stringify(content); + } + catch (error) { + throw new Error("Unable to stringify the content"); + } + } + return content; +}; +exports.serializeContent = serializeContent; +/** + * Checks if the url is one of the service root endpoints for Microsoft Graph and Graph Explorer. + * @param {string} url - The url to be verified + * @returns {boolean} - Returns true if the url is a Graph URL + */ +var isGraphURL = function (url) { + return isValidEndpoint(url); +}; +exports.isGraphURL = isGraphURL; +/** + * Checks if the url is for one of the custom hosts provided during client initialization + * @param {string} url - The url to be verified + * @param {Set} customHosts - The url to be verified + * @returns {boolean} - Returns true if the url is a for a custom host + */ +var isCustomHost = function (url, customHosts) { + customHosts.forEach(function (host) { return isCustomHostValid(host); }); + return isValidEndpoint(url, customHosts); +}; +exports.isCustomHost = isCustomHost; +/** + * Checks if the url is for one of the provided hosts. + * @param {string} url - The url to be verified + * @param {Set} allowedHosts - A set of hosts. + * @returns {boolean} - Returns true is for one of the provided endpoints. + */ +var isValidEndpoint = function (url, allowedHosts) { + if (allowedHosts === void 0) { allowedHosts = Constants_1.GRAPH_URLS; } + // Valid Graph URL pattern - https://graph.microsoft.com/{version}/{resource}?{query-parameters} + // Valid Graph URL example - https://graph.microsoft.com/v1.0/ + url = url.toLowerCase(); + if (url.indexOf("https://") !== -1) { + url = url.replace("https://", ""); + // Find where the host ends + var startofPortNoPos = url.indexOf(":"); + var endOfHostStrPos = url.indexOf("/"); + var hostName = ""; + if (endOfHostStrPos !== -1) { + if (startofPortNoPos !== -1 && startofPortNoPos < endOfHostStrPos) { + hostName = url.substring(0, startofPortNoPos); + return allowedHosts.has(hostName); + } + // Parse out the host + hostName = url.substring(0, endOfHostStrPos); + return allowedHosts.has(hostName); + } + } + return false; +}; +/** + * Throws error if the string is not a valid host/hostname and contains other url parts. + * @param {string} host - The host to be verified + */ +var isCustomHostValid = function (host) { + if (host.indexOf("/") !== -1) { + throw new GraphClientError_1.GraphClientError("Please add only hosts or hostnames to the CustomHosts config. If the url is `http://example.com:3000/`, host is `example:3000`"); + } +}; +//# sourceMappingURL=GraphRequestUtil.js.map + +/***/ }), + +/***/ 7878: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GraphResponseHandler = exports.DocumentType = void 0; +var tslib_1 = __nccwpck_require__(1860); +var ResponseType_1 = __nccwpck_require__(3708); +/** + * @enum + * Enum for document types + * @property {string} TEXT_HTML - The text/html content type + * @property {string} TEXT_XML - The text/xml content type + * @property {string} APPLICATION_XML - The application/xml content type + * @property {string} APPLICATION_XHTML - The application/xhml+xml content type + */ +var DocumentType; +(function (DocumentType) { + DocumentType["TEXT_HTML"] = "text/html"; + DocumentType["TEXT_XML"] = "text/xml"; + DocumentType["APPLICATION_XML"] = "application/xml"; + DocumentType["APPLICATION_XHTML"] = "application/xhtml+xml"; +})(DocumentType || (exports.DocumentType = DocumentType = {})); +/** + * @enum + * Enum for Content types + * @property {string} TEXT_PLAIN - The text/plain content type + * @property {string} APPLICATION_JSON - The application/json content type + */ +var ContentType; +(function (ContentType) { + ContentType["TEXT_PLAIN"] = "text/plain"; + ContentType["APPLICATION_JSON"] = "application/json"; +})(ContentType || (ContentType = {})); +/** + * @enum + * Enum for Content type regex + * @property {string} DOCUMENT - The regex to match document content types + * @property {string} IMAGE - The regex to match image content types + */ +var ContentTypeRegexStr; +(function (ContentTypeRegexStr) { + ContentTypeRegexStr["DOCUMENT"] = "^(text\\/(html|xml))|(application\\/(xml|xhtml\\+xml))$"; + ContentTypeRegexStr["IMAGE"] = "^image\\/.+"; +})(ContentTypeRegexStr || (ContentTypeRegexStr = {})); +/** + * @class + * Class for GraphResponseHandler + */ +var GraphResponseHandler = /** @class */ (function () { + function GraphResponseHandler() { + } + /** + * @private + * @static + * To parse Document response + * @param {Response} rawResponse - The response object + * @param {DocumentType} type - The type to which the document needs to be parsed + * @returns A promise that resolves to a document content + */ + GraphResponseHandler.parseDocumentResponse = function (rawResponse, type) { + if (typeof DOMParser !== "undefined") { + return new Promise(function (resolve, reject) { + rawResponse.text().then(function (xmlString) { + try { + var parser = new DOMParser(); + var xmlDoc = parser.parseFromString(xmlString, type); + resolve(xmlDoc); + } + catch (error) { + reject(error); + } + }); + }); + } + else { + return Promise.resolve(rawResponse.body); + } + }; + /** + * @private + * @static + * @async + * To convert the native Response to response content + * @param {Response} rawResponse - The response object + * @param {ResponseType} [responseType] - The response type value + * @returns A promise that resolves to the converted response content + */ + GraphResponseHandler.convertResponse = function (rawResponse, responseType) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var responseValue, contentType, _a, mimeType; + return tslib_1.__generator(this, function (_b) { + switch (_b.label) { + case 0: + if (rawResponse.status === 204) { + // NO CONTENT + return [2 /*return*/, Promise.resolve()]; + } + contentType = rawResponse.headers.get("Content-type"); + _a = responseType; + switch (_a) { + case ResponseType_1.ResponseType.ARRAYBUFFER: return [3 /*break*/, 1]; + case ResponseType_1.ResponseType.BLOB: return [3 /*break*/, 3]; + case ResponseType_1.ResponseType.DOCUMENT: return [3 /*break*/, 5]; + case ResponseType_1.ResponseType.JSON: return [3 /*break*/, 7]; + case ResponseType_1.ResponseType.STREAM: return [3 /*break*/, 9]; + case ResponseType_1.ResponseType.TEXT: return [3 /*break*/, 11]; + } + return [3 /*break*/, 13]; + case 1: return [4 /*yield*/, rawResponse.arrayBuffer()]; + case 2: + responseValue = _b.sent(); + return [3 /*break*/, 24]; + case 3: return [4 /*yield*/, rawResponse.blob()]; + case 4: + responseValue = _b.sent(); + return [3 /*break*/, 24]; + case 5: return [4 /*yield*/, GraphResponseHandler.parseDocumentResponse(rawResponse, DocumentType.TEXT_XML)]; + case 6: + responseValue = _b.sent(); + return [3 /*break*/, 24]; + case 7: return [4 /*yield*/, rawResponse.json()]; + case 8: + responseValue = _b.sent(); + return [3 /*break*/, 24]; + case 9: return [4 /*yield*/, Promise.resolve(rawResponse.body)]; + case 10: + responseValue = _b.sent(); + return [3 /*break*/, 24]; + case 11: return [4 /*yield*/, rawResponse.text()]; + case 12: + responseValue = _b.sent(); + return [3 /*break*/, 24]; + case 13: + if (!(contentType !== null)) return [3 /*break*/, 22]; + mimeType = contentType.split(";")[0]; + if (!new RegExp(ContentTypeRegexStr.DOCUMENT).test(mimeType)) return [3 /*break*/, 15]; + return [4 /*yield*/, GraphResponseHandler.parseDocumentResponse(rawResponse, mimeType)]; + case 14: + responseValue = _b.sent(); + return [3 /*break*/, 21]; + case 15: + if (!new RegExp(ContentTypeRegexStr.IMAGE).test(mimeType)) return [3 /*break*/, 16]; + responseValue = rawResponse.blob(); + return [3 /*break*/, 21]; + case 16: + if (!(mimeType === ContentType.TEXT_PLAIN)) return [3 /*break*/, 18]; + return [4 /*yield*/, rawResponse.text()]; + case 17: + responseValue = _b.sent(); + return [3 /*break*/, 21]; + case 18: + if (!(mimeType === ContentType.APPLICATION_JSON)) return [3 /*break*/, 20]; + return [4 /*yield*/, rawResponse.json()]; + case 19: + responseValue = _b.sent(); + return [3 /*break*/, 21]; + case 20: + responseValue = Promise.resolve(rawResponse.body); + _b.label = 21; + case 21: return [3 /*break*/, 23]; + case 22: + /** + * RFC specification {@link https://tools.ietf.org/html/rfc7231#section-3.1.1.5} says: + * A sender that generates a message containing a payload body SHOULD + * generate a Content-Type header field in that message unless the + * intended media type of the enclosed representation is unknown to the + * sender. If a Content-Type header field is not present, the recipient + * MAY either assume a media type of "application/octet-stream" + * ([RFC2046], Section 4.5.1) or examine the data to determine its type. + * + * So assuming it as a stream type so returning the body. + */ + responseValue = Promise.resolve(rawResponse.body); + _b.label = 23; + case 23: return [3 /*break*/, 24]; + case 24: return [2 /*return*/, responseValue]; + } + }); + }); + }; + /** + * @public + * @static + * @async + * To get the parsed response + * @param {Response} rawResponse - The response object + * @param {ResponseType} [responseType] - The response type value + * @param {GraphRequestCallback} [callback] - The graph request callback function + * @returns The parsed response + */ + GraphResponseHandler.getResponse = function (rawResponse, responseType, callback) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var response; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(responseType === ResponseType_1.ResponseType.RAW)) return [3 /*break*/, 1]; + return [2 /*return*/, Promise.resolve(rawResponse)]; + case 1: return [4 /*yield*/, GraphResponseHandler.convertResponse(rawResponse, responseType)]; + case 2: + response = _a.sent(); + if (rawResponse.ok) { + // Status Code 2XX + if (typeof callback === "function") { + callback(null, response); + } + else { + return [2 /*return*/, response]; + } + } + else { + // NOT OK Response + throw response; + } + _a.label = 3; + case 3: return [2 /*return*/]; + } + }); + }); + }; + return GraphResponseHandler; +}()); +exports.GraphResponseHandler = GraphResponseHandler; +//# sourceMappingURL=GraphResponseHandler.js.map + +/***/ }), + +/***/ 8052: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.HTTPClient = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @class + * Class representing HTTPClient + */ +var HTTPClient = /** @class */ (function () { + /** + * @public + * @constructor + * Creates an instance of a HTTPClient + * @param {...Middleware} middleware - The first middleware of the middleware chain or a sequence of all the Middleware handlers + */ + function HTTPClient() { + var middleware = []; + for (var _i = 0; _i < arguments.length; _i++) { + middleware[_i] = arguments[_i]; + } + if (!middleware || !middleware.length) { + var error = new Error(); + error.name = "InvalidMiddlewareChain"; + error.message = "Please provide a default middleware chain or custom middleware chain"; + throw error; + } + this.setMiddleware.apply(this, middleware); + } + /** + * @private + * Processes the middleware parameter passed to set this.middleware property + * The calling function should validate if middleware is not undefined or not empty. + * @param {...Middleware} middleware - The middleware passed + * @returns Nothing + */ + HTTPClient.prototype.setMiddleware = function () { + var middleware = []; + for (var _i = 0; _i < arguments.length; _i++) { + middleware[_i] = arguments[_i]; + } + if (middleware.length > 1) { + this.parseMiddleWareArray(middleware); + } + else { + this.middleware = middleware[0]; + } + }; + /** + * @private + * Processes the middleware array to construct the chain + * and sets this.middleware property to the first middleware handler of the array + * The calling function should validate if middleware is not undefined or not empty + * @param {Middleware[]} middlewareArray - The array of middleware handlers + * @returns Nothing + */ + HTTPClient.prototype.parseMiddleWareArray = function (middlewareArray) { + middlewareArray.forEach(function (element, index) { + if (index < middlewareArray.length - 1) { + element.setNext(middlewareArray[index + 1]); + } + }); + this.middleware = middlewareArray[0]; + }; + /** + * @public + * @async + * To send the request through the middleware chain + * @param {Context} context - The context of a request + * @returns A promise that resolves to the Context + */ + HTTPClient.prototype.sendRequest = function (context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var error; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + if (typeof context.request === "string" && context.options === undefined) { + error = new Error(); + error.name = "InvalidRequestOptions"; + error.message = "Unable to execute the middleware, Please provide valid options for a request"; + throw error; + } + return [4 /*yield*/, this.middleware.execute(context)]; + case 1: + _a.sent(); + return [2 /*return*/, context]; + } + }); + }); + }; + return HTTPClient; +}()); +exports.HTTPClient = HTTPClient; +//# sourceMappingURL=HTTPClient.js.map + +/***/ }), + +/***/ 5656: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.HTTPClientFactory = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module HTTPClientFactory + */ +var HTTPClient_1 = __nccwpck_require__(8052); +var AuthenticationHandler_1 = __nccwpck_require__(1060); +var HTTPMessageHandler_1 = __nccwpck_require__(3087); +var RedirectHandlerOptions_1 = __nccwpck_require__(1035); +var RetryHandlerOptions_1 = __nccwpck_require__(3881); +var RedirectHandler_1 = __nccwpck_require__(1012); +var RetryHandler_1 = __nccwpck_require__(980); +var TelemetryHandler_1 = __nccwpck_require__(8083); +/** + * @private + * To check whether the environment is node or not + * @returns A boolean representing the environment is node or not + */ +var isNodeEnvironment = function () { + return typeof process === "object" && "function" === "function"; +}; +/** + * @class + * Class representing HTTPClientFactory + */ +var HTTPClientFactory = /** @class */ (function () { + function HTTPClientFactory() { + } + /** + * @public + * @static + * Creates HTTPClient with default middleware chain + * @param {AuthenticationProvider} authProvider - The authentication provider instance + * @returns A HTTPClient instance + * + * NOTE: These are the things that we need to remember while doing modifications in the below default pipeline. + * * HTTPMessageHandler should be the last one in the middleware pipeline, because this makes the actual network call of the request + * * TelemetryHandler should be the one prior to the last middleware in the chain, because this is the one which actually collects and appends the usage flag and placing this handler * before making the actual network call ensures that the usage of all features are recorded in the flag. + * * The best place for AuthenticationHandler is in the starting of the pipeline, because every other handler might have to work for multiple times for a request but the auth token for + * them will remain same. For example, Retry and Redirect handlers might be working multiple times for a request based on the response but their auth token would remain same. + */ + HTTPClientFactory.createWithAuthenticationProvider = function (authProvider) { + var authenticationHandler = new AuthenticationHandler_1.AuthenticationHandler(authProvider); + var retryHandler = new RetryHandler_1.RetryHandler(new RetryHandlerOptions_1.RetryHandlerOptions()); + var telemetryHandler = new TelemetryHandler_1.TelemetryHandler(); + var httpMessageHandler = new HTTPMessageHandler_1.HTTPMessageHandler(); + authenticationHandler.setNext(retryHandler); + if (isNodeEnvironment()) { + var redirectHandler = new RedirectHandler_1.RedirectHandler(new RedirectHandlerOptions_1.RedirectHandlerOptions()); + retryHandler.setNext(redirectHandler); + redirectHandler.setNext(telemetryHandler); + } + else { + retryHandler.setNext(telemetryHandler); + } + telemetryHandler.setNext(httpMessageHandler); + return HTTPClientFactory.createWithMiddleware(authenticationHandler); + }; + /** + * @public + * @static + * Creates a middleware chain with the given one + * @property {...Middleware} middleware - The first middleware of the middleware chain or a sequence of all the Middleware handlers + * @returns A HTTPClient instance + */ + HTTPClientFactory.createWithMiddleware = function () { + var middleware = []; + for (var _i = 0; _i < arguments.length; _i++) { + middleware[_i] = arguments[_i]; + } + // Middleware should not empty or undefined. This is check is present in the HTTPClient constructor. + return new (HTTPClient_1.HTTPClient.bind.apply(HTTPClient_1.HTTPClient, tslib_1.__spreadArray([void 0], middleware, false)))(); + }; + return HTTPClientFactory; +}()); +exports.HTTPClientFactory = HTTPClientFactory; +//# sourceMappingURL=HTTPClientFactory.js.map + +/***/ }), + +/***/ 4323: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RequestMethod = void 0; +/** + * @enum + * Enum for RequestMethods + * @property {string} GET - The get request type + * @property {string} PATCH - The patch request type + * @property {string} POST - The post request type + * @property {string} PUT - The put request type + * @property {string} DELETE - The delete request type + */ +var RequestMethod; +(function (RequestMethod) { + RequestMethod["GET"] = "GET"; + RequestMethod["PATCH"] = "PATCH"; + RequestMethod["POST"] = "POST"; + RequestMethod["PUT"] = "PUT"; + RequestMethod["DELETE"] = "DELETE"; +})(RequestMethod || (exports.RequestMethod = RequestMethod = {})); +//# sourceMappingURL=RequestMethod.js.map + +/***/ }), + +/***/ 3708: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ResponseType = void 0; +/** + * @enum + * Enum for ResponseType values + * @property {string} ARRAYBUFFER - To download response content as an [ArrayBuffer]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer} + * @property {string} BLOB - To download content as a [binary/blob] {@link https://developer.mozilla.org/en-US/docs/Web/API/Blob} + * @property {string} DOCUMENT - This downloads content as a document or stream + * @property {string} JSON - To download response content as a json + * @property {string} STREAM - To download response as a [stream]{@link https://nodejs.org/api/stream.html} + * @property {string} TEXT - For downloading response as a text + */ +var ResponseType; +(function (ResponseType) { + ResponseType["ARRAYBUFFER"] = "arraybuffer"; + ResponseType["BLOB"] = "blob"; + ResponseType["DOCUMENT"] = "document"; + ResponseType["JSON"] = "json"; + ResponseType["RAW"] = "raw"; + ResponseType["STREAM"] = "stream"; + ResponseType["TEXT"] = "text"; +})(ResponseType || (exports.ResponseType = ResponseType = {})); +//# sourceMappingURL=ResponseType.js.map + +/***/ }), + +/***/ 4580: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.validatePolyFilling = void 0; +/** + * @constant + * @function + * Validates availability of Promise and fetch in global context + * @returns The true in case the Promise and fetch available, otherwise throws error + */ +var validatePolyFilling = function () { + if (typeof Promise === "undefined" && typeof fetch === "undefined") { + var error = new Error("Library cannot function without Promise and fetch. So, please provide polyfill for them."); + error.name = "PolyFillNotAvailable"; + throw error; + } + else if (typeof Promise === "undefined") { + var error = new Error("Library cannot function without Promise. So, please provide polyfill for it."); + error.name = "PolyFillNotAvailable"; + throw error; + } + else if (typeof fetch === "undefined") { + var error = new Error("Library cannot function without fetch. So, please provide polyfill for it."); + error.name = "PolyFillNotAvailable"; + throw error; + } + return true; +}; +exports.validatePolyFilling = validatePolyFilling; +//# sourceMappingURL=ValidatePolyFilling.js.map + +/***/ }), + +/***/ 9731: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PACKAGE_VERSION = void 0; +// THIS FILE IS AUTO GENERATED +// ANY CHANGES WILL BE LOST DURING BUILD +/** + * @module Version + */ +exports.PACKAGE_VERSION = "3.0.7"; +//# sourceMappingURL=Version.js.map + +/***/ }), + +/***/ 8136: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +//# sourceMappingURL=ITokenCredentialAuthenticationProviderOptions.js.map + +/***/ }), + +/***/ 2992: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TokenCredentialAuthenticationProvider = void 0; +var tslib_1 = __nccwpck_require__(1860); +var GraphClientError_1 = __nccwpck_require__(4896); +/** + * @module TokenCredentialAuthenticationProvider + */ +/** + * @class + * Class representing TokenCredentialAuthenticationProvider + * This feature is introduced in Version 3.0.0 + * @extends AuthenticationProvider + * Reference - https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/identity/identity/README.md + */ +var TokenCredentialAuthenticationProvider = /** @class */ (function () { + /** + * @public + * @constructor + * Creates an instance of TokenCredentialAuthenticationProvider + * @param {TokenCredential} tokenCredential - An instance of @azure/identity TokenCredential + * @param {TokenCredentialAuthenticationProviderOptions} authenticationProviderOptions - An instance of TokenCredentialAuthenticationProviderOptions + * @returns An instance of TokenCredentialAuthenticationProvider + */ + function TokenCredentialAuthenticationProvider(tokenCredential, authenticationProviderOptions) { + if (!tokenCredential) { + throw new GraphClientError_1.GraphClientError("Please pass a token credential object to the TokenCredentialAuthenticationProvider class constructor"); + } + if (!authenticationProviderOptions) { + throw new GraphClientError_1.GraphClientError("Please pass the TokenCredentialAuthenticationProviderOptions with scopes to the TokenCredentialAuthenticationProvider class constructor"); + } + this.authenticationProviderOptions = authenticationProviderOptions; + this.tokenCredential = tokenCredential; + } + /** + * @public + * @async + * To get the access token + * @param {TokenCredentialAuthenticationProviderOptions} authenticationProviderOptions - The authentication provider options object + * @returns The promise that resolves to an access token + */ + TokenCredentialAuthenticationProvider.prototype.getAccessToken = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var scopes, error, response; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + scopes = this.authenticationProviderOptions.scopes; + error = new GraphClientError_1.GraphClientError(); + if (!scopes || scopes.length === 0) { + error.name = "Empty Scopes"; + error.message = "Scopes cannot be empty, Please provide scopes"; + throw error; + } + return [4 /*yield*/, this.tokenCredential.getToken(scopes, this.authenticationProviderOptions.getTokenOptions)]; + case 1: + response = _a.sent(); + if (response) { + return [2 /*return*/, response.token]; + } + error.message = "Cannot retrieve accessToken from the Token Credential object"; + error.name = "Access token is undefined"; + throw error; + } + }); + }); + }; + return TokenCredentialAuthenticationProvider; +}()); +exports.TokenCredentialAuthenticationProvider = TokenCredentialAuthenticationProvider; +//# sourceMappingURL=TokenCredentialAuthenticationProvider.js.map + +/***/ }), + +/***/ 5999: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BatchRequestContent = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module BatchRequestContent + */ +var RequestMethod_1 = __nccwpck_require__(4323); +/** + * @class + * Class for handling BatchRequestContent + */ +var BatchRequestContent = /** @class */ (function () { + /** + * @public + * @constructor + * Constructs a BatchRequestContent instance + * @param {BatchRequestStep[]} [requests] - Array of requests value + * @returns An instance of a BatchRequestContent + */ + function BatchRequestContent(requests) { + this.requests = new Map(); + if (typeof requests !== "undefined") { + var limit = BatchRequestContent.requestLimit; + if (requests.length > limit) { + var error = new Error("Maximum requests limit exceeded, Max allowed number of requests are ".concat(limit)); + error.name = "Limit Exceeded Error"; + throw error; + } + for (var _i = 0, requests_1 = requests; _i < requests_1.length; _i++) { + var req = requests_1[_i]; + this.addRequest(req); + } + } + } + /** + * @private + * @static + * Validates the dependency chain of the requests + * + * Note: + * Individual requests can depend on other individual requests. Currently, requests can only depend on a single other request, and must follow one of these three patterns: + * 1. Parallel - no individual request states a dependency in the dependsOn property. + * 2. Serial - all individual requests depend on the previous individual request. + * 3. Same - all individual requests that state a dependency in the dependsOn property, state the same dependency. + * As JSON batching matures, these limitations will be removed. + * @see {@link https://developer.microsoft.com/en-us/graph/docs/concepts/known_issues#json-batching} + * + * @param {Map} requests - The map of requests. + * @returns The boolean indicating the validation status + */ + BatchRequestContent.validateDependencies = function (requests) { + var isParallel = function (reqs) { + var iterator = reqs.entries(); + var cur = iterator.next(); + while (!cur.done) { + var curReq = cur.value[1]; + if (curReq.dependsOn !== undefined && curReq.dependsOn.length > 0) { + return false; + } + cur = iterator.next(); + } + return true; + }; + var isSerial = function (reqs) { + var iterator = reqs.entries(); + var cur = iterator.next(); + var firstRequest = cur.value[1]; + if (firstRequest.dependsOn !== undefined && firstRequest.dependsOn.length > 0) { + return false; + } + var prev = cur; + cur = iterator.next(); + while (!cur.done) { + var curReq = cur.value[1]; + if (curReq.dependsOn === undefined || curReq.dependsOn.length !== 1 || curReq.dependsOn[0] !== prev.value[1].id) { + return false; + } + prev = cur; + cur = iterator.next(); + } + return true; + }; + var isSame = function (reqs) { + var iterator = reqs.entries(); + var cur = iterator.next(); + var firstRequest = cur.value[1]; + var dependencyId; + if (firstRequest.dependsOn === undefined || firstRequest.dependsOn.length === 0) { + dependencyId = firstRequest.id; + } + else { + if (firstRequest.dependsOn.length === 1) { + var fDependencyId = firstRequest.dependsOn[0]; + if (fDependencyId !== firstRequest.id && reqs.has(fDependencyId)) { + dependencyId = fDependencyId; + } + else { + return false; + } + } + else { + return false; + } + } + cur = iterator.next(); + while (!cur.done) { + var curReq = cur.value[1]; + if ((curReq.dependsOn === undefined || curReq.dependsOn.length === 0) && dependencyId !== curReq.id) { + return false; + } + if (curReq.dependsOn !== undefined && curReq.dependsOn.length !== 0) { + if (curReq.dependsOn.length === 1 && (curReq.id === dependencyId || curReq.dependsOn[0] !== dependencyId)) { + return false; + } + if (curReq.dependsOn.length > 1) { + return false; + } + } + cur = iterator.next(); + } + return true; + }; + if (requests.size === 0) { + var error = new Error("Empty requests map, Please provide at least one request."); + error.name = "Empty Requests Error"; + throw error; + } + return isParallel(requests) || isSerial(requests) || isSame(requests); + }; + /** + * @private + * @static + * @async + * Converts Request Object instance to a JSON + * @param {IsomorphicRequest} request - The IsomorphicRequest Object instance + * @returns A promise that resolves to JSON representation of a request + */ + BatchRequestContent.getRequestData = function (request) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var requestData, hasHttpRegex, headers, _a; + return tslib_1.__generator(this, function (_b) { + switch (_b.label) { + case 0: + requestData = { + url: "", + }; + hasHttpRegex = new RegExp("^https?://"); + // Stripping off hostname, port and url scheme + requestData.url = hasHttpRegex.test(request.url) ? "/" + request.url.split(/.*?\/\/.*?\//)[1] : request.url; + requestData.method = request.method; + headers = {}; + request.headers.forEach(function (value, key) { + headers[key] = value; + }); + if (Object.keys(headers).length) { + requestData.headers = headers; + } + if (!(request.method === RequestMethod_1.RequestMethod.PATCH || request.method === RequestMethod_1.RequestMethod.POST || request.method === RequestMethod_1.RequestMethod.PUT)) return [3 /*break*/, 2]; + _a = requestData; + return [4 /*yield*/, BatchRequestContent.getRequestBody(request)]; + case 1: + _a.body = _b.sent(); + _b.label = 2; + case 2: + /** + * TODO: Check any other property needs to be used from the Request object and add them + */ + return [2 /*return*/, requestData]; + } + }); + }); + }; + /** + * @private + * @static + * @async + * Gets the body of a Request object instance + * @param {IsomorphicRequest} request - The IsomorphicRequest object instance + * @returns The Promise that resolves to a body value of a Request + */ + BatchRequestContent.getRequestBody = function (request) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var bodyParsed, body, cloneReq, e_1, blob_1, reader_1, buffer, e_2; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + bodyParsed = false; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + cloneReq = request.clone(); + return [4 /*yield*/, cloneReq.json()]; + case 2: + body = _a.sent(); + bodyParsed = true; + return [3 /*break*/, 4]; + case 3: + e_1 = _a.sent(); + return [3 /*break*/, 4]; + case 4: + if (!!bodyParsed) return [3 /*break*/, 12]; + _a.label = 5; + case 5: + _a.trys.push([5, 11, , 12]); + if (!(typeof Blob !== "undefined")) return [3 /*break*/, 8]; + return [4 /*yield*/, request.blob()]; + case 6: + blob_1 = _a.sent(); + reader_1 = new FileReader(); + return [4 /*yield*/, new Promise(function (resolve) { + reader_1.addEventListener("load", function () { + var dataURL = reader_1.result; + /** + * Some valid dataURL schemes: + * 1. data:text/vnd-example+xyz;foo=bar;base64,R0lGODdh + * 2. data:text/plain;charset=UTF-8;page=21,the%20data:1234,5678 + * 3. data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg== + * 4. data:image/png,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg== + * 5. data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg== + * @see Syntax {@link https://en.wikipedia.org/wiki/Data_URI_scheme} for more + */ + var regex = new RegExp("^s*data:(.+?/.+?(;.+?=.+?)*)?(;base64)?,(.*)s*$"); + var segments = regex.exec(dataURL); + resolve(segments[4]); + }, false); + reader_1.readAsDataURL(blob_1); + })]; + case 7: + body = _a.sent(); + return [3 /*break*/, 10]; + case 8: + if (!(typeof Buffer !== "undefined")) return [3 /*break*/, 10]; + return [4 /*yield*/, request.buffer()]; + case 9: + buffer = _a.sent(); + body = buffer.toString("base64"); + _a.label = 10; + case 10: + bodyParsed = true; + return [3 /*break*/, 12]; + case 11: + e_2 = _a.sent(); + return [3 /*break*/, 12]; + case 12: return [2 /*return*/, body]; + } + }); + }); + }; + /** + * @public + * Adds a request to the batch request content + * @param {BatchRequestStep} request - The request value + * @returns The id of the added request + */ + BatchRequestContent.prototype.addRequest = function (request) { + var limit = BatchRequestContent.requestLimit; + if (request.id === "") { + var error = new Error("Id for a request is empty, Please provide an unique id"); + error.name = "Empty Id For Request"; + throw error; + } + if (this.requests.size === limit) { + var error = new Error("Maximum requests limit exceeded, Max allowed number of requests are ".concat(limit)); + error.name = "Limit Exceeded Error"; + throw error; + } + if (this.requests.has(request.id)) { + var error = new Error("Adding request with duplicate id ".concat(request.id, ", Make the id of the requests unique")); + error.name = "Duplicate RequestId Error"; + throw error; + } + this.requests.set(request.id, request); + return request.id; + }; + /** + * @public + * Removes request from the batch payload and its dependencies from all dependents + * @param {string} requestId - The id of a request that needs to be removed + * @returns The boolean indicating removed status + */ + BatchRequestContent.prototype.removeRequest = function (requestId) { + var deleteStatus = this.requests.delete(requestId); + var iterator = this.requests.entries(); + var cur = iterator.next(); + /** + * Removing dependencies where this request is present as a dependency + */ + while (!cur.done) { + var dependencies = cur.value[1].dependsOn; + if (typeof dependencies !== "undefined") { + var index = dependencies.indexOf(requestId); + if (index !== -1) { + dependencies.splice(index, 1); + } + if (dependencies.length === 0) { + delete cur.value[1].dependsOn; + } + } + cur = iterator.next(); + } + return deleteStatus; + }; + /** + * @public + * @async + * Serialize content from BatchRequestContent instance + * @returns The body content to make batch request + */ + BatchRequestContent.prototype.getContent = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var requests, requestBody, iterator, cur, error, error, requestStep, batchRequestData, error; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + requests = []; + requestBody = { + requests: requests, + }; + iterator = this.requests.entries(); + cur = iterator.next(); + if (cur.done) { + error = new Error("No requests added yet, Please add at least one request."); + error.name = "Empty Payload"; + throw error; + } + if (!BatchRequestContent.validateDependencies(this.requests)) { + error = new Error("Invalid dependency found, Dependency should be:\n1. Parallel - no individual request states a dependency in the dependsOn property.\n2. Serial - all individual requests depend on the previous individual request.\n3. Same - all individual requests that state a dependency in the dependsOn property, state the same dependency."); + error.name = "Invalid Dependency"; + throw error; + } + _a.label = 1; + case 1: + if (!!cur.done) return [3 /*break*/, 3]; + requestStep = cur.value[1]; + return [4 /*yield*/, BatchRequestContent.getRequestData(requestStep.request)]; + case 2: + batchRequestData = (_a.sent()); + /** + * @see{@https://tools.ietf.org/html/rfc7578#section-4.4} + * TODO- Setting/Defaulting of content-type header to the correct value + * @see {@link https://developer.microsoft.com/en-us/graph/docs/concepts/json_batching#request-format} + */ + if (batchRequestData.body !== undefined && (batchRequestData.headers === undefined || batchRequestData.headers["content-type"] === undefined)) { + error = new Error("Content-type header is not mentioned for request #".concat(requestStep.id, ", For request having body, Content-type header should be mentioned")); + error.name = "Invalid Content-type header"; + throw error; + } + batchRequestData.id = requestStep.id; + if (requestStep.dependsOn !== undefined && requestStep.dependsOn.length > 0) { + batchRequestData.dependsOn = requestStep.dependsOn; + } + requests.push(batchRequestData); + cur = iterator.next(); + return [3 /*break*/, 1]; + case 3: + requestBody.requests = requests; + return [2 /*return*/, requestBody]; + } + }); + }); + }; + /** + * @public + * Adds a dependency for a given dependent request + * @param {string} dependentId - The id of the dependent request + * @param {string} [dependencyId] - The id of the dependency request, if not specified the preceding request will be considered as a dependency + * @returns Nothing + */ + BatchRequestContent.prototype.addDependency = function (dependentId, dependencyId) { + if (!this.requests.has(dependentId)) { + var error = new Error("Dependent ".concat(dependentId, " does not exists, Please check the id")); + error.name = "Invalid Dependent"; + throw error; + } + if (typeof dependencyId !== "undefined" && !this.requests.has(dependencyId)) { + var error = new Error("Dependency ".concat(dependencyId, " does not exists, Please check the id")); + error.name = "Invalid Dependency"; + throw error; + } + if (typeof dependencyId !== "undefined") { + var dependent = this.requests.get(dependentId); + if (dependent.dependsOn === undefined) { + dependent.dependsOn = []; + } + if (dependent.dependsOn.indexOf(dependencyId) !== -1) { + var error = new Error("Dependency ".concat(dependencyId, " is already added for the request ").concat(dependentId)); + error.name = "Duplicate Dependency"; + throw error; + } + dependent.dependsOn.push(dependencyId); + } + else { + var iterator = this.requests.entries(); + var prev = void 0; + var cur = iterator.next(); + while (!cur.done && cur.value[1].id !== dependentId) { + prev = cur; + cur = iterator.next(); + } + if (typeof prev !== "undefined") { + var dId = prev.value[0]; + if (cur.value[1].dependsOn === undefined) { + cur.value[1].dependsOn = []; + } + if (cur.value[1].dependsOn.indexOf(dId) !== -1) { + var error = new Error("Dependency ".concat(dId, " is already added for the request ").concat(dependentId)); + error.name = "Duplicate Dependency"; + throw error; + } + cur.value[1].dependsOn.push(dId); + } + else { + var error = new Error("Can't add dependency ".concat(dependencyId, ", There is only a dependent request in the batch")); + error.name = "Invalid Dependency Addition"; + throw error; + } + } + }; + /** + * @public + * Removes a dependency for a given dependent request id + * @param {string} dependentId - The id of the dependent request + * @param {string} [dependencyId] - The id of the dependency request, if not specified will remove all the dependencies of that request + * @returns The boolean indicating removed status + */ + BatchRequestContent.prototype.removeDependency = function (dependentId, dependencyId) { + var request = this.requests.get(dependentId); + if (typeof request === "undefined" || request.dependsOn === undefined || request.dependsOn.length === 0) { + return false; + } + if (typeof dependencyId !== "undefined") { + var index = request.dependsOn.indexOf(dependencyId); + if (index === -1) { + return false; + } + request.dependsOn.splice(index, 1); + return true; + } + else { + delete request.dependsOn; + return true; + } + }; + /** + * @private + * @static + * Limit for number of requests {@link - https://developer.microsoft.com/en-us/graph/docs/concepts/known_issues#json-batching} + */ + BatchRequestContent.requestLimit = 20; + return BatchRequestContent; +}()); +exports.BatchRequestContent = BatchRequestContent; +//# sourceMappingURL=BatchRequestContent.js.map + +/***/ }), + +/***/ 7189: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BatchResponseContent = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @class + * Class that handles BatchResponseContent + */ +var BatchResponseContent = /** @class */ (function () { + /** + * @public + * @constructor + * Creates the BatchResponseContent instance + * @param {BatchResponseBody} response - The response body returned for batch request from server + * @returns An instance of a BatchResponseContent + */ + function BatchResponseContent(response) { + this.responses = new Map(); + this.update(response); + } + /** + * @private + * Creates native Response object from the json representation of it. + * @param {KeyValuePairObject} responseJSON - The response json value + * @returns The Response Object instance + */ + BatchResponseContent.prototype.createResponseObject = function (responseJSON) { + var body = responseJSON.body; + var options = {}; + options.status = responseJSON.status; + if (responseJSON.statusText !== undefined) { + options.statusText = responseJSON.statusText; + } + options.headers = responseJSON.headers; + if (options.headers !== undefined && options.headers["Content-Type"] !== undefined) { + if (options.headers["Content-Type"].split(";")[0] === "application/json") { + var bodyString = JSON.stringify(body); + return new Response(bodyString, options); + } + } + return new Response(body, options); + }; + /** + * @public + * Updates the Batch response content instance with given responses. + * @param {BatchResponseBody} response - The response json representing batch response message + * @returns Nothing + */ + BatchResponseContent.prototype.update = function (response) { + this.nextLink = response["@odata.nextLink"]; + var responses = response.responses; + for (var i = 0, l = responses.length; i < l; i++) { + this.responses.set(responses[i].id, this.createResponseObject(responses[i])); + } + }; + /** + * @public + * To get the response of a request for a given request id + * @param {string} requestId - The request id value + * @returns The Response object instance for the particular request + */ + BatchResponseContent.prototype.getResponseById = function (requestId) { + return this.responses.get(requestId); + }; + /** + * @public + * To get all the responses of the batch request + * @returns The Map of id and Response objects + */ + BatchResponseContent.prototype.getResponses = function () { + return this.responses; + }; + /** + * @public + * To get the iterator for the responses + * @returns The Iterable generator for the response objects + */ + BatchResponseContent.prototype.getResponsesIterator = function () { + var iterator, cur; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + iterator = this.responses.entries(); + cur = iterator.next(); + _a.label = 1; + case 1: + if (!!cur.done) return [3 /*break*/, 3]; + return [4 /*yield*/, cur.value]; + case 2: + _a.sent(); + cur = iterator.next(); + return [3 /*break*/, 1]; + case 3: return [2 /*return*/]; + } + }); + }; + return BatchResponseContent; +}()); +exports.BatchResponseContent = BatchResponseContent; +//# sourceMappingURL=BatchResponseContent.js.map + +/***/ }), + +/***/ 1899: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ResponseType = exports.GraphRequest = exports.GraphClientError = exports.GraphError = exports.CustomAuthenticationProvider = exports.Client = exports.PageIterator = exports.Range = exports.UploadResult = exports.FileUpload = exports.StreamUpload = exports.getValidRangeSize = exports.OneDriveLargeFileUploadTask = exports.LargeFileUploadTask = exports.ChaosHandler = exports.ChaosStrategy = exports.ChaosHandlerOptions = exports.TelemetryHandlerOptions = exports.FeatureUsageFlag = exports.RedirectHandlerOptions = exports.RetryHandlerOptions = exports.AuthenticationHandlerOptions = exports.MiddlewareFactory = exports.TelemetryHandler = exports.RedirectHandler = exports.RetryHandler = exports.HTTPMessageHandler = exports.AuthenticationHandler = exports.BatchResponseContent = exports.BatchRequestContent = void 0; +// eslint-disable-next-line @typescript-eslint/triple-slash-reference +/// +var BatchRequestContent_1 = __nccwpck_require__(5999); +Object.defineProperty(exports, "BatchRequestContent", ({ enumerable: true, get: function () { return BatchRequestContent_1.BatchRequestContent; } })); +var BatchResponseContent_1 = __nccwpck_require__(7189); +Object.defineProperty(exports, "BatchResponseContent", ({ enumerable: true, get: function () { return BatchResponseContent_1.BatchResponseContent; } })); +var AuthenticationHandler_1 = __nccwpck_require__(1060); +Object.defineProperty(exports, "AuthenticationHandler", ({ enumerable: true, get: function () { return AuthenticationHandler_1.AuthenticationHandler; } })); +var HTTPMessageHandler_1 = __nccwpck_require__(3087); +Object.defineProperty(exports, "HTTPMessageHandler", ({ enumerable: true, get: function () { return HTTPMessageHandler_1.HTTPMessageHandler; } })); +var RetryHandler_1 = __nccwpck_require__(980); +Object.defineProperty(exports, "RetryHandler", ({ enumerable: true, get: function () { return RetryHandler_1.RetryHandler; } })); +var RedirectHandler_1 = __nccwpck_require__(1012); +Object.defineProperty(exports, "RedirectHandler", ({ enumerable: true, get: function () { return RedirectHandler_1.RedirectHandler; } })); +var TelemetryHandler_1 = __nccwpck_require__(8083); +Object.defineProperty(exports, "TelemetryHandler", ({ enumerable: true, get: function () { return TelemetryHandler_1.TelemetryHandler; } })); +var MiddlewareFactory_1 = __nccwpck_require__(94); +Object.defineProperty(exports, "MiddlewareFactory", ({ enumerable: true, get: function () { return MiddlewareFactory_1.MiddlewareFactory; } })); +var AuthenticationHandlerOptions_1 = __nccwpck_require__(9963); +Object.defineProperty(exports, "AuthenticationHandlerOptions", ({ enumerable: true, get: function () { return AuthenticationHandlerOptions_1.AuthenticationHandlerOptions; } })); +var RetryHandlerOptions_1 = __nccwpck_require__(3881); +Object.defineProperty(exports, "RetryHandlerOptions", ({ enumerable: true, get: function () { return RetryHandlerOptions_1.RetryHandlerOptions; } })); +var RedirectHandlerOptions_1 = __nccwpck_require__(1035); +Object.defineProperty(exports, "RedirectHandlerOptions", ({ enumerable: true, get: function () { return RedirectHandlerOptions_1.RedirectHandlerOptions; } })); +var TelemetryHandlerOptions_1 = __nccwpck_require__(5988); +Object.defineProperty(exports, "FeatureUsageFlag", ({ enumerable: true, get: function () { return TelemetryHandlerOptions_1.FeatureUsageFlag; } })); +Object.defineProperty(exports, "TelemetryHandlerOptions", ({ enumerable: true, get: function () { return TelemetryHandlerOptions_1.TelemetryHandlerOptions; } })); +var ChaosHandlerOptions_1 = __nccwpck_require__(2247); +Object.defineProperty(exports, "ChaosHandlerOptions", ({ enumerable: true, get: function () { return ChaosHandlerOptions_1.ChaosHandlerOptions; } })); +var ChaosStrategy_1 = __nccwpck_require__(3148); +Object.defineProperty(exports, "ChaosStrategy", ({ enumerable: true, get: function () { return ChaosStrategy_1.ChaosStrategy; } })); +var ChaosHandler_1 = __nccwpck_require__(1058); +Object.defineProperty(exports, "ChaosHandler", ({ enumerable: true, get: function () { return ChaosHandler_1.ChaosHandler; } })); +var LargeFileUploadTask_1 = __nccwpck_require__(5755); +Object.defineProperty(exports, "LargeFileUploadTask", ({ enumerable: true, get: function () { return LargeFileUploadTask_1.LargeFileUploadTask; } })); +var OneDriveLargeFileUploadTask_1 = __nccwpck_require__(8139); +Object.defineProperty(exports, "OneDriveLargeFileUploadTask", ({ enumerable: true, get: function () { return OneDriveLargeFileUploadTask_1.OneDriveLargeFileUploadTask; } })); +var OneDriveLargeFileUploadTaskUtil_1 = __nccwpck_require__(8159); +Object.defineProperty(exports, "getValidRangeSize", ({ enumerable: true, get: function () { return OneDriveLargeFileUploadTaskUtil_1.getValidRangeSize; } })); +var StreamUpload_1 = __nccwpck_require__(136); +Object.defineProperty(exports, "StreamUpload", ({ enumerable: true, get: function () { return StreamUpload_1.StreamUpload; } })); +var FileUpload_1 = __nccwpck_require__(8242); +Object.defineProperty(exports, "FileUpload", ({ enumerable: true, get: function () { return FileUpload_1.FileUpload; } })); +var UploadResult_1 = __nccwpck_require__(5301); +Object.defineProperty(exports, "UploadResult", ({ enumerable: true, get: function () { return UploadResult_1.UploadResult; } })); +var Range_1 = __nccwpck_require__(7915); +Object.defineProperty(exports, "Range", ({ enumerable: true, get: function () { return Range_1.Range; } })); +var PageIterator_1 = __nccwpck_require__(1881); +Object.defineProperty(exports, "PageIterator", ({ enumerable: true, get: function () { return PageIterator_1.PageIterator; } })); +var Client_1 = __nccwpck_require__(2532); +Object.defineProperty(exports, "Client", ({ enumerable: true, get: function () { return Client_1.Client; } })); +var CustomAuthenticationProvider_1 = __nccwpck_require__(4177); +Object.defineProperty(exports, "CustomAuthenticationProvider", ({ enumerable: true, get: function () { return CustomAuthenticationProvider_1.CustomAuthenticationProvider; } })); +var GraphError_1 = __nccwpck_require__(7893); +Object.defineProperty(exports, "GraphError", ({ enumerable: true, get: function () { return GraphError_1.GraphError; } })); +var GraphClientError_1 = __nccwpck_require__(4896); +Object.defineProperty(exports, "GraphClientError", ({ enumerable: true, get: function () { return GraphClientError_1.GraphClientError; } })); +var GraphRequest_1 = __nccwpck_require__(7374); +Object.defineProperty(exports, "GraphRequest", ({ enumerable: true, get: function () { return GraphRequest_1.GraphRequest; } })); +var ResponseType_1 = __nccwpck_require__(3708); +Object.defineProperty(exports, "ResponseType", ({ enumerable: true, get: function () { return ResponseType_1.ResponseType; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 1060: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AuthenticationHandler = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module AuthenticationHandler + */ +var GraphRequestUtil_1 = __nccwpck_require__(7362); +var MiddlewareControl_1 = __nccwpck_require__(8153); +var MiddlewareUtil_1 = __nccwpck_require__(9514); +var AuthenticationHandlerOptions_1 = __nccwpck_require__(9963); +var TelemetryHandlerOptions_1 = __nccwpck_require__(5988); +/** + * @class + * @implements Middleware + * Class representing AuthenticationHandler + */ +var AuthenticationHandler = /** @class */ (function () { + /** + * @public + * @constructor + * Creates an instance of AuthenticationHandler + * @param {AuthenticationProvider} authenticationProvider - The authentication provider for the authentication handler + */ + function AuthenticationHandler(authenticationProvider) { + this.authenticationProvider = authenticationProvider; + } + /** + * @public + * @async + * To execute the current middleware + * @param {Context} context - The context object of the request + * @returns A Promise that resolves to nothing + */ + AuthenticationHandler.prototype.execute = function (context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, options, authenticationProvider, authenticationProviderOptions, token, bearerKey; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = typeof context.request === "string" ? context.request : context.request.url; + if (!((0, GraphRequestUtil_1.isGraphURL)(url) || (context.customHosts && (0, GraphRequestUtil_1.isCustomHost)(url, context.customHosts)))) return [3 /*break*/, 2]; + options = void 0; + if (context.middlewareControl instanceof MiddlewareControl_1.MiddlewareControl) { + options = context.middlewareControl.getMiddlewareOptions(AuthenticationHandlerOptions_1.AuthenticationHandlerOptions); + } + authenticationProvider = void 0; + authenticationProviderOptions = void 0; + if (options) { + authenticationProvider = options.authenticationProvider; + authenticationProviderOptions = options.authenticationProviderOptions; + } + if (!authenticationProvider) { + authenticationProvider = this.authenticationProvider; + } + return [4 /*yield*/, authenticationProvider.getAccessToken(authenticationProviderOptions)]; + case 1: + token = _a.sent(); + bearerKey = "Bearer ".concat(token); + (0, MiddlewareUtil_1.appendRequestHeader)(context.request, context.options, AuthenticationHandler.AUTHORIZATION_HEADER, bearerKey); + TelemetryHandlerOptions_1.TelemetryHandlerOptions.updateFeatureUsageFlag(context, TelemetryHandlerOptions_1.FeatureUsageFlag.AUTHENTICATION_HANDLER_ENABLED); + return [3 /*break*/, 3]; + case 2: + if (context.options.headers) { + delete context.options.headers[AuthenticationHandler.AUTHORIZATION_HEADER]; + } + _a.label = 3; + case 3: return [4 /*yield*/, this.nextMiddleware.execute(context)]; + case 4: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * To set the next middleware in the chain + * @param {Middleware} next - The middleware instance + * @returns Nothing + */ + AuthenticationHandler.prototype.setNext = function (next) { + this.nextMiddleware = next; + }; + /** + * @private + * A member representing the authorization header name + */ + AuthenticationHandler.AUTHORIZATION_HEADER = "Authorization"; + return AuthenticationHandler; +}()); +exports.AuthenticationHandler = AuthenticationHandler; +//# sourceMappingURL=AuthenticationHandler.js.map + +/***/ }), + +/***/ 1058: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChaosHandler = void 0; +var tslib_1 = __nccwpck_require__(1860); +var MiddlewareControl_1 = __nccwpck_require__(8153); +var MiddlewareUtil_1 = __nccwpck_require__(9514); +var ChaosHandlerData_1 = __nccwpck_require__(6374); +var ChaosHandlerOptions_1 = __nccwpck_require__(2247); +var ChaosStrategy_1 = __nccwpck_require__(3148); +/** + * Class representing ChaosHandler + * @class + * Class + * @implements Middleware + */ +var ChaosHandler = /** @class */ (function () { + /** + * @public + * @constructor + * To create an instance of Testing Handler + * @param {ChaosHandlerOptions} [options = new ChaosHandlerOptions()] - The testing handler options instance + * @param manualMap - The Map passed by user containing url-statusCode info + * @returns An instance of Testing Handler + */ + function ChaosHandler(options, manualMap) { + if (options === void 0) { options = new ChaosHandlerOptions_1.ChaosHandlerOptions(); } + this.options = options; + this.manualMap = manualMap; + } + /** + * Generates responseHeader + * @private + * @param {ChaosHandlerOptions} chaosHandlerOptions - The ChaosHandlerOptions object + * @param {string} requestID - request id + * @param {string} requestDate - date of the request + * @returns response Header + */ + ChaosHandler.prototype.createResponseHeaders = function (chaosHandlerOptions, requestID, requestDate) { + var responseHeader = chaosHandlerOptions.headers ? new Headers(chaosHandlerOptions.headers) : new Headers(); + responseHeader.append("Cache-Control", "no-store"); + responseHeader.append("request-id", requestID); + responseHeader.append("client-request-id", requestID); + responseHeader.append("x-ms-ags-diagnostic", ""); + responseHeader.append("Date", requestDate); + responseHeader.append("Strict-Transport-Security", ""); + if (chaosHandlerOptions.statusCode === 429) { + // throttling case has to have a timeout scenario + responseHeader.append("retry-after", "3"); + } + return responseHeader; + }; + /** + * Generates responseBody + * @private + * @param {ChaosHandlerOptions} chaosHandlerOptions - The ChaosHandlerOptions object + * @param {string} requestID - request id + * @param {string} requestDate - date of the request + * * @returns response body + */ + ChaosHandler.prototype.createResponseBody = function (chaosHandlerOptions, requestID, requestDate) { + if (chaosHandlerOptions.responseBody) { + return chaosHandlerOptions.responseBody; + } + var body; + if (chaosHandlerOptions.statusCode >= 400) { + var codeMessage = ChaosHandlerData_1.httpStatusCode[chaosHandlerOptions.statusCode]; + var errMessage = chaosHandlerOptions.statusMessage; + body = { + error: { + code: codeMessage, + message: errMessage, + innerError: { + "request-id": requestID, + date: requestDate, + }, + }, + }; + } + else { + body = {}; + } + return body; + }; + /** + * creates a response + * @private + * @param {ChaosHandlerOptions} chaosHandlerOptions - The ChaosHandlerOptions object + * @param {Context} context - Contains the context of the request + */ + ChaosHandler.prototype.createResponse = function (chaosHandlerOptions, context) { + var requestURL = context.request; + var requestID = (0, MiddlewareUtil_1.generateUUID)(); + var requestDate = new Date(); + var responseHeader = this.createResponseHeaders(chaosHandlerOptions, requestID, requestDate.toString()); + var responseBody = this.createResponseBody(chaosHandlerOptions, requestID, requestDate.toString()); + var init = { url: requestURL, status: chaosHandlerOptions.statusCode, statusText: chaosHandlerOptions.statusMessage, headers: responseHeader }; + context.response = new Response(typeof responseBody === "string" ? responseBody : JSON.stringify(responseBody), init); + }; + /** + * Decides whether to send the request to the graph or not + * @private + * @param {ChaosHandlerOptions} chaosHandlerOptions - A ChaosHandlerOptions object + * @param {Context} context - Contains the context of the request + * @returns nothing + */ + ChaosHandler.prototype.sendRequest = function (chaosHandlerOptions, context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + this.setStatusCode(chaosHandlerOptions, context.request, context.options.method); + if (!((chaosHandlerOptions.chaosStrategy === ChaosStrategy_1.ChaosStrategy.MANUAL && !this.nextMiddleware) || Math.floor(Math.random() * 100) < chaosHandlerOptions.chaosPercentage)) return [3 /*break*/, 1]; + this.createResponse(chaosHandlerOptions, context); + return [3 /*break*/, 3]; + case 1: + if (!this.nextMiddleware) return [3 /*break*/, 3]; + return [4 /*yield*/, this.nextMiddleware.execute(context)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: return [2 /*return*/]; + } + }); + }); + }; + /** + * Fetches a random status code for the RANDOM mode from the predefined array + * @private + * @param {string} requestMethod - the API method for the request + * @returns a random status code from a given set of status codes + */ + ChaosHandler.prototype.getRandomStatusCode = function (requestMethod) { + var statusCodeArray = ChaosHandlerData_1.methodStatusCode[requestMethod]; + return statusCodeArray[Math.floor(Math.random() * statusCodeArray.length)]; + }; + /** + * To fetch the relative URL out of the complete URL using a predefined regex pattern + * @private + * @param {string} urlMethod - the complete URL + * @returns the string as relative URL + */ + ChaosHandler.prototype.getRelativeURL = function (urlMethod) { + var pattern = /https?:\/\/graph\.microsoft\.com\/[^/]+(.+?)(\?|$)/; + var relativeURL; + if (pattern.exec(urlMethod) !== null) { + relativeURL = pattern.exec(urlMethod)[1]; + } + return relativeURL; + }; + /** + * To fetch the status code from the map(if needed), then returns response by calling createResponse + * @private + * @param {ChaosHandlerOptions} chaosHandlerOptions - The ChaosHandlerOptions object + * @param {string} requestURL - the URL for the request + * @param {string} requestMethod - the API method for the request + */ + ChaosHandler.prototype.setStatusCode = function (chaosHandlerOptions, requestURL, requestMethod) { + var _this = this; + if (chaosHandlerOptions.chaosStrategy === ChaosStrategy_1.ChaosStrategy.MANUAL) { + if (chaosHandlerOptions.statusCode === undefined) { + // manual mode with no status code, can be a global level or request level without statusCode + var relativeURL_1 = this.getRelativeURL(requestURL); + if (this.manualMap.get(relativeURL_1) !== undefined) { + // checking Manual Map for exact match + if (this.manualMap.get(relativeURL_1).get(requestMethod) !== undefined) { + chaosHandlerOptions.statusCode = this.manualMap.get(relativeURL_1).get(requestMethod); + } + // else statusCode would be undefined + } + else { + // checking for regex match if exact match doesn't work + this.manualMap.forEach(function (value, key) { + var regexURL = new RegExp(key + "$"); + if (regexURL.test(relativeURL_1)) { + if (_this.manualMap.get(key).get(requestMethod) !== undefined) { + chaosHandlerOptions.statusCode = _this.manualMap.get(key).get(requestMethod); + } + // else statusCode would be undefined + } + }); + } + // Case of redirection or request url not in map ---> statusCode would be undefined + } + } + else { + // Handling the case of Random here + chaosHandlerOptions.statusCode = this.getRandomStatusCode(requestMethod); + // else statusCode would be undefined + } + }; + /** + * To get the options for execution of the middleware + * @private + * @param {Context} context - The context object + * @returns options for middleware execution + */ + ChaosHandler.prototype.getOptions = function (context) { + var options; + if (context.middlewareControl instanceof MiddlewareControl_1.MiddlewareControl) { + options = context.middlewareControl.getMiddlewareOptions(ChaosHandlerOptions_1.ChaosHandlerOptions); + } + if (typeof options === "undefined") { + options = Object.assign(new ChaosHandlerOptions_1.ChaosHandlerOptions(), this.options); + } + return options; + }; + /** + * To execute the current middleware + * @public + * @async + * @param {Context} context - The context object of the request + * @returns A Promise that resolves to nothing + */ + ChaosHandler.prototype.execute = function (context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var chaosHandlerOptions; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + chaosHandlerOptions = this.getOptions(context); + return [4 /*yield*/, this.sendRequest(chaosHandlerOptions, context)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * To set the next middleware in the chain + * @param {Middleware} next - The middleware instance + * @returns Nothing + */ + ChaosHandler.prototype.setNext = function (next) { + this.nextMiddleware = next; + }; + return ChaosHandler; +}()); +exports.ChaosHandler = ChaosHandler; +//# sourceMappingURL=ChaosHandler.js.map + +/***/ }), + +/***/ 3087: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.HTTPMessageHandler = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @class + * @implements Middleware + * Class for HTTPMessageHandler + */ +var HTTPMessageHandler = /** @class */ (function () { + function HTTPMessageHandler() { + } + /** + * @public + * @async + * To execute the current middleware + * @param {Context} context - The request context object + * @returns A promise that resolves to nothing + */ + HTTPMessageHandler.prototype.execute = function (context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var _a; + return tslib_1.__generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = context; + return [4 /*yield*/, fetch(context.request, context.options)]; + case 1: + _a.response = _b.sent(); + return [2 /*return*/]; + } + }); + }); + }; + return HTTPMessageHandler; +}()); +exports.HTTPMessageHandler = HTTPMessageHandler; +//# sourceMappingURL=HTTPMessageHandler.js.map + +/***/ }), + +/***/ 8153: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.MiddlewareControl = void 0; +/** + * @class + * Class representing MiddlewareControl + */ +var MiddlewareControl = /** @class */ (function () { + /** + * @public + * @constructor + * Creates an instance of MiddlewareControl + * @param {MiddlewareOptions[]} [middlewareOptions = []] - The array of middlewareOptions + * @returns The instance of MiddlewareControl + */ + function MiddlewareControl(middlewareOptions) { + if (middlewareOptions === void 0) { middlewareOptions = []; } + this.middlewareOptions = new Map(); + for (var _i = 0, middlewareOptions_1 = middlewareOptions; _i < middlewareOptions_1.length; _i++) { + var option = middlewareOptions_1[_i]; + var fn = option.constructor; + this.middlewareOptions.set(fn, option); + } + } + /** + * @public + * To get the middleware option using the class of the option + * @param {Function} fn - The class of the strongly typed option class + * @returns The middleware option + * @example + * // if you wanted to return the middleware option associated with this class (MiddlewareControl) + * // call this function like this: + * getMiddlewareOptions(MiddlewareControl) + */ + MiddlewareControl.prototype.getMiddlewareOptions = function (fn) { + return this.middlewareOptions.get(fn); + }; + /** + * @public + * To set the middleware options using the class of the option + * @param {Function} fn - The class of the strongly typed option class + * @param {MiddlewareOptions} option - The strongly typed middleware option + * @returns nothing + */ + MiddlewareControl.prototype.setMiddlewareOptions = function (fn, option) { + this.middlewareOptions.set(fn, option); + }; + return MiddlewareControl; +}()); +exports.MiddlewareControl = MiddlewareControl; +//# sourceMappingURL=MiddlewareControl.js.map + +/***/ }), + +/***/ 94: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.MiddlewareFactory = void 0; +var AuthenticationHandler_1 = __nccwpck_require__(1060); +var HTTPMessageHandler_1 = __nccwpck_require__(3087); +var RedirectHandlerOptions_1 = __nccwpck_require__(1035); +var RetryHandlerOptions_1 = __nccwpck_require__(3881); +var RedirectHandler_1 = __nccwpck_require__(1012); +var RetryHandler_1 = __nccwpck_require__(980); +var TelemetryHandler_1 = __nccwpck_require__(8083); +/** + * @private + * To check whether the environment is node or not + * @returns A boolean representing the environment is node or not + */ +var isNodeEnvironment = function () { + return typeof process === "object" && "function" === "function"; +}; +/** + * @class + * Class containing function(s) related to the middleware pipelines. + */ +var MiddlewareFactory = /** @class */ (function () { + function MiddlewareFactory() { + } + /** + * @public + * @static + * Returns the default middleware chain an array with the middleware handlers + * @param {AuthenticationProvider} authProvider - The authentication provider instance + * @returns an array of the middleware handlers of the default middleware chain + */ + MiddlewareFactory.getDefaultMiddlewareChain = function (authProvider) { + var middleware = []; + var authenticationHandler = new AuthenticationHandler_1.AuthenticationHandler(authProvider); + var retryHandler = new RetryHandler_1.RetryHandler(new RetryHandlerOptions_1.RetryHandlerOptions()); + var telemetryHandler = new TelemetryHandler_1.TelemetryHandler(); + var httpMessageHandler = new HTTPMessageHandler_1.HTTPMessageHandler(); + middleware.push(authenticationHandler); + middleware.push(retryHandler); + if (isNodeEnvironment()) { + var redirectHandler = new RedirectHandler_1.RedirectHandler(new RedirectHandlerOptions_1.RedirectHandlerOptions()); + middleware.push(redirectHandler); + } + middleware.push(telemetryHandler); + middleware.push(httpMessageHandler); + return middleware; + }; + return MiddlewareFactory; +}()); +exports.MiddlewareFactory = MiddlewareFactory; +//# sourceMappingURL=MiddlewareFactory.js.map + +/***/ }), + +/***/ 9514: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.cloneRequestWithNewUrl = exports.appendRequestHeader = exports.setRequestHeader = exports.getRequestHeader = exports.generateUUID = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @constant + * To generate the UUID + * @returns The UUID string + */ +var generateUUID = function () { + var uuid = ""; + for (var j = 0; j < 32; j++) { + if (j === 8 || j === 12 || j === 16 || j === 20) { + uuid += "-"; + } + uuid += Math.floor(Math.random() * 16).toString(16); + } + return uuid; +}; +exports.generateUUID = generateUUID; +/** + * @constant + * To get the request header from the request + * @param {RequestInfo} request - The request object or the url string + * @param {FetchOptions|undefined} options - The request options object + * @param {string} key - The header key string + * @returns A header value for the given key from the request + */ +var getRequestHeader = function (request, options, key) { + var value = null; + if (typeof Request !== "undefined" && request instanceof Request) { + value = request.headers.get(key); + } + else if (typeof options !== "undefined" && options.headers !== undefined) { + if (typeof Headers !== "undefined" && options.headers instanceof Headers) { + value = options.headers.get(key); + } + else if (options.headers instanceof Array) { + var headers = options.headers; + for (var i = 0, l = headers.length; i < l; i++) { + if (headers[i][0] === key) { + value = headers[i][1]; + break; + } + } + } + else if (options.headers[key] !== undefined) { + value = options.headers[key]; + } + } + return value; +}; +exports.getRequestHeader = getRequestHeader; +/** + * @constant + * To set the header value to the given request + * @param {RequestInfo} request - The request object or the url string + * @param {FetchOptions|undefined} options - The request options object + * @param {string} key - The header key string + * @param {string } value - The header value string + * @returns Nothing + */ +var setRequestHeader = function (request, options, key, value) { + var _a, _b; + if (typeof Request !== "undefined" && request instanceof Request) { + request.headers.set(key, value); + } + else if (typeof options !== "undefined") { + if (options.headers === undefined) { + options.headers = new Headers((_a = {}, + _a[key] = value, + _a)); + } + else { + if (typeof Headers !== "undefined" && options.headers instanceof Headers) { + options.headers.set(key, value); + } + else if (options.headers instanceof Array) { + var i = 0; + var l = options.headers.length; + for (; i < l; i++) { + var header = options.headers[i]; + if (header[0] === key) { + header[1] = value; + break; + } + } + if (i === l) { + options.headers.push([key, value]); + } + } + else { + Object.assign(options.headers, (_b = {}, _b[key] = value, _b)); + } + } + } +}; +exports.setRequestHeader = setRequestHeader; +/** + * @constant + * To append the header value to the given request + * @param {RequestInfo} request - The request object or the url string + * @param {FetchOptions|undefined} options - The request options object + * @param {string} key - The header key string + * @param {string } value - The header value string + * @returns Nothing + */ +var appendRequestHeader = function (request, options, key, value) { + var _a, _b; + if (typeof Request !== "undefined" && request instanceof Request) { + request.headers.append(key, value); + } + else if (typeof options !== "undefined") { + if (options.headers === undefined) { + options.headers = new Headers((_a = {}, + _a[key] = value, + _a)); + } + else { + if (typeof Headers !== "undefined" && options.headers instanceof Headers) { + options.headers.append(key, value); + } + else if (options.headers instanceof Array) { + options.headers.push([key, value]); + } + else if (options.headers === undefined) { + options.headers = (_b = {}, _b[key] = value, _b); + } + else if (options.headers[key] === undefined) { + options.headers[key] = value; + } + else { + options.headers[key] += ", ".concat(value); + } + } + } +}; +exports.appendRequestHeader = appendRequestHeader; +/** + * @constant + * To clone the request with the new url + * @param {string} url - The new url string + * @param {Request} request - The request object + * @returns A promise that resolves to request object + */ +var cloneRequestWithNewUrl = function (newUrl, request) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { + var body, _a, method, headers, referrer, referrerPolicy, mode, credentials, cache, redirect, integrity, keepalive, signal; + return tslib_1.__generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!request.headers.get("Content-Type")) return [3 /*break*/, 2]; + return [4 /*yield*/, request.blob()]; + case 1: + _a = _b.sent(); + return [3 /*break*/, 4]; + case 2: return [4 /*yield*/, Promise.resolve(undefined)]; + case 3: + _a = _b.sent(); + _b.label = 4; + case 4: + body = _a; + method = request.method, headers = request.headers, referrer = request.referrer, referrerPolicy = request.referrerPolicy, mode = request.mode, credentials = request.credentials, cache = request.cache, redirect = request.redirect, integrity = request.integrity, keepalive = request.keepalive, signal = request.signal; + return [2 /*return*/, new Request(newUrl, { method: method, headers: headers, body: body, referrer: referrer, referrerPolicy: referrerPolicy, mode: mode, credentials: credentials, cache: cache, redirect: redirect, integrity: integrity, keepalive: keepalive, signal: signal })]; + } + }); +}); }; +exports.cloneRequestWithNewUrl = cloneRequestWithNewUrl; +//# sourceMappingURL=MiddlewareUtil.js.map + +/***/ }), + +/***/ 1012: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RedirectHandler = void 0; +var tslib_1 = __nccwpck_require__(1860); +var RequestMethod_1 = __nccwpck_require__(4323); +var MiddlewareControl_1 = __nccwpck_require__(8153); +var MiddlewareUtil_1 = __nccwpck_require__(9514); +var RedirectHandlerOptions_1 = __nccwpck_require__(1035); +var TelemetryHandlerOptions_1 = __nccwpck_require__(5988); +/** + * @class + * Class + * @implements Middleware + * Class representing RedirectHandler + */ +var RedirectHandler = /** @class */ (function () { + /** + * @public + * @constructor + * To create an instance of RedirectHandler + * @param {RedirectHandlerOptions} [options = new RedirectHandlerOptions()] - The redirect handler options instance + * @returns An instance of RedirectHandler + */ + function RedirectHandler(options) { + if (options === void 0) { options = new RedirectHandlerOptions_1.RedirectHandlerOptions(); } + this.options = options; + } + /** + * @private + * To check whether the response has the redirect status code or not + * @param {Response} response - The response object + * @returns A boolean representing whether the response contains the redirect status code or not + */ + RedirectHandler.prototype.isRedirect = function (response) { + return RedirectHandler.REDIRECT_STATUS_CODES.indexOf(response.status) !== -1; + }; + /** + * @private + * To check whether the response has location header or not + * @param {Response} response - The response object + * @returns A boolean representing the whether the response has location header or not + */ + RedirectHandler.prototype.hasLocationHeader = function (response) { + return response.headers.has(RedirectHandler.LOCATION_HEADER); + }; + /** + * @private + * To get the redirect url from location header in response object + * @param {Response} response - The response object + * @returns A redirect url from location header + */ + RedirectHandler.prototype.getLocationHeader = function (response) { + return response.headers.get(RedirectHandler.LOCATION_HEADER); + }; + /** + * @private + * To check whether the given url is a relative url or not + * @param {string} url - The url string value + * @returns A boolean representing whether the given url is a relative url or not + */ + RedirectHandler.prototype.isRelativeURL = function (url) { + return url.indexOf("://") === -1; + }; + /** + * @private + * To check whether the authorization header in the request should be dropped for consequent redirected requests + * @param {string} requestUrl - The request url value + * @param {string} redirectUrl - The redirect url value + * @returns A boolean representing whether the authorization header in the request should be dropped for consequent redirected requests + */ + RedirectHandler.prototype.shouldDropAuthorizationHeader = function (requestUrl, redirectUrl) { + var schemeHostRegex = /^[A-Za-z].+?:\/\/.+?(?=\/|$)/; + var requestMatches = schemeHostRegex.exec(requestUrl); + var requestAuthority; + var redirectAuthority; + if (requestMatches !== null) { + requestAuthority = requestMatches[0]; + } + var redirectMatches = schemeHostRegex.exec(redirectUrl); + if (redirectMatches !== null) { + redirectAuthority = redirectMatches[0]; + } + return typeof requestAuthority !== "undefined" && typeof redirectAuthority !== "undefined" && requestAuthority !== redirectAuthority; + }; + /** + * @private + * @async + * To update a request url with the redirect url + * @param {string} redirectUrl - The redirect url value + * @param {Context} context - The context object value + * @returns Nothing + */ + RedirectHandler.prototype.updateRequestUrl = function (redirectUrl, context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var _a, _b; + return tslib_1.__generator(this, function (_c) { + switch (_c.label) { + case 0: + _a = context; + if (!(typeof context.request === "string")) return [3 /*break*/, 1]; + _b = redirectUrl; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, (0, MiddlewareUtil_1.cloneRequestWithNewUrl)(redirectUrl, context.request)]; + case 2: + _b = _c.sent(); + _c.label = 3; + case 3: + _a.request = _b; + return [2 /*return*/]; + } + }); + }); + }; + /** + * @private + * To get the options for execution of the middleware + * @param {Context} context - The context object + * @returns A options for middleware execution + */ + RedirectHandler.prototype.getOptions = function (context) { + var options; + if (context.middlewareControl instanceof MiddlewareControl_1.MiddlewareControl) { + options = context.middlewareControl.getMiddlewareOptions(RedirectHandlerOptions_1.RedirectHandlerOptions); + } + if (typeof options === "undefined") { + options = Object.assign(new RedirectHandlerOptions_1.RedirectHandlerOptions(), this.options); + } + return options; + }; + /** + * @private + * @async + * To execute the next middleware and to handle in case of redirect response returned by the server + * @param {Context} context - The context object + * @param {number} redirectCount - The redirect count value + * @param {RedirectHandlerOptions} options - The redirect handler options instance + * @returns A promise that resolves to nothing + */ + RedirectHandler.prototype.executeWithRedirect = function (context, redirectCount, options) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var response, redirectUrl; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.nextMiddleware.execute(context)]; + case 1: + _a.sent(); + response = context.response; + if (!(redirectCount < options.maxRedirects && this.isRedirect(response) && this.hasLocationHeader(response) && options.shouldRedirect(response))) return [3 /*break*/, 6]; + ++redirectCount; + if (!(response.status === RedirectHandler.STATUS_CODE_SEE_OTHER)) return [3 /*break*/, 2]; + context.options.method = RequestMethod_1.RequestMethod.GET; + delete context.options.body; + return [3 /*break*/, 4]; + case 2: + redirectUrl = this.getLocationHeader(response); + if (!this.isRelativeURL(redirectUrl) && this.shouldDropAuthorizationHeader(response.url, redirectUrl)) { + delete context.options.headers[RedirectHandler.AUTHORIZATION_HEADER]; + } + return [4 /*yield*/, this.updateRequestUrl(redirectUrl, context)]; + case 3: + _a.sent(); + _a.label = 4; + case 4: return [4 /*yield*/, this.executeWithRedirect(context, redirectCount, options)]; + case 5: + _a.sent(); + return [3 /*break*/, 7]; + case 6: return [2 /*return*/]; + case 7: return [2 /*return*/]; + } + }); + }); + }; + /** + * @public + * @async + * To execute the current middleware + * @param {Context} context - The context object of the request + * @returns A Promise that resolves to nothing + */ + RedirectHandler.prototype.execute = function (context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var redirectCount, options; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + redirectCount = 0; + options = this.getOptions(context); + context.options.redirect = RedirectHandler.MANUAL_REDIRECT; + TelemetryHandlerOptions_1.TelemetryHandlerOptions.updateFeatureUsageFlag(context, TelemetryHandlerOptions_1.FeatureUsageFlag.REDIRECT_HANDLER_ENABLED); + return [4 /*yield*/, this.executeWithRedirect(context, redirectCount, options)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * To set the next middleware in the chain + * @param {Middleware} next - The middleware instance + * @returns Nothing + */ + RedirectHandler.prototype.setNext = function (next) { + this.nextMiddleware = next; + }; + /** + * @private + * @static + * A member holding the array of redirect status codes + */ + RedirectHandler.REDIRECT_STATUS_CODES = [ + 301, + 302, + 303, + 307, + 308, // Moved Permanently + ]; + /** + * @private + * @static + * A member holding SeeOther status code + */ + RedirectHandler.STATUS_CODE_SEE_OTHER = 303; + /** + * @private + * @static + * A member holding the name of the location header + */ + RedirectHandler.LOCATION_HEADER = "Location"; + /** + * @private + * @static + * A member representing the authorization header name + */ + RedirectHandler.AUTHORIZATION_HEADER = "Authorization"; + /** + * @private + * @static + * A member holding the manual redirect value + */ + RedirectHandler.MANUAL_REDIRECT = "manual"; + return RedirectHandler; +}()); +exports.RedirectHandler = RedirectHandler; +//# sourceMappingURL=RedirectHandler.js.map + +/***/ }), + +/***/ 980: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RetryHandler = void 0; +var tslib_1 = __nccwpck_require__(1860); +var RequestMethod_1 = __nccwpck_require__(4323); +var MiddlewareControl_1 = __nccwpck_require__(8153); +var MiddlewareUtil_1 = __nccwpck_require__(9514); +var RetryHandlerOptions_1 = __nccwpck_require__(3881); +var TelemetryHandlerOptions_1 = __nccwpck_require__(5988); +/** + * @class + * @implements Middleware + * Class for RetryHandler + */ +var RetryHandler = /** @class */ (function () { + /** + * @public + * @constructor + * To create an instance of RetryHandler + * @param {RetryHandlerOptions} [options = new RetryHandlerOptions()] - The retry handler options value + * @returns An instance of RetryHandler + */ + function RetryHandler(options) { + if (options === void 0) { options = new RetryHandlerOptions_1.RetryHandlerOptions(); } + this.options = options; + } + /** + * + * @private + * To check whether the response has the retry status code + * @param {Response} response - The response object + * @returns Whether the response has retry status code or not + */ + RetryHandler.prototype.isRetry = function (response) { + return RetryHandler.RETRY_STATUS_CODES.indexOf(response.status) !== -1; + }; + /** + * @private + * To check whether the payload is buffered or not + * @param {RequestInfo} request - The url string or the request object value + * @param {FetchOptions} options - The options of a request + * @returns Whether the payload is buffered or not + */ + RetryHandler.prototype.isBuffered = function (request, options) { + var method = typeof request === "string" ? options.method : request.method; + var isPutPatchOrPost = method === RequestMethod_1.RequestMethod.PUT || method === RequestMethod_1.RequestMethod.PATCH || method === RequestMethod_1.RequestMethod.POST; + if (isPutPatchOrPost) { + var isStream = (0, MiddlewareUtil_1.getRequestHeader)(request, options, "Content-Type") === "application/octet-stream"; + if (isStream) { + return false; + } + } + return true; + }; + /** + * @private + * To get the delay for a retry + * @param {Response} response - The response object + * @param {number} retryAttempts - The current attempt count + * @param {number} delay - The delay value in seconds + * @returns A delay for a retry + */ + RetryHandler.prototype.getDelay = function (response, retryAttempts, delay) { + var getRandomness = function () { return Number(Math.random().toFixed(3)); }; + var retryAfter = response.headers !== undefined ? response.headers.get(RetryHandler.RETRY_AFTER_HEADER) : null; + var newDelay; + if (retryAfter !== null) { + if (Number.isNaN(Number(retryAfter))) { + newDelay = Math.round((new Date(retryAfter).getTime() - Date.now()) / 1000); + } + else { + newDelay = Number(retryAfter); + } + } + else { + // Adding randomness to avoid retrying at a same + newDelay = retryAttempts >= 2 ? this.getExponentialBackOffTime(retryAttempts) + delay + getRandomness() : delay + getRandomness(); + } + return Math.min(newDelay, this.options.getMaxDelay() + getRandomness()); + }; + /** + * @private + * To get an exponential back off value + * @param {number} attempts - The current attempt count + * @returns An exponential back off value + */ + RetryHandler.prototype.getExponentialBackOffTime = function (attempts) { + return Math.round((1 / 2) * (Math.pow(2, attempts) - 1)); + }; + /** + * @private + * @async + * To add delay for the execution + * @param {number} delaySeconds - The delay value in seconds + * @returns Nothing + */ + RetryHandler.prototype.sleep = function (delaySeconds) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var delayMilliseconds; + return tslib_1.__generator(this, function (_a) { + delayMilliseconds = delaySeconds * 1000; + return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, delayMilliseconds); })]; + }); + }); + }; + RetryHandler.prototype.getOptions = function (context) { + var options; + if (context.middlewareControl instanceof MiddlewareControl_1.MiddlewareControl) { + options = context.middlewareControl.getMiddlewareOptions(this.options.constructor); + } + if (typeof options === "undefined") { + options = Object.assign(new RetryHandlerOptions_1.RetryHandlerOptions(), this.options); + } + return options; + }; + /** + * @private + * @async + * To execute the middleware with retries + * @param {Context} context - The context object + * @param {number} retryAttempts - The current attempt count + * @param {RetryHandlerOptions} options - The retry middleware options instance + * @returns A Promise that resolves to nothing + */ + RetryHandler.prototype.executeWithRetry = function (context, retryAttempts, options) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var delay; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.nextMiddleware.execute(context)]; + case 1: + _a.sent(); + if (!(retryAttempts < options.maxRetries && this.isRetry(context.response) && this.isBuffered(context.request, context.options) && options.shouldRetry(options.delay, retryAttempts, context.request, context.options, context.response))) return [3 /*break*/, 4]; + ++retryAttempts; + (0, MiddlewareUtil_1.setRequestHeader)(context.request, context.options, RetryHandler.RETRY_ATTEMPT_HEADER, retryAttempts.toString()); + delay = this.getDelay(context.response, retryAttempts, options.delay); + return [4 /*yield*/, this.sleep(delay)]; + case 2: + _a.sent(); + return [4 /*yield*/, this.executeWithRetry(context, retryAttempts, options)]; + case 3: return [2 /*return*/, _a.sent()]; + case 4: return [2 /*return*/]; + } + }); + }); + }; + /** + * @public + * @async + * To execute the current middleware + * @param {Context} context - The context object of the request + * @returns A Promise that resolves to nothing + */ + RetryHandler.prototype.execute = function (context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var retryAttempts, options; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + retryAttempts = 0; + options = this.getOptions(context); + TelemetryHandlerOptions_1.TelemetryHandlerOptions.updateFeatureUsageFlag(context, TelemetryHandlerOptions_1.FeatureUsageFlag.RETRY_HANDLER_ENABLED); + return [4 /*yield*/, this.executeWithRetry(context, retryAttempts, options)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * To set the next middleware in the chain + * @param {Middleware} next - The middleware instance + * @returns Nothing + */ + RetryHandler.prototype.setNext = function (next) { + this.nextMiddleware = next; + }; + /** + * @private + * @static + * A list of status codes that needs to be retried + */ + RetryHandler.RETRY_STATUS_CODES = [ + 429, + 503, + 504, // Gateway timeout + ]; + /** + * @private + * @static + * A member holding the name of retry attempt header + */ + RetryHandler.RETRY_ATTEMPT_HEADER = "Retry-Attempt"; + /** + * @private + * @static + * A member holding the name of retry after header + */ + RetryHandler.RETRY_AFTER_HEADER = "Retry-After"; + return RetryHandler; +}()); +exports.RetryHandler = RetryHandler; +//# sourceMappingURL=RetryHandler.js.map + +/***/ }), + +/***/ 8083: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TelemetryHandler = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module TelemetryHandler + */ +var GraphRequestUtil_1 = __nccwpck_require__(7362); +var Version_1 = __nccwpck_require__(9731); +var MiddlewareControl_1 = __nccwpck_require__(8153); +var MiddlewareUtil_1 = __nccwpck_require__(9514); +var TelemetryHandlerOptions_1 = __nccwpck_require__(5988); +/** + * @class + * @implements Middleware + * Class for TelemetryHandler + */ +var TelemetryHandler = /** @class */ (function () { + function TelemetryHandler() { + } + /** + * @public + * @async + * To execute the current middleware + * @param {Context} context - The context object of the request + * @returns A Promise that resolves to nothing + */ + TelemetryHandler.prototype.execute = function (context) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var url, clientRequestId, sdkVersionValue, options, featureUsage; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + url = typeof context.request === "string" ? context.request : context.request.url; + if ((0, GraphRequestUtil_1.isGraphURL)(url) || (context.customHosts && (0, GraphRequestUtil_1.isCustomHost)(url, context.customHosts))) { + clientRequestId = (0, MiddlewareUtil_1.getRequestHeader)(context.request, context.options, TelemetryHandler.CLIENT_REQUEST_ID_HEADER); + if (!clientRequestId) { + clientRequestId = (0, MiddlewareUtil_1.generateUUID)(); + (0, MiddlewareUtil_1.setRequestHeader)(context.request, context.options, TelemetryHandler.CLIENT_REQUEST_ID_HEADER, clientRequestId); + } + sdkVersionValue = "".concat(TelemetryHandler.PRODUCT_NAME, "/").concat(Version_1.PACKAGE_VERSION); + options = void 0; + if (context.middlewareControl instanceof MiddlewareControl_1.MiddlewareControl) { + options = context.middlewareControl.getMiddlewareOptions(TelemetryHandlerOptions_1.TelemetryHandlerOptions); + } + if (options) { + featureUsage = options.getFeatureUsage(); + sdkVersionValue += " (".concat(TelemetryHandler.FEATURE_USAGE_STRING, "=").concat(featureUsage, ")"); + } + (0, MiddlewareUtil_1.appendRequestHeader)(context.request, context.options, TelemetryHandler.SDK_VERSION_HEADER, sdkVersionValue); + } + else { + // Remove telemetry headers if present during redirection. + delete context.options.headers[TelemetryHandler.CLIENT_REQUEST_ID_HEADER]; + delete context.options.headers[TelemetryHandler.SDK_VERSION_HEADER]; + } + return [4 /*yield*/, this.nextMiddleware.execute(context)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * To set the next middleware in the chain + * @param {Middleware} next - The middleware instance + * @returns Nothing + */ + TelemetryHandler.prototype.setNext = function (next) { + this.nextMiddleware = next; + }; + /** + * @private + * @static + * A member holding the name of the client request id header + */ + TelemetryHandler.CLIENT_REQUEST_ID_HEADER = "client-request-id"; + /** + * @private + * @static + * A member holding the name of the sdk version header + */ + TelemetryHandler.SDK_VERSION_HEADER = "SdkVersion"; + /** + * @private + * @static + * A member holding the language prefix for the sdk version header value + */ + TelemetryHandler.PRODUCT_NAME = "graph-js"; + /** + * @private + * @static + * A member holding the key for the feature usage metrics + */ + TelemetryHandler.FEATURE_USAGE_STRING = "featureUsage"; + return TelemetryHandler; +}()); +exports.TelemetryHandler = TelemetryHandler; +//# sourceMappingURL=TelemetryHandler.js.map + +/***/ }), + +/***/ 9963: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AuthenticationHandlerOptions = void 0; +/** + * @class + * @implements MiddlewareOptions + * Class representing AuthenticationHandlerOptions + */ +var AuthenticationHandlerOptions = /** @class */ (function () { + /** + * @public + * @constructor + * To create an instance of AuthenticationHandlerOptions + * @param {AuthenticationProvider} [authenticationProvider] - The authentication provider instance + * @param {AuthenticationProviderOptions} [authenticationProviderOptions] - The authentication provider options instance + * @returns An instance of AuthenticationHandlerOptions + */ + function AuthenticationHandlerOptions(authenticationProvider, authenticationProviderOptions) { + this.authenticationProvider = authenticationProvider; + this.authenticationProviderOptions = authenticationProviderOptions; + } + return AuthenticationHandlerOptions; +}()); +exports.AuthenticationHandlerOptions = AuthenticationHandlerOptions; +//# sourceMappingURL=AuthenticationHandlerOptions.js.map + +/***/ }), + +/***/ 6374: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.httpStatusCode = exports.methodStatusCode = void 0; +/** + * @module ChaosHandlerData + */ +/** + * Contains RequestMethod to corresponding array of possible status codes, used for Random mode + */ +exports.methodStatusCode = { + GET: [429, 500, 502, 503, 504], + POST: [429, 500, 502, 503, 504, 507], + PUT: [429, 500, 502, 503, 504, 507], + PATCH: [429, 500, 502, 503, 504], + DELETE: [429, 500, 502, 503, 504, 507], +}; +/** + * Contains statusCode to statusMessage map + */ +exports.httpStatusCode = { + 100: "Continue", + 101: "Switching Protocols", + 102: "Processing", + 103: "Early Hints", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 208: "Already Reported", + 226: "IM Used", + 300: "Multiple Choices", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 308: "Permanent Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Payload Too Large", + 414: "URI Too Long", + 415: "Unsupported Media Type", + 416: "Range Not Satisfiable", + 417: "Expectation Failed", + 421: "Misdirected Request", + 422: "Unprocessable Entity", + 423: "Locked", + 424: "Failed Dependency", + 425: "Too Early", + 426: "Upgrade Required", + 428: "Precondition Required", + 429: "Too Many Requests", + 431: "Request Header Fields Too Large", + 451: "Unavailable For Legal Reasons", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + 506: "Variant Also Negotiates", + 507: "Insufficient Storage", + 508: "Loop Detected", + 510: "Not Extended", + 511: "Network Authentication Required", +}; +//# sourceMappingURL=ChaosHandlerData.js.map + +/***/ }), + +/***/ 2247: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChaosHandlerOptions = void 0; +/** + * @module ChaosHandlerOptions + */ +var ChaosStrategy_1 = __nccwpck_require__(3148); +/** + * Class representing ChaosHandlerOptions + * @class + * Class + * @implements MiddlewareOptions + */ +var ChaosHandlerOptions = /** @class */ (function () { + /** + * @public + * @constructor + * To create an instance of Testing Handler Options + * @param {ChaosStrategy} chaosStrategy - Specifies the startegy used for the Testing Handler -> RAMDOM/MANUAL + * @param {string} statusMessage - The Message to be returned in the response + * @param {number?} statusCode - The statusCode to be returned in the response + * @param {number?} chaosPercentage - The percentage of randomness/chaos in the handler + * @param {any?} responseBody - The response body to be returned in the response + * @returns An instance of ChaosHandlerOptions + */ + function ChaosHandlerOptions(chaosStrategy, statusMessage, statusCode, chaosPercentage, responseBody, headers) { + if (chaosStrategy === void 0) { chaosStrategy = ChaosStrategy_1.ChaosStrategy.RANDOM; } + if (statusMessage === void 0) { statusMessage = "Some error Happened"; } + this.chaosStrategy = chaosStrategy; + this.statusCode = statusCode; + this.statusMessage = statusMessage; + this.chaosPercentage = chaosPercentage !== undefined ? chaosPercentage : 10; + this.responseBody = responseBody; + this.headers = headers; + if (this.chaosPercentage > 100) { + throw new Error("Error Pecentage can not be more than 100"); + } + } + return ChaosHandlerOptions; +}()); +exports.ChaosHandlerOptions = ChaosHandlerOptions; +//# sourceMappingURL=ChaosHandlerOptions.js.map + +/***/ }), + +/***/ 3148: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChaosStrategy = void 0; +/** + * @module ChaosStrategy + */ +/** + * Strategy used for Testing Handler + * @enum + */ +var ChaosStrategy; +(function (ChaosStrategy) { + ChaosStrategy[ChaosStrategy["MANUAL"] = 0] = "MANUAL"; + ChaosStrategy[ChaosStrategy["RANDOM"] = 1] = "RANDOM"; +})(ChaosStrategy || (exports.ChaosStrategy = ChaosStrategy = {})); +//# sourceMappingURL=ChaosStrategy.js.map + +/***/ }), + +/***/ 1035: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RedirectHandlerOptions = void 0; +/** + * @class + * @implements MiddlewareOptions + * A class representing RedirectHandlerOptions + */ +var RedirectHandlerOptions = /** @class */ (function () { + /** + * @public + * @constructor + * To create an instance of RedirectHandlerOptions + * @param {number} [maxRedirects = RedirectHandlerOptions.DEFAULT_MAX_REDIRECTS] - The max redirects value + * @param {ShouldRedirect} [shouldRedirect = RedirectHandlerOptions.DEFAULT_SHOULD_RETRY] - The should redirect callback + * @returns An instance of RedirectHandlerOptions + */ + function RedirectHandlerOptions(maxRedirects, shouldRedirect) { + if (maxRedirects === void 0) { maxRedirects = RedirectHandlerOptions.DEFAULT_MAX_REDIRECTS; } + if (shouldRedirect === void 0) { shouldRedirect = RedirectHandlerOptions.defaultShouldRedirect; } + if (maxRedirects > RedirectHandlerOptions.MAX_MAX_REDIRECTS) { + var error = new Error("MaxRedirects should not be more than ".concat(RedirectHandlerOptions.MAX_MAX_REDIRECTS)); + error.name = "MaxLimitExceeded"; + throw error; + } + if (maxRedirects < 0) { + var error = new Error("MaxRedirects should not be negative"); + error.name = "MinExpectationNotMet"; + throw error; + } + this.maxRedirects = maxRedirects; + this.shouldRedirect = shouldRedirect; + } + /** + * @private + * @static + * A member holding default max redirects value + */ + RedirectHandlerOptions.DEFAULT_MAX_REDIRECTS = 5; + /** + * @private + * @static + * A member holding maximum max redirects value + */ + RedirectHandlerOptions.MAX_MAX_REDIRECTS = 20; + /** + * @private + * A member holding default shouldRedirect callback + */ + RedirectHandlerOptions.defaultShouldRedirect = function () { return true; }; + return RedirectHandlerOptions; +}()); +exports.RedirectHandlerOptions = RedirectHandlerOptions; +//# sourceMappingURL=RedirectHandlerOptions.js.map + +/***/ }), + +/***/ 3881: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RetryHandlerOptions = void 0; +/** + * @class + * @implements MiddlewareOptions + * Class for RetryHandlerOptions + */ +var RetryHandlerOptions = /** @class */ (function () { + /** + * @public + * @constructor + * To create an instance of RetryHandlerOptions + * @param {number} [delay = RetryHandlerOptions.DEFAULT_DELAY] - The delay value in seconds + * @param {number} [maxRetries = RetryHandlerOptions.DEFAULT_MAX_RETRIES] - The maxRetries value + * @param {ShouldRetry} [shouldRetry = RetryHandlerOptions.DEFAULT_SHOULD_RETRY] - The shouldRetry callback function + * @returns An instance of RetryHandlerOptions + */ + function RetryHandlerOptions(delay, maxRetries, shouldRetry) { + if (delay === void 0) { delay = RetryHandlerOptions.DEFAULT_DELAY; } + if (maxRetries === void 0) { maxRetries = RetryHandlerOptions.DEFAULT_MAX_RETRIES; } + if (shouldRetry === void 0) { shouldRetry = RetryHandlerOptions.defaultShouldRetry; } + if (delay > RetryHandlerOptions.MAX_DELAY && maxRetries > RetryHandlerOptions.MAX_MAX_RETRIES) { + var error = new Error("Delay and MaxRetries should not be more than ".concat(RetryHandlerOptions.MAX_DELAY, " and ").concat(RetryHandlerOptions.MAX_MAX_RETRIES)); + error.name = "MaxLimitExceeded"; + throw error; + } + else if (delay > RetryHandlerOptions.MAX_DELAY) { + var error = new Error("Delay should not be more than ".concat(RetryHandlerOptions.MAX_DELAY)); + error.name = "MaxLimitExceeded"; + throw error; + } + else if (maxRetries > RetryHandlerOptions.MAX_MAX_RETRIES) { + var error = new Error("MaxRetries should not be more than ".concat(RetryHandlerOptions.MAX_MAX_RETRIES)); + error.name = "MaxLimitExceeded"; + throw error; + } + else if (delay < 0 && maxRetries < 0) { + var error = new Error("Delay and MaxRetries should not be negative"); + error.name = "MinExpectationNotMet"; + throw error; + } + else if (delay < 0) { + var error = new Error("Delay should not be negative"); + error.name = "MinExpectationNotMet"; + throw error; + } + else if (maxRetries < 0) { + var error = new Error("MaxRetries should not be negative"); + error.name = "MinExpectationNotMet"; + throw error; + } + this.delay = Math.min(delay, RetryHandlerOptions.MAX_DELAY); + this.maxRetries = Math.min(maxRetries, RetryHandlerOptions.MAX_MAX_RETRIES); + this.shouldRetry = shouldRetry; + } + /** + * @public + * To get the maximum delay + * @returns A maximum delay + */ + RetryHandlerOptions.prototype.getMaxDelay = function () { + return RetryHandlerOptions.MAX_DELAY; + }; + /** + * @private + * @static + * A member holding default delay value in seconds + */ + RetryHandlerOptions.DEFAULT_DELAY = 3; + /** + * @private + * @static + * A member holding default maxRetries value + */ + RetryHandlerOptions.DEFAULT_MAX_RETRIES = 3; + /** + * @private + * @static + * A member holding maximum delay value in seconds + */ + RetryHandlerOptions.MAX_DELAY = 180; + /** + * @private + * @static + * A member holding maximum maxRetries value + */ + RetryHandlerOptions.MAX_MAX_RETRIES = 10; + /** + * @private + * A member holding default shouldRetry callback + */ + RetryHandlerOptions.defaultShouldRetry = function () { return true; }; + return RetryHandlerOptions; +}()); +exports.RetryHandlerOptions = RetryHandlerOptions; +//# sourceMappingURL=RetryHandlerOptions.js.map + +/***/ }), + +/***/ 5988: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TelemetryHandlerOptions = exports.FeatureUsageFlag = void 0; +var MiddlewareControl_1 = __nccwpck_require__(8153); +/** + * @enum + * @property {number} NONE - The hexadecimal flag value for nothing enabled + * @property {number} REDIRECT_HANDLER_ENABLED - The hexadecimal flag value for redirect handler enabled + * @property {number} RETRY_HANDLER_ENABLED - The hexadecimal flag value for retry handler enabled + * @property {number} AUTHENTICATION_HANDLER_ENABLED - The hexadecimal flag value for the authentication handler enabled + */ +var FeatureUsageFlag; +(function (FeatureUsageFlag) { + /* eslint-disable @typescript-eslint/naming-convention */ + FeatureUsageFlag[FeatureUsageFlag["NONE"] = 0] = "NONE"; + FeatureUsageFlag[FeatureUsageFlag["REDIRECT_HANDLER_ENABLED"] = 1] = "REDIRECT_HANDLER_ENABLED"; + FeatureUsageFlag[FeatureUsageFlag["RETRY_HANDLER_ENABLED"] = 2] = "RETRY_HANDLER_ENABLED"; + FeatureUsageFlag[FeatureUsageFlag["AUTHENTICATION_HANDLER_ENABLED"] = 4] = "AUTHENTICATION_HANDLER_ENABLED"; + /* eslint-enable @typescript-eslint/naming-convention */ +})(FeatureUsageFlag || (exports.FeatureUsageFlag = FeatureUsageFlag = {})); +/** + * @class + * @implements MiddlewareOptions + * Class for TelemetryHandlerOptions + */ +var TelemetryHandlerOptions = /** @class */ (function () { + function TelemetryHandlerOptions() { + /** + * @private + * A member to hold the OR of feature usage flags + */ + this.featureUsage = FeatureUsageFlag.NONE; + } + /** + * @public + * @static + * To update the feature usage in the context object + * @param {Context} context - The request context object containing middleware options + * @param {FeatureUsageFlag} flag - The flag value + * @returns nothing + */ + TelemetryHandlerOptions.updateFeatureUsageFlag = function (context, flag) { + var options; + if (context.middlewareControl instanceof MiddlewareControl_1.MiddlewareControl) { + options = context.middlewareControl.getMiddlewareOptions(TelemetryHandlerOptions); + } + else { + context.middlewareControl = new MiddlewareControl_1.MiddlewareControl(); + } + if (typeof options === "undefined") { + options = new TelemetryHandlerOptions(); + context.middlewareControl.setMiddlewareOptions(TelemetryHandlerOptions, options); + } + options.setFeatureUsage(flag); + }; + /** + * @private + * To set the feature usage flag + * @param {FeatureUsageFlag} flag - The flag value + * @returns nothing + */ + TelemetryHandlerOptions.prototype.setFeatureUsage = function (flag) { + this.featureUsage = this.featureUsage | flag; + }; + /** + * @public + * To get the feature usage + * @returns A feature usage flag as hexadecimal string + */ + TelemetryHandlerOptions.prototype.getFeatureUsage = function () { + return this.featureUsage.toString(16); + }; + return TelemetryHandlerOptions; +}()); +exports.TelemetryHandlerOptions = TelemetryHandlerOptions; +//# sourceMappingURL=TelemetryHandlerOptions.js.map + +/***/ }), + +/***/ 8242: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.FileUpload = void 0; +var GraphClientError_1 = __nccwpck_require__(4896); +/** + * @class + * Class used for creating LargeFileUploadTask fileobject. + * This class accepts files of type ArrayBuffer, Blob, Uint8Array. + */ +var FileUpload = /** @class */ (function () { + /** + * @public + * @constructor + * @param {ArrayBuffer | Blob | Uint8Array} content - The file to be uploaded + * @param {string} name - The name of the file to be uploaded + * @param {number} size - The total size of the file to be uploaded + * @returns An instance of the FileUpload class + */ + function FileUpload(content, name, size) { + this.content = content; + this.name = name; + this.size = size; + if (!content || !name || !size) { + throw new GraphClientError_1.GraphClientError("Please provide the upload content, name of the file and size of the file"); + } + } + /** + * @public + * Slices the file content to the given range + * @param {Range} range - The range value + * @returns The sliced file part + */ + FileUpload.prototype.sliceFile = function (range) { + return this.content.slice(range.minValue, range.maxValue + 1); + }; + return FileUpload; +}()); +exports.FileUpload = FileUpload; +//# sourceMappingURL=FileUpload.js.map + +/***/ }), + +/***/ 136: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.StreamUpload = void 0; +var tslib_1 = __nccwpck_require__(1860); +var GraphClientError_1 = __nccwpck_require__(4896); +/** + * @class + * FileObject class for Readable Stream upload + */ +var StreamUpload = /** @class */ (function () { + function StreamUpload(content, name, size) { + this.content = content; + this.name = name; + this.size = size; + if (!content || !name || !size) { + throw new GraphClientError_1.GraphClientError("Please provide the Readable Stream content, name of the file and size of the file"); + } + } + /** + * @public + * Slices the file content to the given range + * @param {Range} range - The range value + * @returns The sliced file part + */ + StreamUpload.prototype.sliceFile = function (range) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var rangeSize, bufs, previousRangeMin, previousRangeMax, _a, _b, slicedChunk; + return tslib_1.__generator(this, function (_c) { + switch (_c.label) { + case 0: + rangeSize = range.maxValue - range.minValue + 1; + bufs = []; + /** + * The sliceFile reads the first `rangeSize` number of bytes from the stream. + * The previousSlice property is used to seek the range of bytes in the previous slice. + * Suppose, the sliceFile reads bytes from `10 - 20` from the stream but the upload of this slice fails. + * When the user resumes, the stream will have bytes from position 21. + * The previousSlice.Range is used to compare if the requested range is cached in the previousSlice property or present in the Readable Stream. + */ + if (this.previousSlice) { + if (range.minValue < this.previousSlice.range.minValue) { + throw new GraphClientError_1.GraphClientError("An error occurred while uploading the stream. Please restart the stream upload from the first byte of the file."); + } + if (range.minValue < this.previousSlice.range.maxValue) { + previousRangeMin = this.previousSlice.range.minValue; + previousRangeMax = this.previousSlice.range.maxValue; + // Check if the requested range is same as previously sliced range + if (range.minValue === previousRangeMin && range.maxValue === previousRangeMax) { + return [2 /*return*/, this.previousSlice.fileSlice]; + } + /** + * The following check considers a possibility + * of an upload failing after some of the bytes of the previous slice + * were successfully uploaded. + * Example - Previous slice range - `10 - 20`. Current requested range is `15 - 20`. + */ + if (range.maxValue === previousRangeMax) { + return [2 /*return*/, this.previousSlice.fileSlice.slice(range.minValue, range.maxValue + 1)]; + } + /** + * If an upload fails after some of the bytes of the previous slice + * were successfully uploaded and the new Range.Maximum is greater than the previous Range.Maximum + * Example - Previous slice range - `10 - 20`. Current requested range is `15 - 25`, + * then read the bytes from position 15 to 20 from previousSlice.fileSlice and read bytes from position 21 to 25 from the Readable Stream + */ + bufs.push(this.previousSlice.fileSlice.slice(range.minValue, previousRangeMax + 1)); + rangeSize = range.maxValue - previousRangeMax; + } + } + if (!(this.content && this.content.readable)) return [3 /*break*/, 4]; + if (!(this.content.readableLength >= rangeSize)) return [3 /*break*/, 1]; + bufs.push(this.content.read(rangeSize)); + return [3 /*break*/, 3]; + case 1: + _b = (_a = bufs).push; + return [4 /*yield*/, this.readNBytesFromStream(rangeSize)]; + case 2: + _b.apply(_a, [_c.sent()]); + _c.label = 3; + case 3: return [3 /*break*/, 5]; + case 4: throw new GraphClientError_1.GraphClientError("Stream is not readable."); + case 5: + slicedChunk = Buffer.concat(bufs); + this.previousSlice = { fileSlice: slicedChunk, range: range }; + return [2 /*return*/, slicedChunk]; + } + }); + }); + }; + /** + * @private + * Reads the specified byte size from the stream + * @param {number} size - The size of bytes to be read + * @returns Buffer with the given length of data. + */ + StreamUpload.prototype.readNBytesFromStream = function (size) { + var _this = this; + return new Promise(function (resolve, reject) { + var chunks = []; + var remainder = size; + var length = 0; + _this.content.on("end", function () { + if (remainder > 0) { + return reject(new GraphClientError_1.GraphClientError("Stream ended before reading required range size")); + } + }); + _this.content.on("readable", function () { + /** + * (chunk = this.content.read(size)) can return null if size of stream is less than 'size' parameter. + * Read the remainder number of bytes from the stream iteratively as they are available. + */ + var chunk; + while (length < size && (chunk = _this.content.read(remainder)) !== null) { + length += chunk.length; + chunks.push(chunk); + if (remainder > 0) { + remainder = size - length; + } + } + if (length === size) { + return resolve(Buffer.concat(chunks)); + } + if (!_this.content || !_this.content.readable) { + return reject(new GraphClientError_1.GraphClientError("Error encountered while reading the stream during the upload")); + } + }); + }); + }; + return StreamUpload; +}()); +exports.StreamUpload = StreamUpload; +//# sourceMappingURL=StreamUpload.js.map + +/***/ }), + +/***/ 7915: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Range = void 0; +/** + * @module Range + */ +/** + * @class + * Class representing Range + */ +var Range = /** @class */ (function () { + /** + * @public + * @constructor + * Creates a range for given min and max values + * @param {number} [minVal = -1] - The minimum value. + * @param {number} [maxVal = -1] - The maximum value. + * @returns An instance of a Range + */ + function Range(minVal, maxVal) { + if (minVal === void 0) { minVal = -1; } + if (maxVal === void 0) { maxVal = -1; } + this.minValue = minVal; + this.maxValue = maxVal; + } + return Range; +}()); +exports.Range = Range; +//# sourceMappingURL=Range.js.map + +/***/ }), + +/***/ 5301: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UploadResult = void 0; +/** + * Class representing a successful file upload result + */ +var UploadResult = /** @class */ (function () { + /** + * @public + * @param {responseBody} responsebody - The response body from the completed upload response + * @param {location} location - The location value from the headers from the completed upload response + */ + function UploadResult(responseBody, location) { + // Response body or the location parameter can be undefined. + this._location = location; + this._responseBody = responseBody; + } + Object.defineProperty(UploadResult.prototype, "location", { + /** + * @public + * Get of the location value. + * Location value is looked up in the response header + */ + get: function () { + return this._location; + }, + /** + * @public + * Set the location value + * Location value is looked up in the response header + */ + set: function (location) { + this._location = location; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(UploadResult.prototype, "responseBody", { + /** + * @public + * Get The response body from the completed upload response + */ + get: function () { + return this._responseBody; + }, + /** + * @public + * Set the response body from the completed upload response + */ + set: function (responseBody) { + this._responseBody = responseBody; + }, + enumerable: false, + configurable: true + }); + /** + * @public + * @param {responseBody} responseBody - The response body from the completed upload response + * @param {responseHeaders} responseHeaders - The headers from the completed upload response + */ + UploadResult.CreateUploadResult = function (responseBody, responseHeaders) { + return new UploadResult(responseBody, responseHeaders.get("location")); + }; + return UploadResult; +}()); +exports.UploadResult = UploadResult; +//# sourceMappingURL=UploadResult.js.map + +/***/ }), + +/***/ 5755: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.LargeFileUploadTask = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module LargeFileUploadTask + */ +var GraphClientError_1 = __nccwpck_require__(4896); +var GraphResponseHandler_1 = __nccwpck_require__(7878); +var ResponseType_1 = __nccwpck_require__(3708); +var Range_1 = __nccwpck_require__(7915); +var UploadResult_1 = __nccwpck_require__(5301); +/** + * @class + * Class representing LargeFileUploadTask + */ +var LargeFileUploadTask = /** @class */ (function () { + /** + * @public + * @constructor + * Constructs a LargeFileUploadTask + * @param {Client} client - The GraphClient instance + * @param {FileObject} file - The FileObject holding details of a file that needs to be uploaded + * @param {LargeFileUploadSession} uploadSession - The upload session to which the upload has to be done + * @param {LargeFileUploadTaskOptions} options - The upload task options + * @returns An instance of LargeFileUploadTask + */ + function LargeFileUploadTask(client, file, uploadSession, options) { + if (options === void 0) { options = {}; } + /** + * @private + * Default value for the rangeSize + */ + this.DEFAULT_FILE_SIZE = 5 * 1024 * 1024; + this.client = client; + if (!file.sliceFile) { + throw new GraphClientError_1.GraphClientError("Please pass the FileUpload object, StreamUpload object or any custom implementation of the FileObject interface"); + } + else { + this.file = file; + } + this.file = file; + if (!options.rangeSize) { + options.rangeSize = this.DEFAULT_FILE_SIZE; + } + this.options = options; + this.uploadSession = uploadSession; + this.nextRange = new Range_1.Range(0, this.options.rangeSize - 1); + } + /** + * @public + * @static + * @async + * Makes request to the server to create an upload session + * @param {Client} client - The GraphClient instance + * @param {string} requestUrl - The URL to create the upload session + * @param {any} payload - The payload that needs to be sent + * @param {KeyValuePairObjectStringNumber} headers - The headers that needs to be sent + * @returns The promise that resolves to LargeFileUploadSession + */ + LargeFileUploadTask.createUploadSession = function (client, requestUrl, payload, headers) { + if (headers === void 0) { headers = {}; } + return tslib_1.__awaiter(this, void 0, void 0, function () { + var session, largeFileUploadSession; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, client + .api(requestUrl) + .headers(headers) + .post(payload)]; + case 1: + session = _a.sent(); + largeFileUploadSession = { + url: session.uploadUrl, + expiry: new Date(session.expirationDateTime), + isCancelled: false, + }; + return [2 /*return*/, largeFileUploadSession]; + } + }); + }); + }; + /** + * @private + * Parses given range string to the Range instance + * @param {string[]} ranges - The ranges value + * @returns The range instance + */ + LargeFileUploadTask.prototype.parseRange = function (ranges) { + var rangeStr = ranges[0]; + if (typeof rangeStr === "undefined" || rangeStr === "") { + return new Range_1.Range(); + } + var firstRange = rangeStr.split("-"); + var minVal = parseInt(firstRange[0], 10); + var maxVal = parseInt(firstRange[1], 10); + if (Number.isNaN(maxVal)) { + maxVal = this.file.size - 1; + } + return new Range_1.Range(minVal, maxVal); + }; + /** + * @private + * Updates the expiration date and the next range + * @param {UploadStatusResponse} response - The response of the upload status + * @returns Nothing + */ + LargeFileUploadTask.prototype.updateTaskStatus = function (response) { + this.uploadSession.expiry = new Date(response.expirationDateTime); + this.nextRange = this.parseRange(response.nextExpectedRanges); + }; + /** + * @public + * Gets next range that needs to be uploaded + * @returns The range instance + */ + LargeFileUploadTask.prototype.getNextRange = function () { + if (this.nextRange.minValue === -1) { + return this.nextRange; + } + var minVal = this.nextRange.minValue; + var maxValue = minVal + this.options.rangeSize - 1; + if (maxValue >= this.file.size) { + maxValue = this.file.size - 1; + } + return new Range_1.Range(minVal, maxValue); + }; + /** + * @deprecated This function has been moved into FileObject interface. + * @public + * Slices the file content to the given range + * @param {Range} range - The range value + * @returns The sliced ArrayBuffer or Blob + */ + LargeFileUploadTask.prototype.sliceFile = function (range) { + console.warn("The LargeFileUploadTask.sliceFile() function has been deprecated and moved into the FileObject interface."); + if (this.file.content instanceof ArrayBuffer || this.file.content instanceof Blob || this.file.content instanceof Uint8Array) { + return this.file.content.slice(range.minValue, range.maxValue + 1); + } + throw new GraphClientError_1.GraphClientError("The LargeFileUploadTask.sliceFile() function expects only Blob, ArrayBuffer or Uint8Array file content. Please note that the sliceFile() function is deprecated."); + }; + /** + * @public + * @async + * Uploads file to the server in a sequential order by slicing the file + * @returns The promise resolves to uploaded response + */ + LargeFileUploadTask.prototype.upload = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var uploadEventHandlers, nextRange, err, fileSlice, rawResponse, responseBody, res; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + uploadEventHandlers = this.options && this.options.uploadEventHandlers; + _a.label = 1; + case 1: + if (!!this.uploadSession.isCancelled) return [3 /*break*/, 5]; + nextRange = this.getNextRange(); + if (nextRange.maxValue === -1) { + err = new Error("Task with which you are trying to upload is already completed, Please check for your uploaded file"); + err.name = "Invalid Session"; + throw err; + } + return [4 /*yield*/, this.file.sliceFile(nextRange)]; + case 2: + fileSlice = _a.sent(); + return [4 /*yield*/, this.uploadSliceGetRawResponse(fileSlice, nextRange, this.file.size)]; + case 3: + rawResponse = _a.sent(); + if (!rawResponse) { + throw new GraphClientError_1.GraphClientError("Something went wrong! Large file upload slice response is null."); + } + return [4 /*yield*/, GraphResponseHandler_1.GraphResponseHandler.getResponse(rawResponse)]; + case 4: + responseBody = _a.sent(); + /** + * (rawResponse.status === 201) -> This condition is applicable for OneDrive, PrintDocument and Outlook APIs. + * (rawResponse.status === 200 && responseBody.id) -> This additional condition is applicable only for OneDrive API. + */ + if (rawResponse.status === 201 || (rawResponse.status === 200 && responseBody.id)) { + this.reportProgress(uploadEventHandlers, nextRange); + return [2 /*return*/, UploadResult_1.UploadResult.CreateUploadResult(responseBody, rawResponse.headers)]; + } + res = { + expirationDateTime: responseBody.expirationDateTime || responseBody.ExpirationDateTime, + nextExpectedRanges: responseBody.NextExpectedRanges || responseBody.nextExpectedRanges, + }; + this.updateTaskStatus(res); + this.reportProgress(uploadEventHandlers, nextRange); + return [3 /*break*/, 1]; + case 5: return [2 /*return*/]; + } + }); + }); + }; + LargeFileUploadTask.prototype.reportProgress = function (uploadEventHandlers, nextRange) { + if (uploadEventHandlers && uploadEventHandlers.progress) { + uploadEventHandlers.progress(nextRange, uploadEventHandlers.extraCallbackParam); + } + }; + /** + * @public + * @async + * Uploads given slice to the server + * @param {ArrayBuffer | Blob | File} fileSlice - The file slice + * @param {Range} range - The range value + * @param {number} totalSize - The total size of a complete file + * @returns The response body of the upload slice result + */ + LargeFileUploadTask.prototype.uploadSlice = function (fileSlice, range, totalSize) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.client + .api(this.uploadSession.url) + .headers({ + "Content-Length": "".concat(range.maxValue - range.minValue + 1), + "Content-Range": "bytes ".concat(range.minValue, "-").concat(range.maxValue, "/").concat(totalSize), + "Content-Type": "application/octet-stream", + }) + .put(fileSlice)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Uploads given slice to the server + * @param {unknown} fileSlice - The file slice + * @param {Range} range - The range value + * @param {number} totalSize - The total size of a complete file + * @returns The raw response of the upload slice result + */ + LargeFileUploadTask.prototype.uploadSliceGetRawResponse = function (fileSlice, range, totalSize) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.client + .api(this.uploadSession.url) + .headers({ + "Content-Length": "".concat(range.maxValue - range.minValue + 1), + "Content-Range": "bytes ".concat(range.minValue, "-").concat(range.maxValue, "/").concat(totalSize), + "Content-Type": "application/octet-stream", + }) + .responseType(ResponseType_1.ResponseType.RAW) + .put(fileSlice)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Deletes upload session in the server + * @returns The promise resolves to cancelled response + */ + LargeFileUploadTask.prototype.cancel = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var cancelResponse; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.client + .api(this.uploadSession.url) + .responseType(ResponseType_1.ResponseType.RAW) + .delete()]; + case 1: + cancelResponse = _a.sent(); + if (cancelResponse.status === 204) { + this.uploadSession.isCancelled = true; + } + return [2 /*return*/, cancelResponse]; + } + }); + }); + }; + /** + * @public + * @async + * Gets status for the upload session + * @returns The promise resolves to the status enquiry response + */ + LargeFileUploadTask.prototype.getStatus = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var response; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.client.api(this.uploadSession.url).get()]; + case 1: + response = _a.sent(); + this.updateTaskStatus(response); + return [2 /*return*/, response]; + } + }); + }); + }; + /** + * @public + * @async + * Resumes upload session and continue uploading the file from the last sent range + * @returns The promise resolves to the uploaded response + */ + LargeFileUploadTask.prototype.resume = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.getStatus()]; + case 1: + _a.sent(); + return [4 /*yield*/, this.upload()]; + case 2: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @public + * @async + * Get the upload session information + * @returns The large file upload session + */ + LargeFileUploadTask.prototype.getUploadSession = function () { + return this.uploadSession; + }; + return LargeFileUploadTask; +}()); +exports.LargeFileUploadTask = LargeFileUploadTask; +//# sourceMappingURL=LargeFileUploadTask.js.map + +/***/ }), + +/***/ 8139: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OneDriveLargeFileUploadTask = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @module OneDriveLargeFileUploadTask + */ +var GraphClientError_1 = __nccwpck_require__(4896); +var FileUpload_1 = __nccwpck_require__(8242); +var LargeFileUploadTask_1 = __nccwpck_require__(5755); +var OneDriveLargeFileUploadTaskUtil_1 = __nccwpck_require__(8159); +/** + * @class + * Class representing OneDriveLargeFileUploadTask + */ +var OneDriveLargeFileUploadTask = /** @class */ (function (_super) { + tslib_1.__extends(OneDriveLargeFileUploadTask, _super); + /** + * @public + * @constructor + * Constructs a OneDriveLargeFileUploadTask + * @param {Client} client - The GraphClient instance + * @param {FileObject} file - The FileObject holding details of a file that needs to be uploaded + * @param {LargeFileUploadSession} uploadSession - The upload session to which the upload has to be done + * @param {LargeFileUploadTaskOptions} options - The upload task options + * @returns An instance of OneDriveLargeFileUploadTask + */ + function OneDriveLargeFileUploadTask(client, file, uploadSession, options) { + return _super.call(this, client, file, uploadSession, options) || this; + } + /** + * @private + * @static + * Constructs the create session url for Onedrive + * @param {string} fileName - The name of the file + * @param {path} [path = OneDriveLargeFileUploadTask.DEFAULT_UPLOAD_PATH] - The path for the upload + * @returns The constructed create session url + */ + OneDriveLargeFileUploadTask.constructCreateSessionUrl = function (fileName, path) { + if (path === void 0) { path = OneDriveLargeFileUploadTask.DEFAULT_UPLOAD_PATH; } + fileName = fileName.trim(); + path = path.trim(); + if (path === "") { + path = "/"; + } + if (path[0] !== "/") { + path = "/".concat(path); + } + if (path[path.length - 1] !== "/") { + path = "".concat(path, "/"); + } + // we choose to encode each component of the file path separately because when encoding full URI + // with encodeURI, special characters like # or % in the file name doesn't get encoded as desired + return "/me/drive/root:".concat(path + .split("/") + .map(function (p) { return encodeURIComponent(p); }) + .join("/")).concat(encodeURIComponent(fileName), ":/createUploadSession"); + }; + /** + * @private + * @static + * Get file information + * @param {Blob | Uint8Array | File} file - The file entity + * @param {string} fileName - The file name + * @returns {FileInfo} The file information + */ + OneDriveLargeFileUploadTask.getFileInfo = function (file, fileName) { + var content; + var size; + if (typeof Blob !== "undefined" && file instanceof Blob) { + content = new File([file], fileName); + size = content.size; + } + else if (typeof File !== "undefined" && file instanceof File) { + content = file; + size = content.size; + } + else if (typeof Uint8Array !== "undefined" && file instanceof Uint8Array) { + var b = file; + size = b.byteLength; + content = b.buffer.slice(b.byteOffset, b.byteOffset + b.byteLength); + } + return { + content: content, + size: size, + }; + }; + /** + * @public + * @static + * @async + * Creates a OneDriveLargeFileUploadTask + * @param {Client} client - The GraphClient instance + * @param {Blob | Uint8Array | File} file - File represented as Blob, Uint8Array or File + * @param {OneDriveLargeFileUploadOptions} options - The options for upload task + * @returns The promise that will be resolves to OneDriveLargeFileUploadTask instance + */ + OneDriveLargeFileUploadTask.create = function (client, file, options) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var fileName, fileInfo, fileObj; + return tslib_1.__generator(this, function (_a) { + if (!client || !file || !options) { + throw new GraphClientError_1.GraphClientError("Please provide the Graph client instance, file object and OneDriveLargeFileUploadOptions value"); + } + fileName = options.fileName; + fileInfo = OneDriveLargeFileUploadTask.getFileInfo(file, fileName); + fileObj = new FileUpload_1.FileUpload(fileInfo.content, fileName, fileInfo.size); + return [2 /*return*/, this.createTaskWithFileObject(client, fileObj, options)]; + }); + }); + }; + /** + * @public + * @static + * @async + * Creates a OneDriveLargeFileUploadTask + * @param {Client} client - The GraphClient instance + * @param {FileObject} fileObject - FileObject instance + * @param {OneDriveLargeFileUploadOptions} options - The options for upload task + * @returns The promise that will be resolves to OneDriveLargeFileUploadTask instance + */ + OneDriveLargeFileUploadTask.createTaskWithFileObject = function (client, fileObject, options) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var requestUrl, uploadSessionPayload, session, rangeSize; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!client || !fileObject || !options) { + throw new GraphClientError_1.GraphClientError("Please provide the Graph client instance, FileObject interface implementation and OneDriveLargeFileUploadOptions value"); + } + requestUrl = options.uploadSessionURL ? options.uploadSessionURL : OneDriveLargeFileUploadTask.constructCreateSessionUrl(options.fileName, options.path); + uploadSessionPayload = { + fileName: options.fileName, + fileDescription: options.fileDescription, + conflictBehavior: options.conflictBehavior, + }; + return [4 /*yield*/, OneDriveLargeFileUploadTask.createUploadSession(client, requestUrl, uploadSessionPayload)]; + case 1: + session = _a.sent(); + rangeSize = (0, OneDriveLargeFileUploadTaskUtil_1.getValidRangeSize)(options.rangeSize); + return [2 /*return*/, new OneDriveLargeFileUploadTask(client, fileObject, session, { + rangeSize: rangeSize, + uploadEventHandlers: options.uploadEventHandlers, + })]; + } + }); + }); + }; + /** + * @public + * @static + * @async + * Makes request to the server to create an upload session + * @param {Client} client - The GraphClient instance + * @param {string} requestUrl - The URL to create the upload session + * @param {string} payloadOptions - The payload option. Default conflictBehavior is 'rename' + * @returns The promise that resolves to LargeFileUploadSession + */ + OneDriveLargeFileUploadTask.createUploadSession = function (client, requestUrl, payloadOptions) { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var payload; + return tslib_1.__generator(this, function (_a) { + payload = { + item: { + "@microsoft.graph.conflictBehavior": (payloadOptions === null || payloadOptions === void 0 ? void 0 : payloadOptions.conflictBehavior) || "rename", + name: payloadOptions === null || payloadOptions === void 0 ? void 0 : payloadOptions.fileName, + description: payloadOptions === null || payloadOptions === void 0 ? void 0 : payloadOptions.fileDescription, + }, + }; + return [2 /*return*/, _super.createUploadSession.call(this, client, requestUrl, payload)]; + }); + }); + }; + /** + * @public + * Commits upload session to end uploading + * @param {string} requestUrl - The URL to commit the upload session + * @param {string} conflictBehavior - Conflict behaviour option. Default is 'rename' + * @returns The promise resolves to committed response + */ + OneDriveLargeFileUploadTask.prototype.commit = function (requestUrl, conflictBehavior) { + if (conflictBehavior === void 0) { conflictBehavior = "rename"; } + return tslib_1.__awaiter(this, void 0, void 0, function () { + var payload; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + payload = { + name: this.file.name, + "@microsoft.graph.conflictBehavior": conflictBehavior, + "@microsoft.graph.sourceUrl": this.uploadSession.url, + }; + return [4 /*yield*/, this.client.api(requestUrl).put(payload)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + /** + * @private + * @static + * Default path for the file being uploaded + */ + OneDriveLargeFileUploadTask.DEFAULT_UPLOAD_PATH = "/"; + return OneDriveLargeFileUploadTask; +}(LargeFileUploadTask_1.LargeFileUploadTask)); +exports.OneDriveLargeFileUploadTask = OneDriveLargeFileUploadTask; +//# sourceMappingURL=OneDriveLargeFileUploadTask.js.map + +/***/ }), + +/***/ 8159: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getValidRangeSize = void 0; +/** + * @module OneDriveLargeFileUploadTaskUtil + */ +/** + * @constant + * Default value for the rangeSize + * Recommended size is between 5 - 10 MB {@link https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/driveitem_createuploadsession#best-practices} + */ +var DEFAULT_FILE_SIZE = 5 * 1024 * 1024; +/** + * @constant + * Rounds off the given value to a multiple of 320 KB + * @param {number} value - The value + * @returns The rounded off value + */ +var roundTo320KB = function (value) { + if (value > 320 * 1024) { + value = Math.floor(value / (320 * 1024)) * 320 * 1024; + } + return value; +}; +/** + * @constant + * Get the valid rangeSize for a file slicing (validity is based on the constrains mentioned in here + * {@link https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/driveitem_createuploadsession#upload-bytes-to-the-upload-session}) + * + * @param {number} [rangeSize = DEFAULT_FILE_SIZE] - The rangeSize value. + * @returns The valid rangeSize + */ +var getValidRangeSize = function (rangeSize) { + if (rangeSize === void 0) { rangeSize = DEFAULT_FILE_SIZE; } + var sixtyMB = 60 * 1024 * 1024; + if (rangeSize > sixtyMB) { + rangeSize = sixtyMB; + } + return roundTo320KB(rangeSize); +}; +exports.getValidRangeSize = getValidRangeSize; +//# sourceMappingURL=OneDriveLargeFileUploadTaskUtil.js.map + +/***/ }), + +/***/ 1881: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +/** + * ------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. + * See License in the project root for license information. + * ------------------------------------------------------------------------------------------- + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PageIterator = void 0; +var tslib_1 = __nccwpck_require__(1860); +/** + * @class + * Class for PageIterator + */ +var PageIterator = /** @class */ (function () { + /** + * @public + * @constructor + * Creates new instance for PageIterator + * @param {Client} client - The graph client instance + * @param {PageCollection} pageCollection - The page collection object + * @param {PageIteratorCallback} callBack - The callback function + * @param {GraphRequestOptions} requestOptions - The request options + * @returns An instance of a PageIterator + */ + function PageIterator(client, pageCollection, callback, requestOptions) { + this.client = client; + this.collection = pageCollection.value; + this.nextLink = pageCollection["@odata.nextLink"]; + this.deltaLink = pageCollection["@odata.deltaLink"]; + this.callback = callback; + this.cursor = 0; + this.complete = false; + this.requestOptions = requestOptions; + } + /** + * @private + * Iterates over a collection by enqueuing entries one by one and kicking the callback with the enqueued entry + * @returns A boolean indicating the continue flag to process next page + */ + PageIterator.prototype.iterationHelper = function () { + if (this.collection === undefined) { + return false; + } + var advance = true; + while (advance && this.cursor < this.collection.length) { + var item = this.collection[this.cursor]; + advance = this.callback(item); + this.cursor++; + } + return advance; + }; + /** + * @private + * @async + * Helper to make a get request to fetch next page with nextLink url and update the page iterator instance with the returned response + * @returns A promise that resolves to a response data with next page collection + */ + PageIterator.prototype.fetchAndUpdateNextPageData = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var graphRequest, response; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + graphRequest = this.client.api(this.nextLink); + if (this.requestOptions) { + if (this.requestOptions.headers) { + graphRequest = graphRequest.headers(this.requestOptions.headers); + } + if (this.requestOptions.middlewareOptions) { + graphRequest = graphRequest.middlewareOptions(this.requestOptions.middlewareOptions); + } + if (this.requestOptions.options) { + graphRequest = graphRequest.options(this.requestOptions.options); + } + } + return [4 /*yield*/, graphRequest.get()]; + case 1: + response = _a.sent(); + this.collection = response.value; + this.cursor = 0; + this.nextLink = response["@odata.nextLink"]; + this.deltaLink = response["@odata.deltaLink"]; + return [2 /*return*/]; + } + }); + }); + }; + /** + * @public + * Getter to get the deltaLink in the current response + * @returns A deltaLink which is being used to make delta requests in future + */ + PageIterator.prototype.getDeltaLink = function () { + return this.deltaLink; + }; + /** + * @public + * @async + * Iterates over the collection and kicks callback for each item on iteration. Fetches next set of data through nextLink and iterates over again + * This happens until the nextLink is drained out or the user responds with a red flag to continue from callback + * @returns A Promise that resolves to nothing on completion and throws error incase of any discrepancy. + */ + PageIterator.prototype.iterate = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var advance; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + advance = this.iterationHelper(); + _a.label = 1; + case 1: + if (!advance) return [3 /*break*/, 5]; + if (!(this.nextLink !== undefined)) return [3 /*break*/, 3]; + return [4 /*yield*/, this.fetchAndUpdateNextPageData()]; + case 2: + _a.sent(); + advance = this.iterationHelper(); + return [3 /*break*/, 4]; + case 3: + advance = false; + _a.label = 4; + case 4: return [3 /*break*/, 1]; + case 5: + if (this.nextLink === undefined && this.cursor >= this.collection.length) { + this.complete = true; + } + return [2 /*return*/]; + } + }); + }); + }; + /** + * @public + * @async + * To resume the iteration + * Note: This internally calls the iterate method, It's just for more readability. + * @returns A Promise that resolves to nothing on completion and throws error incase of any discrepancy + */ + PageIterator.prototype.resume = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + return tslib_1.__generator(this, function (_a) { + return [2 /*return*/, this.iterate()]; + }); + }); + }; + /** + * @public + * To get the completeness status of the iterator + * @returns Boolean indicating the completeness + */ + PageIterator.prototype.isComplete = function () { + return this.complete; + }; + return PageIterator; +}()); +exports.PageIterator = PageIterator; +//# sourceMappingURL=PageIterator.js.map + +/***/ }), + +/***/ 5183: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.req = exports.json = exports.toBuffer = void 0; +const http = __importStar(__nccwpck_require__(8611)); +const https = __importStar(__nccwpck_require__(5692)); +async function toBuffer(stream) { + let length = 0; + const chunks = []; + for await (const chunk of stream) { + length += chunk.length; + chunks.push(chunk); + } + return Buffer.concat(chunks, length); +} +exports.toBuffer = toBuffer; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +async function json(stream) { + const buf = await toBuffer(stream); + const str = buf.toString('utf8'); + try { + return JSON.parse(str); + } + catch (_err) { + const err = _err; + err.message += ` (input: ${str})`; + throw err; + } +} +exports.json = json; +function req(url, opts = {}) { + const href = typeof url === 'string' ? url : url.href; + const req = (href.startsWith('https:') ? https : http).request(url, opts); + const promise = new Promise((resolve, reject) => { + req + .once('response', resolve) + .once('error', reject) + .end(); + }); + req.then = promise.then.bind(promise); + return req; +} +exports.req = req; +//# sourceMappingURL=helpers.js.map + +/***/ }), + +/***/ 8894: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +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.Agent = void 0; +const net = __importStar(__nccwpck_require__(9278)); +const http = __importStar(__nccwpck_require__(8611)); +const https_1 = __nccwpck_require__(5692); +__exportStar(__nccwpck_require__(5183), exports); +const INTERNAL = Symbol('AgentBaseInternalState'); +class Agent extends http.Agent { + constructor(opts) { + super(opts); + this[INTERNAL] = {}; + } + /** + * Determine whether this is an `http` or `https` request. + */ + isSecureEndpoint(options) { + if (options) { + // First check the `secureEndpoint` property explicitly, since this + // means that a parent `Agent` is "passing through" to this instance. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (typeof options.secureEndpoint === 'boolean') { + return options.secureEndpoint; + } + // If no explicit `secure` endpoint, check if `protocol` property is + // set. This will usually be the case since using a full string URL + // or `URL` instance should be the most common usage. + if (typeof options.protocol === 'string') { + return options.protocol === 'https:'; + } + } + // Finally, if no `protocol` property was set, then fall back to + // checking the stack trace of the current call stack, and try to + // detect the "https" module. + const { stack } = new Error(); + if (typeof stack !== 'string') + return false; + return stack + .split('\n') + .some((l) => l.indexOf('(https.js:') !== -1 || + l.indexOf('node:https:') !== -1); + } + // In order to support async signatures in `connect()` and Node's native + // connection pooling in `http.Agent`, the array of sockets for each origin + // has to be updated synchronously. This is so the length of the array is + // accurate when `addRequest()` is next called. We achieve this by creating a + // fake socket and adding it to `sockets[origin]` and incrementing + // `totalSocketCount`. + incrementSockets(name) { + // If `maxSockets` and `maxTotalSockets` are both Infinity then there is no + // need to create a fake socket because Node.js native connection pooling + // will never be invoked. + if (this.maxSockets === Infinity && this.maxTotalSockets === Infinity) { + return null; + } + // All instances of `sockets` are expected TypeScript errors. The + // alternative is to add it as a private property of this class but that + // will break TypeScript subclassing. + if (!this.sockets[name]) { + // @ts-expect-error `sockets` is readonly in `@types/node` + this.sockets[name] = []; + } + const fakeSocket = new net.Socket({ writable: false }); + this.sockets[name].push(fakeSocket); + // @ts-expect-error `totalSocketCount` isn't defined in `@types/node` + this.totalSocketCount++; + return fakeSocket; + } + decrementSockets(name, socket) { + if (!this.sockets[name] || socket === null) { + return; + } + const sockets = this.sockets[name]; + const index = sockets.indexOf(socket); + if (index !== -1) { + sockets.splice(index, 1); + // @ts-expect-error `totalSocketCount` isn't defined in `@types/node` + this.totalSocketCount--; + if (sockets.length === 0) { + // @ts-expect-error `sockets` is readonly in `@types/node` + delete this.sockets[name]; + } + } + } + // In order to properly update the socket pool, we need to call `getName()` on + // the core `https.Agent` if it is a secureEndpoint. + getName(options) { + const secureEndpoint = typeof options.secureEndpoint === 'boolean' + ? options.secureEndpoint + : this.isSecureEndpoint(options); + if (secureEndpoint) { + // @ts-expect-error `getName()` isn't defined in `@types/node` + return https_1.Agent.prototype.getName.call(this, options); + } + // @ts-expect-error `getName()` isn't defined in `@types/node` + return super.getName(options); + } + createSocket(req, options, cb) { + const connectOpts = { + ...options, + secureEndpoint: this.isSecureEndpoint(options), + }; + const name = this.getName(connectOpts); + const fakeSocket = this.incrementSockets(name); + Promise.resolve() + .then(() => this.connect(req, connectOpts)) + .then((socket) => { + this.decrementSockets(name, fakeSocket); + if (socket instanceof http.Agent) { + // @ts-expect-error `addRequest()` isn't defined in `@types/node` + return socket.addRequest(req, connectOpts); + } + this[INTERNAL].currentSocket = socket; + // @ts-expect-error `createSocket()` isn't defined in `@types/node` + super.createSocket(req, options, cb); + }, (err) => { + this.decrementSockets(name, fakeSocket); + cb(err); + }); + } + createConnection() { + const socket = this[INTERNAL].currentSocket; + this[INTERNAL].currentSocket = undefined; + if (!socket) { + throw new Error('No socket was returned in the `connect()` function'); + } + return socket; + } + get defaultPort() { + return (this[INTERNAL].defaultPort ?? + (this.protocol === 'https:' ? 443 : 80)); + } + set defaultPort(v) { + if (this[INTERNAL]) { + this[INTERNAL].defaultPort = v; + } + } + get protocol() { + return (this[INTERNAL].protocol ?? + (this.isSecureEndpoint() ? 'https:' : 'http:')); + } + set protocol(v) { + if (this[INTERNAL]) { + this[INTERNAL].protocol = v; + } + } +} +exports.Agent = Agent; +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 7351: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +/*jshint node:true */ + +var Buffer = (__nccwpck_require__(181).Buffer); // browserify +var SlowBuffer = (__nccwpck_require__(181).SlowBuffer); + +module.exports = bufferEq; + +function bufferEq(a, b) { + + // shortcutting on type is necessary for correctness + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + return false; + } + + // buffer sizes should be well-known information, so despite this + // shortcutting, it doesn't leak any information about the *contents* of the + // buffers. + if (a.length !== b.length) { + return false; + } + + var c = 0; + for (var i = 0; i < a.length; i++) { + /*jshint bitwise:false */ + c |= a[i] ^ b[i]; // XOR + } + return c === 0; +} + +bufferEq.install = function() { + Buffer.prototype.equal = SlowBuffer.prototype.equal = function equal(that) { + return bufferEq(this, that); + }; +}; + +var origBufEqual = Buffer.prototype.equal; +var origSlowBufEqual = SlowBuffer.prototype.equal; +bufferEq.restore = function() { + Buffer.prototype.equal = origBufEqual; + SlowBuffer.prototype.equal = origSlowBufEqual; +}; + + +/***/ }), + +/***/ 6110: +/***/ ((module, exports, __nccwpck_require__) => { + +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ + +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); +exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +})(); + +/** + * Colors. + */ + +exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ +exports.log = console.debug || console.log || (() => {}); + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ +function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = __nccwpck_require__(897)(exports); + +const {formatters} = module.exports; + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; + + +/***/ }), + +/***/ 897: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = __nccwpck_require__(744); + createDebug.destroy = destroy; + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); + + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + + return createDebug; +} + +module.exports = setup; + + +/***/ }), + +/***/ 2830: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + module.exports = __nccwpck_require__(6110); +} else { + module.exports = __nccwpck_require__(5108); +} + + +/***/ }), + +/***/ 5108: +/***/ ((module, exports, __nccwpck_require__) => { + +/** + * Module dependencies. + */ + +const tty = __nccwpck_require__(2018); +const util = __nccwpck_require__(9023); + +/** + * This is the Node.js implementation of `debug()`. + */ + +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.destroy = util.deprecate( + () => {}, + 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' +); + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = __nccwpck_require__(1450); + + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } +} catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. +} + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); +}).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); + + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } + + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); +} + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + const {namespace: name, useColors} = this; + + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; +} + +/** + * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr. + */ + +function log(...args) { + return process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init(debug) { + debug.inspectOpts = {}; + + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +module.exports = __nccwpck_require__(897)(exports); + +const {formatters} = module.exports; + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n') + .map(str => str.trim()) + .join(' '); +}; + +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ + +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + + +/***/ }), + +/***/ 5789: +/***/ ((module) => { + +"use strict"; + +module.exports = (object, propertyName, fn) => { + const define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true}); + + Object.defineProperty(object, propertyName, { + configurable: true, + enumerable: true, + get() { + const result = fn(); + define(result); + return result; + }, + set(value) { + define(value); + } + }); + + return object; +}; + + +/***/ }), + +/***/ 325: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Buffer = (__nccwpck_require__(3058).Buffer); + +var getParamBytesForAlg = __nccwpck_require__(5028); + +var MAX_OCTET = 0x80, + CLASS_UNIVERSAL = 0, + PRIMITIVE_BIT = 0x20, + TAG_SEQ = 0x10, + TAG_INT = 0x02, + ENCODED_TAG_SEQ = (TAG_SEQ | PRIMITIVE_BIT) | (CLASS_UNIVERSAL << 6), + ENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6); + +function base64Url(base64) { + return base64 + .replace(/=/g, '') + .replace(/\+/g, '-') + .replace(/\//g, '_'); +} + +function signatureAsBuffer(signature) { + if (Buffer.isBuffer(signature)) { + return signature; + } else if ('string' === typeof signature) { + return Buffer.from(signature, 'base64'); + } + + throw new TypeError('ECDSA signature must be a Base64 string or a Buffer'); +} + +function derToJose(signature, alg) { + signature = signatureAsBuffer(signature); + var paramBytes = getParamBytesForAlg(alg); + + // the DER encoded param should at most be the param size, plus a padding + // zero, since due to being a signed integer + var maxEncodedParamLength = paramBytes + 1; + + var inputLength = signature.length; + + var offset = 0; + if (signature[offset++] !== ENCODED_TAG_SEQ) { + throw new Error('Could not find expected "seq"'); + } + + var seqLength = signature[offset++]; + if (seqLength === (MAX_OCTET | 1)) { + seqLength = signature[offset++]; + } + + if (inputLength - offset < seqLength) { + throw new Error('"seq" specified length of "' + seqLength + '", only "' + (inputLength - offset) + '" remaining'); + } + + if (signature[offset++] !== ENCODED_TAG_INT) { + throw new Error('Could not find expected "int" for "r"'); + } + + var rLength = signature[offset++]; + + if (inputLength - offset - 2 < rLength) { + throw new Error('"r" specified length of "' + rLength + '", only "' + (inputLength - offset - 2) + '" available'); + } + + if (maxEncodedParamLength < rLength) { + throw new Error('"r" specified length of "' + rLength + '", max of "' + maxEncodedParamLength + '" is acceptable'); + } + + var rOffset = offset; + offset += rLength; + + if (signature[offset++] !== ENCODED_TAG_INT) { + throw new Error('Could not find expected "int" for "s"'); + } + + var sLength = signature[offset++]; + + if (inputLength - offset !== sLength) { + throw new Error('"s" specified length of "' + sLength + '", expected "' + (inputLength - offset) + '"'); + } + + if (maxEncodedParamLength < sLength) { + throw new Error('"s" specified length of "' + sLength + '", max of "' + maxEncodedParamLength + '" is acceptable'); + } + + var sOffset = offset; + offset += sLength; + + if (offset !== inputLength) { + throw new Error('Expected to consume entire buffer, but "' + (inputLength - offset) + '" bytes remain'); + } + + var rPadding = paramBytes - rLength, + sPadding = paramBytes - sLength; + + var dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength); + + for (offset = 0; offset < rPadding; ++offset) { + dst[offset] = 0; + } + signature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength); + + offset = paramBytes; + + for (var o = offset; offset < o + sPadding; ++offset) { + dst[offset] = 0; + } + signature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength); + + dst = dst.toString('base64'); + dst = base64Url(dst); + + return dst; +} + +function countPadding(buf, start, stop) { + var padding = 0; + while (start + padding < stop && buf[start + padding] === 0) { + ++padding; + } + + var needsSign = buf[start + padding] >= MAX_OCTET; + if (needsSign) { + --padding; + } + + return padding; +} + +function joseToDer(signature, alg) { + signature = signatureAsBuffer(signature); + var paramBytes = getParamBytesForAlg(alg); + + var signatureBytes = signature.length; + if (signatureBytes !== paramBytes * 2) { + throw new TypeError('"' + alg + '" signatures must be "' + paramBytes * 2 + '" bytes, saw "' + signatureBytes + '"'); + } + + var rPadding = countPadding(signature, 0, paramBytes); + var sPadding = countPadding(signature, paramBytes, signature.length); + var rLength = paramBytes - rPadding; + var sLength = paramBytes - sPadding; + + var rsBytes = 1 + 1 + rLength + 1 + 1 + sLength; + + var shortLength = rsBytes < MAX_OCTET; + + var dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes); + + var offset = 0; + dst[offset++] = ENCODED_TAG_SEQ; + if (shortLength) { + // Bit 8 has value "0" + // bits 7-1 give the length. + dst[offset++] = rsBytes; + } else { + // Bit 8 of first octet has value "1" + // bits 7-1 give the number of additional length octets. + dst[offset++] = MAX_OCTET | 1; + // length, base 256 + dst[offset++] = rsBytes & 0xff; + } + dst[offset++] = ENCODED_TAG_INT; + dst[offset++] = rLength; + if (rPadding < 0) { + dst[offset++] = 0; + offset += signature.copy(dst, offset, 0, paramBytes); + } else { + offset += signature.copy(dst, offset, rPadding, paramBytes); + } + dst[offset++] = ENCODED_TAG_INT; + dst[offset++] = sLength; + if (sPadding < 0) { + dst[offset++] = 0; + signature.copy(dst, offset, paramBytes); + } else { + signature.copy(dst, offset, paramBytes + sPadding); + } + + return dst; +} + +module.exports = { + derToJose: derToJose, + joseToDer: joseToDer +}; + + +/***/ }), + +/***/ 5028: +/***/ ((module) => { + +"use strict"; + + +function getParamSize(keySize) { + var result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1); + return result; +} + +var paramBytesForAlg = { + ES256: getParamSize(256), + ES384: getParamSize(384), + ES512: getParamSize(521) +}; + +function getParamBytesForAlg(alg) { + var paramBytes = paramBytesForAlg[alg]; + if (paramBytes) { + return paramBytes; + } + + throw new Error('Unknown algorithm "' + alg + '"'); +} + +module.exports = getParamBytesForAlg; + + +/***/ }), + +/***/ 3813: +/***/ ((module) => { + +"use strict"; + + +module.exports = (flag, argv = process.argv) => { + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf('--'); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); +}; + + +/***/ }), + +/***/ 1970: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.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.HttpProxyAgent = void 0; +const net = __importStar(__nccwpck_require__(9278)); +const tls = __importStar(__nccwpck_require__(4756)); +const debug_1 = __importDefault(__nccwpck_require__(2830)); +const events_1 = __nccwpck_require__(4434); +const agent_base_1 = __nccwpck_require__(8894); +const url_1 = __nccwpck_require__(7016); +const debug = (0, debug_1.default)('http-proxy-agent'); +/** + * The `HttpProxyAgent` implements an HTTP Agent subclass that connects + * to the specified "HTTP proxy server" in order to proxy HTTP requests. + */ +class HttpProxyAgent extends agent_base_1.Agent { + constructor(proxy, opts) { + super(opts); + this.proxy = typeof proxy === 'string' ? new url_1.URL(proxy) : proxy; + this.proxyHeaders = opts?.headers ?? {}; + debug('Creating new HttpProxyAgent instance: %o', this.proxy.href); + // Trim off the brackets from IPv6 addresses + const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ''); + const port = this.proxy.port + ? parseInt(this.proxy.port, 10) + : this.proxy.protocol === 'https:' + ? 443 + : 80; + this.connectOpts = { + ...(opts ? omit(opts, 'headers') : null), + host, + port, + }; + } + addRequest(req, opts) { + req._header = null; + this.setRequestProps(req, opts); + // @ts-expect-error `addRequest()` isn't defined in `@types/node` + super.addRequest(req, opts); + } + setRequestProps(req, opts) { + const { proxy } = this; + const protocol = opts.secureEndpoint ? 'https:' : 'http:'; + const hostname = req.getHeader('host') || 'localhost'; + const base = `${protocol}//${hostname}`; + const url = new url_1.URL(req.path, base); + if (opts.port !== 80) { + url.port = String(opts.port); + } + // Change the `http.ClientRequest` instance's "path" field + // to the absolute path of the URL that will be requested. + req.path = String(url); + // Inject the `Proxy-Authorization` header if necessary. + const headers = typeof this.proxyHeaders === 'function' + ? this.proxyHeaders() + : { ...this.proxyHeaders }; + if (proxy.username || proxy.password) { + const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`; + headers['Proxy-Authorization'] = `Basic ${Buffer.from(auth).toString('base64')}`; + } + if (!headers['Proxy-Connection']) { + headers['Proxy-Connection'] = this.keepAlive + ? 'Keep-Alive' + : 'close'; + } + for (const name of Object.keys(headers)) { + const value = headers[name]; + if (value) { + req.setHeader(name, value); + } + } + } + async connect(req, opts) { + req._header = null; + if (!req.path.includes('://')) { + this.setRequestProps(req, opts); + } + // At this point, the http ClientRequest's internal `_header` field + // might have already been set. If this is the case then we'll need + // to re-generate the string since we just changed the `req.path`. + let first; + let endOfHeaders; + debug('Regenerating stored HTTP header string for request'); + req._implicitHeader(); + if (req.outputData && req.outputData.length > 0) { + debug('Patching connection write() output buffer with updated header'); + first = req.outputData[0].data; + endOfHeaders = first.indexOf('\r\n\r\n') + 4; + req.outputData[0].data = + req._header + first.substring(endOfHeaders); + debug('Output buffer: %o', req.outputData[0].data); + } + // Create a socket connection to the proxy server. + let socket; + if (this.proxy.protocol === 'https:') { + debug('Creating `tls.Socket`: %o', this.connectOpts); + socket = tls.connect(this.connectOpts); + } + else { + debug('Creating `net.Socket`: %o', this.connectOpts); + socket = net.connect(this.connectOpts); + } + // Wait for the socket's `connect` event, so that this `callback()` + // function throws instead of the `http` request machinery. This is + // important for i.e. `PacProxyAgent` which determines a failed proxy + // connection via the `callback()` function throwing. + await (0, events_1.once)(socket, 'connect'); + return socket; + } +} +HttpProxyAgent.protocols = ['http', 'https']; +exports.HttpProxyAgent = HttpProxyAgent; +function omit(obj, ...keys) { + const ret = {}; + let key; + for (key in obj) { + if (!keys.includes(key)) { + ret[key] = obj[key]; + } + } + return ret; +} +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 3669: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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.prototype.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.HttpsProxyAgent = void 0; +const net = __importStar(__nccwpck_require__(9278)); +const tls = __importStar(__nccwpck_require__(4756)); +const assert_1 = __importDefault(__nccwpck_require__(2613)); +const debug_1 = __importDefault(__nccwpck_require__(2830)); +const agent_base_1 = __nccwpck_require__(8894); +const url_1 = __nccwpck_require__(7016); +const parse_proxy_response_1 = __nccwpck_require__(7943); +const debug = (0, debug_1.default)('https-proxy-agent'); +/** + * The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to + * the specified "HTTP(s) proxy server" in order to proxy HTTPS requests. + * + * Outgoing HTTP requests are first tunneled through the proxy server using the + * `CONNECT` HTTP request method to establish a connection to the proxy server, + * and then the proxy server connects to the destination target and issues the + * HTTP request from the proxy server. + * + * `https:` requests have their socket connection upgraded to TLS once + * the connection to the proxy server has been established. + */ +class HttpsProxyAgent extends agent_base_1.Agent { + constructor(proxy, opts) { + super(opts); + this.options = { path: undefined }; + this.proxy = typeof proxy === 'string' ? new url_1.URL(proxy) : proxy; + this.proxyHeaders = opts?.headers ?? {}; + debug('Creating new HttpsProxyAgent instance: %o', this.proxy.href); + // Trim off the brackets from IPv6 addresses + const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ''); + const port = this.proxy.port + ? parseInt(this.proxy.port, 10) + : this.proxy.protocol === 'https:' + ? 443 + : 80; + this.connectOpts = { + // Attempt to negotiate http/1.1 for proxy servers that support http/2 + ALPNProtocols: ['http/1.1'], + ...(opts ? omit(opts, 'headers') : null), + host, + port, + }; + } + /** + * Called when the node-core HTTP client library is creating a + * new HTTP request. + */ + async connect(req, opts) { + const { proxy } = this; + if (!opts.host) { + throw new TypeError('No "host" provided'); + } + // Create a socket connection to the proxy server. + let socket; + if (proxy.protocol === 'https:') { + debug('Creating `tls.Socket`: %o', this.connectOpts); + const servername = this.connectOpts.servername || this.connectOpts.host; + socket = tls.connect({ + ...this.connectOpts, + servername: servername && net.isIP(servername) ? undefined : servername, + }); + } + else { + debug('Creating `net.Socket`: %o', this.connectOpts); + socket = net.connect(this.connectOpts); + } + const headers = typeof this.proxyHeaders === 'function' + ? this.proxyHeaders() + : { ...this.proxyHeaders }; + const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host; + let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\r\n`; + // Inject the `Proxy-Authorization` header if necessary. + if (proxy.username || proxy.password) { + const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`; + headers['Proxy-Authorization'] = `Basic ${Buffer.from(auth).toString('base64')}`; + } + headers.Host = `${host}:${opts.port}`; + if (!headers['Proxy-Connection']) { + headers['Proxy-Connection'] = this.keepAlive + ? 'Keep-Alive' + : 'close'; + } + for (const name of Object.keys(headers)) { + payload += `${name}: ${headers[name]}\r\n`; + } + const proxyResponsePromise = (0, parse_proxy_response_1.parseProxyResponse)(socket); + socket.write(`${payload}\r\n`); + const { connect, buffered } = await proxyResponsePromise; + req.emit('proxyConnect', connect); + this.emit('proxyConnect', connect, req); + if (connect.statusCode === 200) { + req.once('socket', resume); + if (opts.secureEndpoint) { + // The proxy is connecting to a TLS server, so upgrade + // this socket connection to a TLS connection. + debug('Upgrading socket connection to TLS'); + const servername = opts.servername || opts.host; + return tls.connect({ + ...omit(opts, 'host', 'path', 'port'), + socket, + servername: net.isIP(servername) ? undefined : servername, + }); + } + return socket; + } + // Some other status code that's not 200... need to re-play the HTTP + // header "data" events onto the socket once the HTTP machinery is + // attached so that the node core `http` can parse and handle the + // error status code. + // Close the original socket, and a new "fake" socket is returned + // instead, so that the proxy doesn't get the HTTP request + // written to it (which may contain `Authorization` headers or other + // sensitive data). + // + // See: https://hackerone.com/reports/541502 + socket.destroy(); + const fakeSocket = new net.Socket({ writable: false }); + fakeSocket.readable = true; + // Need to wait for the "socket" event to re-play the "data" events. + req.once('socket', (s) => { + debug('Replaying proxy buffer for failed request'); + (0, assert_1.default)(s.listenerCount('data') > 0); + // Replay the "buffered" Buffer onto the fake `socket`, since at + // this point the HTTP module machinery has been hooked up for + // the user. + s.push(buffered); + s.push(null); + }); + return fakeSocket; + } +} +HttpsProxyAgent.protocols = ['http', 'https']; +exports.HttpsProxyAgent = HttpsProxyAgent; +function resume(socket) { + socket.resume(); +} +function omit(obj, ...keys) { + const ret = {}; + let key; + for (key in obj) { + if (!keys.includes(key)) { + ret[key] = obj[key]; + } + } + return ret; +} +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 7943: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.parseProxyResponse = void 0; +const debug_1 = __importDefault(__nccwpck_require__(2830)); +const debug = (0, debug_1.default)('https-proxy-agent:parse-proxy-response'); +function parseProxyResponse(socket) { + return new Promise((resolve, reject) => { + // we need to buffer any HTTP traffic that happens with the proxy before we get + // the CONNECT response, so that if the response is anything other than an "200" + // response code, then we can re-play the "data" events on the socket once the + // HTTP parser is hooked up... + let buffersLength = 0; + const buffers = []; + function read() { + const b = socket.read(); + if (b) + ondata(b); + else + socket.once('readable', read); + } + function cleanup() { + socket.removeListener('end', onend); + socket.removeListener('error', onerror); + socket.removeListener('readable', read); + } + function onend() { + cleanup(); + debug('onend'); + reject(new Error('Proxy connection ended before receiving CONNECT response')); + } + function onerror(err) { + cleanup(); + debug('onerror %o', err); + reject(err); + } + function ondata(b) { + buffers.push(b); + buffersLength += b.length; + const buffered = Buffer.concat(buffers, buffersLength); + const endOfHeaders = buffered.indexOf('\r\n\r\n'); + if (endOfHeaders === -1) { + // keep buffering + debug('have not received end of HTTP headers yet...'); + read(); + return; + } + const headerParts = buffered + .slice(0, endOfHeaders) + .toString('ascii') + .split('\r\n'); + const firstLine = headerParts.shift(); + if (!firstLine) { + socket.destroy(); + return reject(new Error('No header received from proxy CONNECT response')); + } + const firstLineParts = firstLine.split(' '); + const statusCode = +firstLineParts[1]; + const statusText = firstLineParts.slice(2).join(' '); + const headers = {}; + for (const header of headerParts) { + if (!header) + continue; + const firstColon = header.indexOf(':'); + if (firstColon === -1) { + socket.destroy(); + return reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`)); + } + const key = header.slice(0, firstColon).toLowerCase(); + const value = header.slice(firstColon + 1).trimStart(); + const current = headers[key]; + if (typeof current === 'string') { + headers[key] = [current, value]; + } + else if (Array.isArray(current)) { + current.push(value); + } + else { + headers[key] = value; + } + } + debug('got proxy server response: %o %o', firstLine, headers); + cleanup(); + resolve({ + connect: { + statusCode, + statusText, + headers, + }, + buffered, + }); + } + socket.on('error', onerror); + socket.on('end', onend); + read(); + }); +} +exports.parseProxyResponse = parseProxyResponse; +//# sourceMappingURL=parse-proxy-response.js.map + +/***/ }), + +/***/ 2743: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + +const fs = __nccwpck_require__(9896); + +let isDocker; + +function hasDockerEnv() { + try { + fs.statSync('/.dockerenv'); + return true; + } catch (_) { + return false; + } +} + +function hasDockerCGroup() { + try { + return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker'); + } catch (_) { + return false; + } +} + +module.exports = () => { + if (isDocker === undefined) { + isDocker = hasDockerEnv() || hasDockerCGroup(); + } + + return isDocker; +}; + + +/***/ }), + +/***/ 5911: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + +const os = __nccwpck_require__(857); +const fs = __nccwpck_require__(9896); +const isDocker = __nccwpck_require__(2743); + +const isWsl = () => { + if (process.platform !== 'linux') { + return false; + } + + if (os.release().toLowerCase().includes('microsoft')) { + if (isDocker()) { + return false; + } + + return true; + } + + try { + return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ? + !isDocker() : false; + } catch (_) { + return false; + } +}; + +if (process.env.__IS_WSL_TEST__) { + module.exports = isWsl; +} else { + module.exports = isWsl(); +} + + +/***/ }), + +/***/ 8109: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var realFetch = __nccwpck_require__(6705); +module.exports = function(url, options) { + if (/^\/\//.test(url)) { + url = 'https:' + url; + } + return realFetch.call(this, url, options); +}; + +if (!global.fetch) { + global.fetch = module.exports; + global.Response = realFetch.Response; + global.Headers = realFetch.Headers; + global.Request = realFetch.Request; +} + + +/***/ }), + +/***/ 2047: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var jws = __nccwpck_require__(4707); + +module.exports = function (jwt, options) { + options = options || {}; + var decoded = jws.decode(jwt, options); + if (!decoded) { return null; } + var payload = decoded.payload; + + //try parse the payload + if(typeof payload === 'string') { + try { + var obj = JSON.parse(payload); + if(obj !== null && typeof obj === 'object') { + payload = obj; + } + } catch (e) { } + } + + //return header if `complete` option is enabled. header includes claims + //such as `kid` and `alg` used to select the key within a JWKS needed to + //verify the signature + if (options.complete === true) { + return { + header: decoded.header, + payload: payload, + signature: decoded.signature + }; + } + return payload; +}; + + +/***/ }), + +/***/ 9653: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +module.exports = { + decode: __nccwpck_require__(2047), + verify: __nccwpck_require__(772), + sign: __nccwpck_require__(4912), + JsonWebTokenError: __nccwpck_require__(6248), + NotBeforeError: __nccwpck_require__(1269), + TokenExpiredError: __nccwpck_require__(1241), +}; + + +/***/ }), + +/***/ 6248: +/***/ ((module) => { + +var JsonWebTokenError = function (message, error) { + Error.call(this, message); + if(Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + this.name = 'JsonWebTokenError'; + this.message = message; + if (error) this.inner = error; +}; + +JsonWebTokenError.prototype = Object.create(Error.prototype); +JsonWebTokenError.prototype.constructor = JsonWebTokenError; + +module.exports = JsonWebTokenError; + + +/***/ }), + +/***/ 1269: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var JsonWebTokenError = __nccwpck_require__(6248); + +var NotBeforeError = function (message, date) { + JsonWebTokenError.call(this, message); + this.name = 'NotBeforeError'; + this.date = date; +}; + +NotBeforeError.prototype = Object.create(JsonWebTokenError.prototype); + +NotBeforeError.prototype.constructor = NotBeforeError; + +module.exports = NotBeforeError; + +/***/ }), + +/***/ 1241: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var JsonWebTokenError = __nccwpck_require__(6248); + +var TokenExpiredError = function (message, expiredAt) { + JsonWebTokenError.call(this, message); + this.name = 'TokenExpiredError'; + this.expiredAt = expiredAt; +}; + +TokenExpiredError.prototype = Object.create(JsonWebTokenError.prototype); + +TokenExpiredError.prototype.constructor = TokenExpiredError; + +module.exports = TokenExpiredError; + +/***/ }), + +/***/ 1136: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const semver = __nccwpck_require__(2088); + +module.exports = semver.satisfies(process.version, '>=15.7.0'); + + +/***/ }), + +/***/ 3948: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var semver = __nccwpck_require__(2088); + +module.exports = semver.satisfies(process.version, '^6.12.0 || >=8.0.0'); + + +/***/ }), + +/***/ 5318: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const semver = __nccwpck_require__(2088); + +module.exports = semver.satisfies(process.version, '>=16.9.0'); + + +/***/ }), + +/***/ 6688: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var ms = __nccwpck_require__(744); + +module.exports = function (time, iat) { + var timestamp = iat || Math.floor(Date.now() / 1000); + + if (typeof time === 'string') { + var milliseconds = ms(time); + if (typeof milliseconds === 'undefined') { + return; + } + return Math.floor(timestamp + milliseconds / 1000); + } else if (typeof time === 'number') { + return timestamp + time; + } else { + return; + } + +}; + +/***/ }), + +/***/ 1006: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const ASYMMETRIC_KEY_DETAILS_SUPPORTED = __nccwpck_require__(1136); +const RSA_PSS_KEY_DETAILS_SUPPORTED = __nccwpck_require__(5318); + +const allowedAlgorithmsForKeys = { + 'ec': ['ES256', 'ES384', 'ES512'], + 'rsa': ['RS256', 'PS256', 'RS384', 'PS384', 'RS512', 'PS512'], + 'rsa-pss': ['PS256', 'PS384', 'PS512'] +}; + +const allowedCurves = { + ES256: 'prime256v1', + ES384: 'secp384r1', + ES512: 'secp521r1', +}; + +module.exports = function(algorithm, key) { + if (!algorithm || !key) return; + + const keyType = key.asymmetricKeyType; + if (!keyType) return; + + const allowedAlgorithms = allowedAlgorithmsForKeys[keyType]; + + if (!allowedAlgorithms) { + throw new Error(`Unknown key type "${keyType}".`); + } + + if (!allowedAlgorithms.includes(algorithm)) { + throw new Error(`"alg" parameter for "${keyType}" key type must be one of: ${allowedAlgorithms.join(', ')}.`) + } + + /* + * Ignore the next block from test coverage because it gets executed + * conditionally depending on the Node version. Not ignoring it would + * prevent us from reaching the target % of coverage for versions of + * Node under 15.7.0. + */ + /* istanbul ignore next */ + if (ASYMMETRIC_KEY_DETAILS_SUPPORTED) { + switch (keyType) { + case 'ec': + const keyCurve = key.asymmetricKeyDetails.namedCurve; + const allowedCurve = allowedCurves[algorithm]; + + if (keyCurve !== allowedCurve) { + throw new Error(`"alg" parameter "${algorithm}" requires curve "${allowedCurve}".`); + } + break; + + case 'rsa-pss': + if (RSA_PSS_KEY_DETAILS_SUPPORTED) { + const length = parseInt(algorithm.slice(-3), 10); + const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = key.asymmetricKeyDetails; + + if (hashAlgorithm !== `sha${length}` || mgf1HashAlgorithm !== hashAlgorithm) { + throw new Error(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of "alg" ${algorithm}.`); + } + + if (saltLength !== undefined && saltLength > length >> 3) { + throw new Error(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of "alg" ${algorithm}.`) + } + } + break; + } + } +} + + +/***/ }), + +/***/ 4165: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var bufferEqual = __nccwpck_require__(7351); +var Buffer = (__nccwpck_require__(3058).Buffer); +var crypto = __nccwpck_require__(6982); +var formatEcdsa = __nccwpck_require__(325); +var util = __nccwpck_require__(9023); + +var MSG_INVALID_ALGORITHM = '"%s" is not a valid algorithm.\n Supported algorithms are:\n "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".' +var MSG_INVALID_SECRET = 'secret must be a string or buffer'; +var MSG_INVALID_VERIFIER_KEY = 'key must be a string or a buffer'; +var MSG_INVALID_SIGNER_KEY = 'key must be a string, a buffer or an object'; + +var supportsKeyObjects = typeof crypto.createPublicKey === 'function'; +if (supportsKeyObjects) { + MSG_INVALID_VERIFIER_KEY += ' or a KeyObject'; + MSG_INVALID_SECRET += 'or a KeyObject'; +} + +function checkIsPublicKey(key) { + if (Buffer.isBuffer(key)) { + return; + } + + if (typeof key === 'string') { + return; + } + + if (!supportsKeyObjects) { + throw typeError(MSG_INVALID_VERIFIER_KEY); + } + + if (typeof key !== 'object') { + throw typeError(MSG_INVALID_VERIFIER_KEY); + } + + if (typeof key.type !== 'string') { + throw typeError(MSG_INVALID_VERIFIER_KEY); + } + + if (typeof key.asymmetricKeyType !== 'string') { + throw typeError(MSG_INVALID_VERIFIER_KEY); + } + + if (typeof key.export !== 'function') { + throw typeError(MSG_INVALID_VERIFIER_KEY); + } +}; + +function checkIsPrivateKey(key) { + if (Buffer.isBuffer(key)) { + return; + } + + if (typeof key === 'string') { + return; + } + + if (typeof key === 'object') { + return; + } + + throw typeError(MSG_INVALID_SIGNER_KEY); +}; + +function checkIsSecretKey(key) { + if (Buffer.isBuffer(key)) { + return; + } + + if (typeof key === 'string') { + return key; + } + + if (!supportsKeyObjects) { + throw typeError(MSG_INVALID_SECRET); + } + + if (typeof key !== 'object') { + throw typeError(MSG_INVALID_SECRET); + } + + if (key.type !== 'secret') { + throw typeError(MSG_INVALID_SECRET); + } + + if (typeof key.export !== 'function') { + throw typeError(MSG_INVALID_SECRET); + } +} + +function fromBase64(base64) { + return base64 + .replace(/=/g, '') + .replace(/\+/g, '-') + .replace(/\//g, '_'); +} + +function toBase64(base64url) { + base64url = base64url.toString(); + + var padding = 4 - base64url.length % 4; + if (padding !== 4) { + for (var i = 0; i < padding; ++i) { + base64url += '='; + } + } + + return base64url + .replace(/\-/g, '+') + .replace(/_/g, '/'); +} + +function typeError(template) { + var args = [].slice.call(arguments, 1); + var errMsg = util.format.bind(util, template).apply(null, args); + return new TypeError(errMsg); +} + +function bufferOrString(obj) { + return Buffer.isBuffer(obj) || typeof obj === 'string'; +} + +function normalizeInput(thing) { + if (!bufferOrString(thing)) + thing = JSON.stringify(thing); + return thing; +} + +function createHmacSigner(bits) { + return function sign(thing, secret) { + checkIsSecretKey(secret); + thing = normalizeInput(thing); + var hmac = crypto.createHmac('sha' + bits, secret); + var sig = (hmac.update(thing), hmac.digest('base64')) + return fromBase64(sig); + } +} + +function createHmacVerifier(bits) { + return function verify(thing, signature, secret) { + var computedSig = createHmacSigner(bits)(thing, secret); + return bufferEqual(Buffer.from(signature), Buffer.from(computedSig)); + } +} + +function createKeySigner(bits) { + return function sign(thing, privateKey) { + checkIsPrivateKey(privateKey); + thing = normalizeInput(thing); + // Even though we are specifying "RSA" here, this works with ECDSA + // keys as well. + var signer = crypto.createSign('RSA-SHA' + bits); + var sig = (signer.update(thing), signer.sign(privateKey, 'base64')); + return fromBase64(sig); + } +} + +function createKeyVerifier(bits) { + return function verify(thing, signature, publicKey) { + checkIsPublicKey(publicKey); + thing = normalizeInput(thing); + signature = toBase64(signature); + var verifier = crypto.createVerify('RSA-SHA' + bits); + verifier.update(thing); + return verifier.verify(publicKey, signature, 'base64'); + } +} + +function createPSSKeySigner(bits) { + return function sign(thing, privateKey) { + checkIsPrivateKey(privateKey); + thing = normalizeInput(thing); + var signer = crypto.createSign('RSA-SHA' + bits); + var sig = (signer.update(thing), signer.sign({ + key: privateKey, + padding: crypto.constants.RSA_PKCS1_PSS_PADDING, + saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST + }, 'base64')); + return fromBase64(sig); + } +} + +function createPSSKeyVerifier(bits) { + return function verify(thing, signature, publicKey) { + checkIsPublicKey(publicKey); + thing = normalizeInput(thing); + signature = toBase64(signature); + var verifier = crypto.createVerify('RSA-SHA' + bits); + verifier.update(thing); + return verifier.verify({ + key: publicKey, + padding: crypto.constants.RSA_PKCS1_PSS_PADDING, + saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST + }, signature, 'base64'); + } +} + +function createECDSASigner(bits) { + var inner = createKeySigner(bits); + return function sign() { + var signature = inner.apply(null, arguments); + signature = formatEcdsa.derToJose(signature, 'ES' + bits); + return signature; + }; +} + +function createECDSAVerifer(bits) { + var inner = createKeyVerifier(bits); + return function verify(thing, signature, publicKey) { + signature = formatEcdsa.joseToDer(signature, 'ES' + bits).toString('base64'); + var result = inner(thing, signature, publicKey); + return result; + }; +} + +function createNoneSigner() { + return function sign() { + return ''; + } +} + +function createNoneVerifier() { + return function verify(thing, signature) { + return signature === ''; + } +} + +module.exports = function jwa(algorithm) { + var signerFactories = { + hs: createHmacSigner, + rs: createKeySigner, + ps: createPSSKeySigner, + es: createECDSASigner, + none: createNoneSigner, + } + var verifierFactories = { + hs: createHmacVerifier, + rs: createKeyVerifier, + ps: createPSSKeyVerifier, + es: createECDSAVerifer, + none: createNoneVerifier, + } + var match = algorithm.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/i); + if (!match) + throw typeError(MSG_INVALID_ALGORITHM, algorithm); + var algo = (match[1] || match[3]).toLowerCase(); + var bits = match[2]; + + return { + sign: signerFactories[algo](bits), + verify: verifierFactories[algo](bits), + } +}; + + +/***/ }), + +/***/ 4707: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +/*global exports*/ +var SignStream = __nccwpck_require__(571); +var VerifyStream = __nccwpck_require__(5919); + +var ALGORITHMS = [ + 'HS256', 'HS384', 'HS512', + 'RS256', 'RS384', 'RS512', + 'PS256', 'PS384', 'PS512', + 'ES256', 'ES384', 'ES512' +]; + +exports.ALGORITHMS = ALGORITHMS; +exports.sign = SignStream.sign; +exports.verify = VerifyStream.verify; +exports.decode = VerifyStream.decode; +exports.isValid = VerifyStream.isValid; +exports.createSign = function createSign(opts) { + return new SignStream(opts); +}; +exports.createVerify = function createVerify(opts) { + return new VerifyStream(opts); +}; + + +/***/ }), + +/***/ 1623: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +/*global module, process*/ +var Buffer = (__nccwpck_require__(3058).Buffer); +var Stream = __nccwpck_require__(2203); +var util = __nccwpck_require__(9023); + +function DataStream(data) { + this.buffer = null; + this.writable = true; + this.readable = true; + + // No input + if (!data) { + this.buffer = Buffer.alloc(0); + return this; + } + + // Stream + if (typeof data.pipe === 'function') { + this.buffer = Buffer.alloc(0); + data.pipe(this); + return this; + } + + // Buffer or String + // or Object (assumedly a passworded key) + if (data.length || typeof data === 'object') { + this.buffer = data; + this.writable = false; + process.nextTick(function () { + this.emit('end', data); + this.readable = false; + this.emit('close'); + }.bind(this)); + return this; + } + + throw new TypeError('Unexpected data type ('+ typeof data + ')'); +} +util.inherits(DataStream, Stream); + +DataStream.prototype.write = function write(data) { + this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]); + this.emit('data', data); +}; + +DataStream.prototype.end = function end(data) { + if (data) + this.write(data); + this.emit('end', data); + this.emit('close'); + this.writable = false; + this.readable = false; +}; + +module.exports = DataStream; + + +/***/ }), + +/***/ 571: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +/*global module*/ +var Buffer = (__nccwpck_require__(3058).Buffer); +var DataStream = __nccwpck_require__(1623); +var jwa = __nccwpck_require__(4165); +var Stream = __nccwpck_require__(2203); +var toString = __nccwpck_require__(1811); +var util = __nccwpck_require__(9023); + +function base64url(string, encoding) { + return Buffer + .from(string, encoding) + .toString('base64') + .replace(/=/g, '') + .replace(/\+/g, '-') + .replace(/\//g, '_'); +} + +function jwsSecuredInput(header, payload, encoding) { + encoding = encoding || 'utf8'; + var encodedHeader = base64url(toString(header), 'binary'); + var encodedPayload = base64url(toString(payload), encoding); + return util.format('%s.%s', encodedHeader, encodedPayload); +} + +function jwsSign(opts) { + var header = opts.header; + var payload = opts.payload; + var secretOrKey = opts.secret || opts.privateKey; + var encoding = opts.encoding; + var algo = jwa(header.alg); + var securedInput = jwsSecuredInput(header, payload, encoding); + var signature = algo.sign(securedInput, secretOrKey); + return util.format('%s.%s', securedInput, signature); +} + +function SignStream(opts) { + var secret = opts.secret||opts.privateKey||opts.key; + var secretStream = new DataStream(secret); + this.readable = true; + this.header = opts.header; + this.encoding = opts.encoding; + this.secret = this.privateKey = this.key = secretStream; + this.payload = new DataStream(opts.payload); + this.secret.once('close', function () { + if (!this.payload.writable && this.readable) + this.sign(); + }.bind(this)); + + this.payload.once('close', function () { + if (!this.secret.writable && this.readable) + this.sign(); + }.bind(this)); +} +util.inherits(SignStream, Stream); + +SignStream.prototype.sign = function sign() { + try { + var signature = jwsSign({ + header: this.header, + payload: this.payload.buffer, + secret: this.secret.buffer, + encoding: this.encoding + }); + this.emit('done', signature); + this.emit('data', signature); + this.emit('end'); + this.readable = false; + return signature; + } catch (e) { + this.readable = false; + this.emit('error', e); + this.emit('close'); + } +}; + +SignStream.sign = jwsSign; + +module.exports = SignStream; + + +/***/ }), + +/***/ 1811: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +/*global module*/ +var Buffer = (__nccwpck_require__(181).Buffer); + +module.exports = function toString(obj) { + if (typeof obj === 'string') + return obj; + if (typeof obj === 'number' || Buffer.isBuffer(obj)) + return obj.toString(); + return JSON.stringify(obj); +}; + + +/***/ }), + +/***/ 5919: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +/*global module*/ +var Buffer = (__nccwpck_require__(3058).Buffer); +var DataStream = __nccwpck_require__(1623); +var jwa = __nccwpck_require__(4165); +var Stream = __nccwpck_require__(2203); +var toString = __nccwpck_require__(1811); +var util = __nccwpck_require__(9023); +var JWS_REGEX = /^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/; + +function isObject(thing) { + return Object.prototype.toString.call(thing) === '[object Object]'; +} + +function safeJsonParse(thing) { + if (isObject(thing)) + return thing; + try { return JSON.parse(thing); } + catch (e) { return undefined; } +} + +function headerFromJWS(jwsSig) { + var encodedHeader = jwsSig.split('.', 1)[0]; + return safeJsonParse(Buffer.from(encodedHeader, 'base64').toString('binary')); +} + +function securedInputFromJWS(jwsSig) { + return jwsSig.split('.', 2).join('.'); +} + +function signatureFromJWS(jwsSig) { + return jwsSig.split('.')[2]; +} + +function payloadFromJWS(jwsSig, encoding) { + encoding = encoding || 'utf8'; + var payload = jwsSig.split('.')[1]; + return Buffer.from(payload, 'base64').toString(encoding); +} + +function isValidJws(string) { + return JWS_REGEX.test(string) && !!headerFromJWS(string); +} + +function jwsVerify(jwsSig, algorithm, secretOrKey) { + if (!algorithm) { + var err = new Error("Missing algorithm parameter for jws.verify"); + err.code = "MISSING_ALGORITHM"; + throw err; + } + jwsSig = toString(jwsSig); + var signature = signatureFromJWS(jwsSig); + var securedInput = securedInputFromJWS(jwsSig); + var algo = jwa(algorithm); + return algo.verify(securedInput, signature, secretOrKey); +} + +function jwsDecode(jwsSig, opts) { + opts = opts || {}; + jwsSig = toString(jwsSig); + + if (!isValidJws(jwsSig)) + return null; + + var header = headerFromJWS(jwsSig); + + if (!header) + return null; + + var payload = payloadFromJWS(jwsSig); + if (header.typ === 'JWT' || opts.json) + payload = JSON.parse(payload, opts.encoding); + + return { + header: header, + payload: payload, + signature: signatureFromJWS(jwsSig) + }; +} + +function VerifyStream(opts) { + opts = opts || {}; + var secretOrKey = opts.secret||opts.publicKey||opts.key; + var secretStream = new DataStream(secretOrKey); + this.readable = true; + this.algorithm = opts.algorithm; + this.encoding = opts.encoding; + this.secret = this.publicKey = this.key = secretStream; + this.signature = new DataStream(opts.signature); + this.secret.once('close', function () { + if (!this.signature.writable && this.readable) + this.verify(); + }.bind(this)); + + this.signature.once('close', function () { + if (!this.secret.writable && this.readable) + this.verify(); + }.bind(this)); +} +util.inherits(VerifyStream, Stream); +VerifyStream.prototype.verify = function verify() { + try { + var valid = jwsVerify(this.signature.buffer, this.algorithm, this.key.buffer); + var obj = jwsDecode(this.signature.buffer, this.encoding); + this.emit('done', valid, obj); + this.emit('data', valid); + this.emit('end'); + this.readable = false; + return valid; + } catch (e) { + this.readable = false; + this.emit('error', e); + this.emit('close'); + } +}; + +VerifyStream.decode = jwsDecode; +VerifyStream.isValid = isValidJws; +VerifyStream.verify = jwsVerify; + +module.exports = VerifyStream; + + +/***/ }), + +/***/ 4912: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const timespan = __nccwpck_require__(6688); +const PS_SUPPORTED = __nccwpck_require__(3948); +const validateAsymmetricKey = __nccwpck_require__(1006); +const jws = __nccwpck_require__(4707); +const includes = __nccwpck_require__(3867); +const isBoolean = __nccwpck_require__(1999); +const isInteger = __nccwpck_require__(9841); +const isNumber = __nccwpck_require__(116); +const isPlainObject = __nccwpck_require__(9888); +const isString = __nccwpck_require__(6172); +const once = __nccwpck_require__(2192); +const { KeyObject, createSecretKey, createPrivateKey } = __nccwpck_require__(6982) + +const SUPPORTED_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'none']; +if (PS_SUPPORTED) { + SUPPORTED_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512'); +} + +const sign_options_schema = { + expiresIn: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '"expiresIn" should be a number of seconds or string representing a timespan' }, + notBefore: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '"notBefore" should be a number of seconds or string representing a timespan' }, + audience: { isValid: function(value) { return isString(value) || Array.isArray(value); }, message: '"audience" must be a string or array' }, + algorithm: { isValid: includes.bind(null, SUPPORTED_ALGS), message: '"algorithm" must be a valid string enum value' }, + header: { isValid: isPlainObject, message: '"header" must be an object' }, + encoding: { isValid: isString, message: '"encoding" must be a string' }, + issuer: { isValid: isString, message: '"issuer" must be a string' }, + subject: { isValid: isString, message: '"subject" must be a string' }, + jwtid: { isValid: isString, message: '"jwtid" must be a string' }, + noTimestamp: { isValid: isBoolean, message: '"noTimestamp" must be a boolean' }, + keyid: { isValid: isString, message: '"keyid" must be a string' }, + mutatePayload: { isValid: isBoolean, message: '"mutatePayload" must be a boolean' }, + allowInsecureKeySizes: { isValid: isBoolean, message: '"allowInsecureKeySizes" must be a boolean'}, + allowInvalidAsymmetricKeyTypes: { isValid: isBoolean, message: '"allowInvalidAsymmetricKeyTypes" must be a boolean'} +}; + +const registered_claims_schema = { + iat: { isValid: isNumber, message: '"iat" should be a number of seconds' }, + exp: { isValid: isNumber, message: '"exp" should be a number of seconds' }, + nbf: { isValid: isNumber, message: '"nbf" should be a number of seconds' } +}; + +function validate(schema, allowUnknown, object, parameterName) { + if (!isPlainObject(object)) { + throw new Error('Expected "' + parameterName + '" to be a plain object.'); + } + Object.keys(object) + .forEach(function(key) { + const validator = schema[key]; + if (!validator) { + if (!allowUnknown) { + throw new Error('"' + key + '" is not allowed in "' + parameterName + '"'); + } + return; + } + if (!validator.isValid(object[key])) { + throw new Error(validator.message); + } + }); +} + +function validateOptions(options) { + return validate(sign_options_schema, false, options, 'options'); +} + +function validatePayload(payload) { + return validate(registered_claims_schema, true, payload, 'payload'); +} + +const options_to_payload = { + 'audience': 'aud', + 'issuer': 'iss', + 'subject': 'sub', + 'jwtid': 'jti' +}; + +const options_for_objects = [ + 'expiresIn', + 'notBefore', + 'noTimestamp', + 'audience', + 'issuer', + 'subject', + 'jwtid', +]; + +module.exports = function (payload, secretOrPrivateKey, options, callback) { + if (typeof options === 'function') { + callback = options; + options = {}; + } else { + options = options || {}; + } + + const isObjectPayload = typeof payload === 'object' && + !Buffer.isBuffer(payload); + + const header = Object.assign({ + alg: options.algorithm || 'HS256', + typ: isObjectPayload ? 'JWT' : undefined, + kid: options.keyid + }, options.header); + + function failure(err) { + if (callback) { + return callback(err); + } + throw err; + } + + if (!secretOrPrivateKey && options.algorithm !== 'none') { + return failure(new Error('secretOrPrivateKey must have a value')); + } + + if (secretOrPrivateKey != null && !(secretOrPrivateKey instanceof KeyObject)) { + try { + secretOrPrivateKey = createPrivateKey(secretOrPrivateKey) + } catch (_) { + try { + secretOrPrivateKey = createSecretKey(typeof secretOrPrivateKey === 'string' ? Buffer.from(secretOrPrivateKey) : secretOrPrivateKey) + } catch (_) { + return failure(new Error('secretOrPrivateKey is not valid key material')); + } + } + } + + if (header.alg.startsWith('HS') && secretOrPrivateKey.type !== 'secret') { + return failure(new Error((`secretOrPrivateKey must be a symmetric key when using ${header.alg}`))) + } else if (/^(?:RS|PS|ES)/.test(header.alg)) { + if (secretOrPrivateKey.type !== 'private') { + return failure(new Error((`secretOrPrivateKey must be an asymmetric key when using ${header.alg}`))) + } + if (!options.allowInsecureKeySizes && + !header.alg.startsWith('ES') && + secretOrPrivateKey.asymmetricKeyDetails !== undefined && //KeyObject.asymmetricKeyDetails is supported in Node 15+ + secretOrPrivateKey.asymmetricKeyDetails.modulusLength < 2048) { + return failure(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`)); + } + } + + if (typeof payload === 'undefined') { + return failure(new Error('payload is required')); + } else if (isObjectPayload) { + try { + validatePayload(payload); + } + catch (error) { + return failure(error); + } + if (!options.mutatePayload) { + payload = Object.assign({},payload); + } + } else { + const invalid_options = options_for_objects.filter(function (opt) { + return typeof options[opt] !== 'undefined'; + }); + + if (invalid_options.length > 0) { + return failure(new Error('invalid ' + invalid_options.join(',') + ' option for ' + (typeof payload ) + ' payload')); + } + } + + if (typeof payload.exp !== 'undefined' && typeof options.expiresIn !== 'undefined') { + return failure(new Error('Bad "options.expiresIn" option the payload already has an "exp" property.')); + } + + if (typeof payload.nbf !== 'undefined' && typeof options.notBefore !== 'undefined') { + return failure(new Error('Bad "options.notBefore" option the payload already has an "nbf" property.')); + } + + try { + validateOptions(options); + } + catch (error) { + return failure(error); + } + + if (!options.allowInvalidAsymmetricKeyTypes) { + try { + validateAsymmetricKey(header.alg, secretOrPrivateKey); + } catch (error) { + return failure(error); + } + } + + const timestamp = payload.iat || Math.floor(Date.now() / 1000); + + if (options.noTimestamp) { + delete payload.iat; + } else if (isObjectPayload) { + payload.iat = timestamp; + } + + if (typeof options.notBefore !== 'undefined') { + try { + payload.nbf = timespan(options.notBefore, timestamp); + } + catch (err) { + return failure(err); + } + if (typeof payload.nbf === 'undefined') { + return failure(new Error('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60')); + } + } + + if (typeof options.expiresIn !== 'undefined' && typeof payload === 'object') { + try { + payload.exp = timespan(options.expiresIn, timestamp); + } + catch (err) { + return failure(err); + } + if (typeof payload.exp === 'undefined') { + return failure(new Error('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60')); + } + } + + Object.keys(options_to_payload).forEach(function (key) { + const claim = options_to_payload[key]; + if (typeof options[key] !== 'undefined') { + if (typeof payload[claim] !== 'undefined') { + return failure(new Error('Bad "options.' + key + '" option. The payload already has an "' + claim + '" property.')); + } + payload[claim] = options[key]; + } + }); + + const encoding = options.encoding || 'utf8'; + + if (typeof callback === 'function') { + callback = callback && once(callback); + + jws.createSign({ + header: header, + privateKey: secretOrPrivateKey, + payload: payload, + encoding: encoding + }).once('error', callback) + .once('done', function (signature) { + // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version + if(!options.allowInsecureKeySizes && /^(?:RS|PS)/.test(header.alg) && signature.length < 256) { + return callback(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`)) + } + callback(null, signature); + }); + } else { + let signature = jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding}); + // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version + if(!options.allowInsecureKeySizes && /^(?:RS|PS)/.test(header.alg) && signature.length < 256) { + throw new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`) + } + return signature + } +}; + + +/***/ }), + +/***/ 772: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const JsonWebTokenError = __nccwpck_require__(6248); +const NotBeforeError = __nccwpck_require__(1269); +const TokenExpiredError = __nccwpck_require__(1241); +const decode = __nccwpck_require__(2047); +const timespan = __nccwpck_require__(6688); +const validateAsymmetricKey = __nccwpck_require__(1006); +const PS_SUPPORTED = __nccwpck_require__(3948); +const jws = __nccwpck_require__(4707); +const {KeyObject, createSecretKey, createPublicKey} = __nccwpck_require__(6982); + +const PUB_KEY_ALGS = ['RS256', 'RS384', 'RS512']; +const EC_KEY_ALGS = ['ES256', 'ES384', 'ES512']; +const RSA_KEY_ALGS = ['RS256', 'RS384', 'RS512']; +const HS_ALGS = ['HS256', 'HS384', 'HS512']; + +if (PS_SUPPORTED) { + PUB_KEY_ALGS.splice(PUB_KEY_ALGS.length, 0, 'PS256', 'PS384', 'PS512'); + RSA_KEY_ALGS.splice(RSA_KEY_ALGS.length, 0, 'PS256', 'PS384', 'PS512'); +} + +module.exports = function (jwtString, secretOrPublicKey, options, callback) { + if ((typeof options === 'function') && !callback) { + callback = options; + options = {}; + } + + if (!options) { + options = {}; + } + + //clone this object since we are going to mutate it. + options = Object.assign({}, options); + + let done; + + if (callback) { + done = callback; + } else { + done = function(err, data) { + if (err) throw err; + return data; + }; + } + + if (options.clockTimestamp && typeof options.clockTimestamp !== 'number') { + return done(new JsonWebTokenError('clockTimestamp must be a number')); + } + + if (options.nonce !== undefined && (typeof options.nonce !== 'string' || options.nonce.trim() === '')) { + return done(new JsonWebTokenError('nonce must be a non-empty string')); + } + + if (options.allowInvalidAsymmetricKeyTypes !== undefined && typeof options.allowInvalidAsymmetricKeyTypes !== 'boolean') { + return done(new JsonWebTokenError('allowInvalidAsymmetricKeyTypes must be a boolean')); + } + + const clockTimestamp = options.clockTimestamp || Math.floor(Date.now() / 1000); + + if (!jwtString){ + return done(new JsonWebTokenError('jwt must be provided')); + } + + if (typeof jwtString !== 'string') { + return done(new JsonWebTokenError('jwt must be a string')); + } + + const parts = jwtString.split('.'); + + if (parts.length !== 3){ + return done(new JsonWebTokenError('jwt malformed')); + } + + let decodedToken; + + try { + decodedToken = decode(jwtString, { complete: true }); + } catch(err) { + return done(err); + } + + if (!decodedToken) { + return done(new JsonWebTokenError('invalid token')); + } + + const header = decodedToken.header; + let getSecret; + + if(typeof secretOrPublicKey === 'function') { + if(!callback) { + return done(new JsonWebTokenError('verify must be called asynchronous if secret or public key is provided as a callback')); + } + + getSecret = secretOrPublicKey; + } + else { + getSecret = function(header, secretCallback) { + return secretCallback(null, secretOrPublicKey); + }; + } + + return getSecret(header, function(err, secretOrPublicKey) { + if(err) { + return done(new JsonWebTokenError('error in secret or public key callback: ' + err.message)); + } + + const hasSignature = parts[2].trim() !== ''; + + if (!hasSignature && secretOrPublicKey){ + return done(new JsonWebTokenError('jwt signature is required')); + } + + if (hasSignature && !secretOrPublicKey) { + return done(new JsonWebTokenError('secret or public key must be provided')); + } + + if (!hasSignature && !options.algorithms) { + return done(new JsonWebTokenError('please specify "none" in "algorithms" to verify unsigned tokens')); + } + + if (secretOrPublicKey != null && !(secretOrPublicKey instanceof KeyObject)) { + try { + secretOrPublicKey = createPublicKey(secretOrPublicKey); + } catch (_) { + try { + secretOrPublicKey = createSecretKey(typeof secretOrPublicKey === 'string' ? Buffer.from(secretOrPublicKey) : secretOrPublicKey); + } catch (_) { + return done(new JsonWebTokenError('secretOrPublicKey is not valid key material')) + } + } + } + + if (!options.algorithms) { + if (secretOrPublicKey.type === 'secret') { + options.algorithms = HS_ALGS; + } else if (['rsa', 'rsa-pss'].includes(secretOrPublicKey.asymmetricKeyType)) { + options.algorithms = RSA_KEY_ALGS + } else if (secretOrPublicKey.asymmetricKeyType === 'ec') { + options.algorithms = EC_KEY_ALGS + } else { + options.algorithms = PUB_KEY_ALGS + } + } + + if (options.algorithms.indexOf(decodedToken.header.alg) === -1) { + return done(new JsonWebTokenError('invalid algorithm')); + } + + if (header.alg.startsWith('HS') && secretOrPublicKey.type !== 'secret') { + return done(new JsonWebTokenError((`secretOrPublicKey must be a symmetric key when using ${header.alg}`))) + } else if (/^(?:RS|PS|ES)/.test(header.alg) && secretOrPublicKey.type !== 'public') { + return done(new JsonWebTokenError((`secretOrPublicKey must be an asymmetric key when using ${header.alg}`))) + } + + if (!options.allowInvalidAsymmetricKeyTypes) { + try { + validateAsymmetricKey(header.alg, secretOrPublicKey); + } catch (e) { + return done(e); + } + } + + let valid; + + try { + valid = jws.verify(jwtString, decodedToken.header.alg, secretOrPublicKey); + } catch (e) { + return done(e); + } + + if (!valid) { + return done(new JsonWebTokenError('invalid signature')); + } + + const payload = decodedToken.payload; + + if (typeof payload.nbf !== 'undefined' && !options.ignoreNotBefore) { + if (typeof payload.nbf !== 'number') { + return done(new JsonWebTokenError('invalid nbf value')); + } + if (payload.nbf > clockTimestamp + (options.clockTolerance || 0)) { + return done(new NotBeforeError('jwt not active', new Date(payload.nbf * 1000))); + } + } + + if (typeof payload.exp !== 'undefined' && !options.ignoreExpiration) { + if (typeof payload.exp !== 'number') { + return done(new JsonWebTokenError('invalid exp value')); + } + if (clockTimestamp >= payload.exp + (options.clockTolerance || 0)) { + return done(new TokenExpiredError('jwt expired', new Date(payload.exp * 1000))); + } + } + + if (options.audience) { + const audiences = Array.isArray(options.audience) ? options.audience : [options.audience]; + const target = Array.isArray(payload.aud) ? payload.aud : [payload.aud]; + + const match = target.some(function (targetAudience) { + return audiences.some(function (audience) { + return audience instanceof RegExp ? audience.test(targetAudience) : audience === targetAudience; + }); + }); + + if (!match) { + return done(new JsonWebTokenError('jwt audience invalid. expected: ' + audiences.join(' or '))); + } + } + + if (options.issuer) { + const invalid_issuer = + (typeof options.issuer === 'string' && payload.iss !== options.issuer) || + (Array.isArray(options.issuer) && options.issuer.indexOf(payload.iss) === -1); + + if (invalid_issuer) { + return done(new JsonWebTokenError('jwt issuer invalid. expected: ' + options.issuer)); + } + } + + if (options.subject) { + if (payload.sub !== options.subject) { + return done(new JsonWebTokenError('jwt subject invalid. expected: ' + options.subject)); + } + } + + if (options.jwtid) { + if (payload.jti !== options.jwtid) { + return done(new JsonWebTokenError('jwt jwtid invalid. expected: ' + options.jwtid)); + } + } + + if (options.nonce) { + if (payload.nonce !== options.nonce) { + return done(new JsonWebTokenError('jwt nonce invalid. expected: ' + options.nonce)); + } + } + + if (options.maxAge) { + if (typeof payload.iat !== 'number') { + return done(new JsonWebTokenError('iat required when maxAge is specified')); + } + + const maxAgeTimestamp = timespan(options.maxAge, payload.iat); + if (typeof maxAgeTimestamp === 'undefined') { + return done(new JsonWebTokenError('"maxAge" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60')); + } + if (clockTimestamp >= maxAgeTimestamp + (options.clockTolerance || 0)) { + return done(new TokenExpiredError('maxAge exceeded', new Date(maxAgeTimestamp * 1000))); + } + } + + if (options.complete === true) { + const signature = decodedToken.signature; + + return done(null, { + header: header, + payload: payload, + signature: signature + }); + } + + return done(null, payload); + }); +}; + + +/***/ }), + +/***/ 3867: +/***/ ((module) => { + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array ? array.length : 0, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return baseFindIndex(array, baseIsNaN, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + // Safari 9 makes `arguments.length` enumerable in strict mode. + var result = (isArray(value) || isArguments(value)) + ? baseTimes(value.length, String) + : []; + + var length = result.length, + skipIndexes = !!length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && (key == 'length' || isIndex(key, length)))) { + result.push(key); + } + } + return result; +} + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +/** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object ? baseValues(object, keys(object)) : []; +} + +module.exports = includes; + + +/***/ }), + +/***/ 1999: +/***/ ((module) => { + +/** + * lodash 3.0.3 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && objectToString.call(value) == boolTag); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +module.exports = isBoolean; + + +/***/ }), + +/***/ 9841: +/***/ ((module) => { + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ +function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = isInteger; + + +/***/ }), + +/***/ 116: +/***/ ((module) => { + +/** + * lodash 3.0.3 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var numberTag = '[object Number]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ +function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && objectToString.call(value) == numberTag); +} + +module.exports = isNumber; + + +/***/ }), + +/***/ 9888: +/***/ ((module) => { + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var getPrototype = overArg(Object.getPrototypeOf, Object); + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || + objectToString.call(value) != objectTag || isHostObject(value)) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return (typeof Ctor == 'function' && + Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); +} + +module.exports = isPlainObject; + + +/***/ }), + +/***/ 6172: +/***/ ((module) => { + +/** + * lodash 4.0.1 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @type Function + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); +} + +module.exports = isString; + + +/***/ }), + +/***/ 2192: +/***/ ((module) => { + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ +function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; +} + +/** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ +function once(func) { + return before(2, func); +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = once; + + +/***/ }), + +/***/ 744: +/***/ ((module) => { + +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} + + +/***/ }), + +/***/ 6705: +/***/ ((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__(2203)); +var http = _interopDefault(__nccwpck_require__(8611)); +var Url = _interopDefault(__nccwpck_require__(7016)); +var whatwgUrl = _interopDefault(__nccwpck_require__(2686)); +var https = _interopDefault(__nccwpck_require__(5692)); +var zlib = _interopDefault(__nccwpck_require__(3106)); + +// 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__(2078).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'); +const URL = Url.URL || whatwgUrl.URL; + +// fix an issue where "format", "parse" aren't a named export for node <10 +const parse_url = Url.parse; +const format_url = Url.format; + +/** + * Wrapper around `new URL` to handle arbitrary URLs + * + * @param {string} urlStr + * @return {void} + */ +function parseURL(urlStr) { + /* + Check whether the URL is absolute or not + Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 + Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 + */ + if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { + urlStr = new URL(urlStr).toString(); + } + + // Fallback to old implementation for arbitrary URLs + return parse_url(urlStr); +} + +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 = parseURL(input.href); + } else { + // coerce input to a string before attempting to parse + parsedURL = parseURL(`${input}`); + } + input = {}; + } else { + parsedURL = parseURL(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); + } + + // 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'; + +const URL$1 = Url.URL || whatwgUrl.URL; + +// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 +const PassThrough$1 = Stream.PassThrough; + +const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { + const orig = new URL$1(original).hostname; + const dest = new URL$1(destination).hostname; + + return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); +}; + +/** + * isSameProtocol reports whether the two provided URLs use the same protocol. + * + * Both domains must already be in canonical form. + * @param {string|URL} original + * @param {string|URL} destination + */ +const isSameProtocol = function isSameProtocol(destination, original) { + const orig = new URL$1(original).protocol; + const dest = new URL$1(destination).protocol; + + return orig === dest; +}; + +/** + * 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) { + destroyStream(request.body, 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)); + + if (response && response.body) { + destroyStream(response.body, err); + } + + finalize(); + }); + + fixResponseChunkedTransferBadEnding(req, function (err) { + if (signal && signal.aborted) { + return; + } + + if (response && response.body) { + destroyStream(response.body, err); + } + }); + + /* c8 ignore next 18 */ + if (parseInt(process.version.substring(1)) < 14) { + // Before Node.js 14, pipeline() does not fully support async iterators and does not always + // properly handle when the socket close/end events are out of order. + req.on('socket', function (s) { + s.addListener('close', function (hadError) { + // if a data listener is still present we didn't end cleanly + const hasDataListener = s.listenerCount('data') > 0; + + // if end happened before close but the socket didn't emit an error, do it now + if (response && hasDataListener && !hadError && !(signal && signal.aborted)) { + const err = new Error('Premature close'); + err.code = 'ERR_STREAM_PREMATURE_CLOSE'; + response.body.emit('error', err); + } + }); + }); + } + + 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 + let locationURL = null; + try { + locationURL = location === null ? null : new URL$1(location, request.url).toString(); + } catch (err) { + // error here can only be invalid URL in Location: header + // do not throw when options.redirect == manual + // let the user extract the errorneous redirect URL + if (request.redirect !== 'manual') { + reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); + finalize(); + return; + } + } + + // 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 + }; + + if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) { + for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { + requestOpts.headers.delete(name); + } + } + + // 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); + }); + raw.on('end', function () { + // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted. + if (!response) { + 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); + }); +} +function fixResponseChunkedTransferBadEnding(request, errorCallback) { + let socket; + + request.on('socket', function (s) { + socket = s; + }); + + request.on('response', function (response) { + const headers = response.headers; + + if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) { + response.once('close', function (hadError) { + // tests for socket presence, as in some situations the + // the 'socket' event is not triggered for the request + // (happens in deno), avoids `TypeError` + // if a data listener is still present we didn't end cleanly + const hasDataListener = socket && socket.listenerCount('data') > 0; + + if (hasDataListener && !hadError) { + const err = new Error('Premature close'); + err.code = 'ERR_STREAM_PREMATURE_CLOSE'; + errorCallback(err); + } + }); + } + }); +} + +function destroyStream(stream, err) { + if (stream.destroy) { + stream.destroy(err); + } else { + // node < 8 + stream.emit('error', err); + stream.end(); + } +} + +/** + * 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; +exports.AbortError = AbortError; + + +/***/ }), + +/***/ 1964: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const path = __nccwpck_require__(6928); +const childProcess = __nccwpck_require__(5317); +const {promises: fs, constants: fsConstants} = __nccwpck_require__(9896); +const isWsl = __nccwpck_require__(5911); +const isDocker = __nccwpck_require__(2743); +const defineLazyProperty = __nccwpck_require__(5789); + +// Path to included `xdg-open`. +const localXdgOpenPath = __nccwpck_require__.ab + "xdg-open"; + +const {platform, arch} = process; + +// Podman detection +const hasContainerEnv = () => { + try { + fs.statSync('/run/.containerenv'); + return true; + } catch { + return false; + } +}; + +let cachedResult; +function isInsideContainer() { + if (cachedResult === undefined) { + cachedResult = hasContainerEnv() || isDocker(); + } + + return cachedResult; +} + +/** +Get the mount point for fixed drives in WSL. + +@inner +@returns {string} The mount point. +*/ +const getWslDrivesMountPoint = (() => { + // Default value for "root" param + // according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config + const defaultMountPoint = '/mnt/'; + + let mountPoint; + + return async function () { + if (mountPoint) { + // Return memoized mount point value + return mountPoint; + } + + const configFilePath = '/etc/wsl.conf'; + + let isConfigFileExists = false; + try { + await fs.access(configFilePath, fsConstants.F_OK); + isConfigFileExists = true; + } catch {} + + if (!isConfigFileExists) { + return defaultMountPoint; + } + + const configContent = await fs.readFile(configFilePath, {encoding: 'utf8'}); + const configMountPoint = /(?.*)/g.exec(configContent); + + if (!configMountPoint) { + return defaultMountPoint; + } + + mountPoint = configMountPoint.groups.mountPoint.trim(); + mountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`; + + return mountPoint; + }; +})(); + +const pTryEach = async (array, mapper) => { + let latestError; + + for (const item of array) { + try { + return await mapper(item); // eslint-disable-line no-await-in-loop + } catch (error) { + latestError = error; + } + } + + throw latestError; +}; + +const baseOpen = async options => { + options = { + wait: false, + background: false, + newInstance: false, + allowNonzeroExitCode: false, + ...options + }; + + if (Array.isArray(options.app)) { + return pTryEach(options.app, singleApp => baseOpen({ + ...options, + app: singleApp + })); + } + + let {name: app, arguments: appArguments = []} = options.app || {}; + appArguments = [...appArguments]; + + if (Array.isArray(app)) { + return pTryEach(app, appName => baseOpen({ + ...options, + app: { + name: appName, + arguments: appArguments + } + })); + } + + let command; + const cliArguments = []; + const childProcessOptions = {}; + + if (platform === 'darwin') { + command = 'open'; + + if (options.wait) { + cliArguments.push('--wait-apps'); + } + + if (options.background) { + cliArguments.push('--background'); + } + + if (options.newInstance) { + cliArguments.push('--new'); + } + + if (app) { + cliArguments.push('-a', app); + } + } else if (platform === 'win32' || (isWsl && !isInsideContainer() && !app)) { + const mountPoint = await getWslDrivesMountPoint(); + + command = isWsl ? + `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe` : + `${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`; + + cliArguments.push( + '-NoProfile', + '-NonInteractive', + '–ExecutionPolicy', + 'Bypass', + '-EncodedCommand' + ); + + if (!isWsl) { + childProcessOptions.windowsVerbatimArguments = true; + } + + const encodedArguments = ['Start']; + + if (options.wait) { + encodedArguments.push('-Wait'); + } + + if (app) { + // Double quote with double quotes to ensure the inner quotes are passed through. + // Inner quotes are delimited for PowerShell interpretation with backticks. + encodedArguments.push(`"\`"${app}\`""`, '-ArgumentList'); + if (options.target) { + appArguments.unshift(options.target); + } + } else if (options.target) { + encodedArguments.push(`"${options.target}"`); + } + + if (appArguments.length > 0) { + appArguments = appArguments.map(arg => `"\`"${arg}\`""`); + encodedArguments.push(appArguments.join(',')); + } + + // Using Base64-encoded command, accepted by PowerShell, to allow special characters. + options.target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64'); + } else { + if (app) { + command = app; + } else { + // When bundled by Webpack, there's no actual package file path and no local `xdg-open`. + const isBundled = !__dirname || __dirname === '/'; + + // Check if local `xdg-open` exists and is executable. + let exeLocalXdgOpen = false; + try { + await fs.access(__nccwpck_require__.ab + "xdg-open", fsConstants.X_OK); + exeLocalXdgOpen = true; + } catch {} + + const useSystemXdgOpen = process.versions.electron || + platform === 'android' || isBundled || !exeLocalXdgOpen; + command = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath; + } + + if (appArguments.length > 0) { + cliArguments.push(...appArguments); + } + + if (!options.wait) { + // `xdg-open` will block the process unless stdio is ignored + // and it's detached from the parent even if it's unref'd. + childProcessOptions.stdio = 'ignore'; + childProcessOptions.detached = true; + } + } + + if (options.target) { + cliArguments.push(options.target); + } + + if (platform === 'darwin' && appArguments.length > 0) { + cliArguments.push('--args', ...appArguments); + } + + const subprocess = childProcess.spawn(command, cliArguments, childProcessOptions); + + if (options.wait) { + return new Promise((resolve, reject) => { + subprocess.once('error', reject); + + subprocess.once('close', exitCode => { + if (!options.allowNonzeroExitCode && exitCode > 0) { + reject(new Error(`Exited with code ${exitCode}`)); + return; + } + + resolve(subprocess); + }); + }); + } + + subprocess.unref(); + + return subprocess; +}; + +const open = (target, options) => { + if (typeof target !== 'string') { + throw new TypeError('Expected a `target`'); + } + + return baseOpen({ + ...options, + target + }); +}; + +const openApp = (name, options) => { + if (typeof name !== 'string') { + throw new TypeError('Expected a `name`'); + } + + const {arguments: appArguments = []} = options || {}; + if (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) { + throw new TypeError('Expected `appArguments` as Array type'); + } + + return baseOpen({ + ...options, + app: { + name, + arguments: appArguments + } + }); +}; + +function detectArchBinary(binary) { + if (typeof binary === 'string' || Array.isArray(binary)) { + return binary; + } + + const {[arch]: archBinary} = binary; + + if (!archBinary) { + throw new Error(`${arch} is not supported`); + } + + return archBinary; +} + +function detectPlatformBinary({[platform]: platformBinary}, {wsl}) { + if (wsl && isWsl) { + return detectArchBinary(wsl); + } + + if (!platformBinary) { + throw new Error(`${platform} is not supported`); + } + + return detectArchBinary(platformBinary); +} + +const apps = {}; + +defineLazyProperty(apps, 'chrome', () => detectPlatformBinary({ + darwin: 'google chrome', + win32: 'chrome', + linux: ['google-chrome', 'google-chrome-stable', 'chromium'] +}, { + wsl: { + ia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe', + x64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'] + } +})); + +defineLazyProperty(apps, 'firefox', () => detectPlatformBinary({ + darwin: 'firefox', + win32: 'C:\\Program Files\\Mozilla Firefox\\firefox.exe', + linux: 'firefox' +}, { + wsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe' +})); + +defineLazyProperty(apps, 'edge', () => detectPlatformBinary({ + darwin: 'microsoft edge', + win32: 'msedge', + linux: ['microsoft-edge', 'microsoft-edge-dev'] +}, { + wsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe' +})); + +open.apps = apps; +open.openApp = openApp; + +module.exports = open; + + +/***/ }), + +/***/ 3058: +/***/ ((module, exports, __nccwpck_require__) => { + +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = __nccwpck_require__(181) +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + + +/***/ }), + +/***/ 9379: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const ANY = Symbol('SemVer ANY') +// hoisted class for cyclic dependency +class Comparator { + static get ANY () { + return ANY + } + + constructor (comp, options) { + options = parseOptions(options) + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + comp = comp.trim().split(/\s+/).join(' ') + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) + } + + parse (comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const m = comp.match(r) + + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } + } + + toString () { + return this.value + } + + test (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) + } + + intersects (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range(this.value, options).test(comp.semver) + } + + options = parseOptions(options) + + // Special cases where nothing can possibly be lower + if (options.includePrerelease && + (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) { + return false + } + if (!options.includePrerelease && + (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) { + return false + } + + // Same direction increasing (> or >=) + if (this.operator.startsWith('>') && comp.operator.startsWith('>')) { + return true + } + // Same direction decreasing (< or <=) + if (this.operator.startsWith('<') && comp.operator.startsWith('<')) { + return true + } + // same SemVer and both sides are inclusive (<= or >=) + if ( + (this.semver.version === comp.semver.version) && + this.operator.includes('=') && comp.operator.includes('=')) { + return true + } + // opposite directions less than + if (cmp(this.semver, '<', comp.semver, options) && + this.operator.startsWith('>') && comp.operator.startsWith('<')) { + return true + } + // opposite directions greater than + if (cmp(this.semver, '>', comp.semver, options) && + this.operator.startsWith('<') && comp.operator.startsWith('>')) { + return true + } + return false + } +} + +module.exports = Comparator + +const parseOptions = __nccwpck_require__(356) +const { safeRe: re, t } = __nccwpck_require__(5471) +const cmp = __nccwpck_require__(8646) +const debug = __nccwpck_require__(1159) +const SemVer = __nccwpck_require__(7163) +const Range = __nccwpck_require__(6782) + + +/***/ }), + +/***/ 6782: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// hoisted class for cyclic dependency +class Range { + constructor (range, options) { + options = parseOptions(options) + + if (range instanceof Range) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + // just put it in the set and return + this.raw = range.value + this.set = [[range]] + this.format() + return this + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First reduce all whitespace as much as possible so we do not have to rely + // on potentially slow regexes like \s*. This is then stored and used for + // future error messages as well. + this.raw = range + .trim() + .split(/\s+/) + .join(' ') + + // First, split on || + this.set = this.raw + .split('||') + // map the range to a 2d array of comparators + .map(r => this.parseRange(r.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length) + + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${this.raw}`) + } + + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) { + this.set = [first] + } else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } + } + + this.format() + } + + format () { + this.range = this.set + .map((comps) => comps.join(' ').trim()) + .join('||') + .trim() + return this.range + } + + toString () { + return this.range + } + + parseRange (range) { + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = + (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | + (this.options.loose && FLAG_LOOSE) + const memoKey = memoOpts + ':' + range + const cached = cache.get(memoKey) + if (cached) { + return cached + } + + const loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) + debug('hyphen replace', range) + + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + debug('tilde trim', range) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + debug('caret trim', range) + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + let rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + + if (loose) { + // in loose mode, throw out any that are not valid comparators + rangeList = rangeList.filter(comp => { + debug('loose invalid filter', comp, this.options) + return !!comp.match(re[t.COMPARATORLOOSE]) + }) + } + debug('range list', rangeList) + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const rangeMap = new Map() + const comparators = rangeList.map(comp => new Comparator(comp, this.options)) + for (const comp of comparators) { + if (isNullSet(comp)) { + return [comp] + } + rangeMap.set(comp.value, comp) + } + if (rangeMap.size > 1 && rangeMap.has('')) { + rangeMap.delete('') + } + + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result + } + + intersects (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) + } + + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false + } +} + +module.exports = Range + +const LRU = __nccwpck_require__(1383) +const cache = new LRU() + +const parseOptions = __nccwpck_require__(356) +const Comparator = __nccwpck_require__(9379) +const debug = __nccwpck_require__(1159) +const SemVer = __nccwpck_require__(7163) +const { + safeRe: re, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace, +} = __nccwpck_require__(5471) +const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = __nccwpck_require__(5101) + +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true + const remainingComparators = comparators.slice() + let testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +const isX = id => !id || id.toLowerCase() === 'x' || id === '*' + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +// ~0.0.1 --> >=0.0.1 <0.1.0-0 +const replaceTildes = (comp, options) => { + return comp + .trim() + .split(/\s+/) + .map((c) => replaceTilde(c, options)) + .join(' ') +} + +const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0` + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` + } else if (pr) { + debug('replaceTilde pr', pr) + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0` + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +// ^0.0.1 --> >=0.0.1 <0.0.2-0 +// ^0.1.0 --> >=0.1.0 <0.2.0-0 +const replaceCarets = (comp, options) => { + return comp + .trim() + .split(/\s+/) + .map((c) => replaceCaret(c, options)) + .join(' ') +} + +const replaceCaret = (comp, options) => { + debug('caret', comp, options) + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + const z = options.includePrerelease ? '-0' : '' + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0` + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0` + } + } + + debug('caret return', ret) + return ret + }) +} + +const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options) + return comp + .split(/\s+/) + .map((c) => replaceXRange(c, options)) + .join(' ') +} + +const replaceXRange = (comp, options) => { + comp = comp.trim() + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + const xM = isX(M) + const xm = xM || isX(m) + const xp = xm || isX(p) + const anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + if (gtlt === '<') { + pr = '-0' + } + + ret = `${gtlt + M}.${m}.${p}${pr}` + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0` + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp + .trim() + .replace(re[t.STAR], '') +} + +const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options) + return comp + .trim() + .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +// TODO build? +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr) => { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}` + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` + } else if (fpr) { + from = `>=${from}` + } else { + from = `>=${from}${incPr ? '-0' : ''}` + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0` + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0` + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}` + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0` + } else { + to = `<=${to}` + } + + return `${from} ${to}`.trim() +} + +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === Comparator.ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + + +/***/ }), + +/***/ 7163: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const debug = __nccwpck_require__(1159) +const { MAX_LENGTH, MAX_SAFE_INTEGER } = __nccwpck_require__(5101) +const { safeRe: re, t } = __nccwpck_require__(5471) + +const parseOptions = __nccwpck_require__(356) +const { compareIdentifiers } = __nccwpck_require__(3348) +class SemVer { + constructor (version, options) { + options = parseOptions(options) + + if (version instanceof SemVer) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease + + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() + } + + format () { + this.version = `${this.major}.${this.minor}.${this.patch}` + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}` + } + return this.version + } + + toString () { + return this.version + } + + compare (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer(other, this.options) + } + + if (other.version === this.version) { + return 0 + } + + return this.compareMain(other) || this.comparePre(other) + } + + compareMain (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } + + comparePre (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + let i = 0 + do { + const a = this.prerelease[i] + const b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + compareBuild (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + let i = 0 + do { + const a = this.build[i] + const b = other.build[i] + debug('build compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier, identifierBase) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier, identifierBase) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier, identifierBase) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier, identifierBase) + this.inc('pre', identifier, identifierBase) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier, identifierBase) + } + this.inc('pre', identifier, identifierBase) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': { + const base = Number(identifierBase) ? 1 : 0 + + if (!identifier && identifierBase === false) { + throw new Error('invalid increment argument: identifier is empty') + } + + if (this.prerelease.length === 0) { + this.prerelease = [base] + } else { + let i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + if (identifier === this.prerelease.join('.') && identifierBase === false) { + throw new Error('invalid increment argument: identifier already exists') + } + this.prerelease.push(base) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + let prerelease = [identifier, base] + if (identifierBase === false) { + prerelease = [identifier] + } + if (compareIdentifiers(this.prerelease[0], identifier) === 0) { + if (isNaN(this.prerelease[1])) { + this.prerelease = prerelease + } + } else { + this.prerelease = prerelease + } + } + break + } + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.raw = this.format() + if (this.build.length) { + this.raw += `+${this.build.join('.')}` + } + return this + } +} + +module.exports = SemVer + + +/***/ }), + +/***/ 1799: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(6353) +const clean = (version, options) => { + const s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} +module.exports = clean + + +/***/ }), + +/***/ 8646: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const eq = __nccwpck_require__(5082) +const neq = __nccwpck_require__(4974) +const gt = __nccwpck_require__(6599) +const gte = __nccwpck_require__(1236) +const lt = __nccwpck_require__(3872) +const lte = __nccwpck_require__(6717) + +const cmp = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') { + a = a.version + } + if (typeof b === 'object') { + b = b.version + } + return a === b + + case '!==': + if (typeof a === 'object') { + a = a.version + } + if (typeof b === 'object') { + b = b.version + } + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError(`Invalid operator: ${op}`) + } +} +module.exports = cmp + + +/***/ }), + +/***/ 5385: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const parse = __nccwpck_require__(6353) +const { safeRe: re, t } = __nccwpck_require__(5471) + +const coerce = (version, options) => { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + let match = null + if (!options.rtl) { + match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL] + let next + while ((next = coerceRtlRegex.exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + coerceRtlRegex.lastIndex = -1 + } + + if (match === null) { + return null + } + + const major = match[2] + const minor = match[3] || '0' + const patch = match[4] || '0' + const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : '' + const build = options.includePrerelease && match[6] ? `+${match[6]}` : '' + + return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options) +} +module.exports = coerce + + +/***/ }), + +/***/ 7648: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const compareBuild = (a, b, loose) => { + const versionA = new SemVer(a, loose) + const versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} +module.exports = compareBuild + + +/***/ }), + +/***/ 6874: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(8469) +const compareLoose = (a, b) => compare(a, b, true) +module.exports = compareLoose + + +/***/ }), + +/***/ 8469: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const compare = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)) + +module.exports = compare + + +/***/ }), + +/***/ 711: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(6353) + +const diff = (version1, version2) => { + const v1 = parse(version1, null, true) + const v2 = parse(version2, null, true) + const comparison = v1.compare(v2) + + if (comparison === 0) { + return null + } + + const v1Higher = comparison > 0 + const highVersion = v1Higher ? v1 : v2 + const lowVersion = v1Higher ? v2 : v1 + const highHasPre = !!highVersion.prerelease.length + const lowHasPre = !!lowVersion.prerelease.length + + if (lowHasPre && !highHasPre) { + // Going from prerelease -> no prerelease requires some special casing + + // If the low version has only a major, then it will always be a major + // Some examples: + // 1.0.0-1 -> 1.0.0 + // 1.0.0-1 -> 1.1.1 + // 1.0.0-1 -> 2.0.0 + if (!lowVersion.patch && !lowVersion.minor) { + return 'major' + } + + // Otherwise it can be determined by checking the high version + + if (highVersion.patch) { + // anything higher than a patch bump would result in the wrong version + return 'patch' + } + + if (highVersion.minor) { + // anything higher than a minor bump would result in the wrong version + return 'minor' + } + + // bumping major/minor/patch all have same result + return 'major' + } + + // add the `pre` prefix if we are going to a prerelease version + const prefix = highHasPre ? 'pre' : '' + + if (v1.major !== v2.major) { + return prefix + 'major' + } + + if (v1.minor !== v2.minor) { + return prefix + 'minor' + } + + if (v1.patch !== v2.patch) { + return prefix + 'patch' + } + + // high and low are preleases + return 'prerelease' +} + +module.exports = diff + + +/***/ }), + +/***/ 5082: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(8469) +const eq = (a, b, loose) => compare(a, b, loose) === 0 +module.exports = eq + + +/***/ }), + +/***/ 6599: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(8469) +const gt = (a, b, loose) => compare(a, b, loose) > 0 +module.exports = gt + + +/***/ }), + +/***/ 1236: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(8469) +const gte = (a, b, loose) => compare(a, b, loose) >= 0 +module.exports = gte + + +/***/ }), + +/***/ 2338: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) + +const inc = (version, release, options, identifier, identifierBase) => { + if (typeof (options) === 'string') { + identifierBase = identifier + identifier = options + options = undefined + } + + try { + return new SemVer( + version instanceof SemVer ? version.version : version, + options + ).inc(release, identifier, identifierBase).version + } catch (er) { + return null + } +} +module.exports = inc + + +/***/ }), + +/***/ 3872: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(8469) +const lt = (a, b, loose) => compare(a, b, loose) < 0 +module.exports = lt + + +/***/ }), + +/***/ 6717: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(8469) +const lte = (a, b, loose) => compare(a, b, loose) <= 0 +module.exports = lte + + +/***/ }), + +/***/ 8511: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const major = (a, loose) => new SemVer(a, loose).major +module.exports = major + + +/***/ }), + +/***/ 2603: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const minor = (a, loose) => new SemVer(a, loose).minor +module.exports = minor + + +/***/ }), + +/***/ 4974: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(8469) +const neq = (a, b, loose) => compare(a, b, loose) !== 0 +module.exports = neq + + +/***/ }), + +/***/ 6353: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const parse = (version, options, throwErrors = false) => { + if (version instanceof SemVer) { + return version + } + try { + return new SemVer(version, options) + } catch (er) { + if (!throwErrors) { + return null + } + throw er + } +} + +module.exports = parse + + +/***/ }), + +/***/ 8756: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const patch = (a, loose) => new SemVer(a, loose).patch +module.exports = patch + + +/***/ }), + +/***/ 5714: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(6353) +const prerelease = (version, options) => { + const parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} +module.exports = prerelease + + +/***/ }), + +/***/ 2173: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(8469) +const rcompare = (a, b, loose) => compare(b, a, loose) +module.exports = rcompare + + +/***/ }), + +/***/ 7192: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compareBuild = __nccwpck_require__(7648) +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) +module.exports = rsort + + +/***/ }), + +/***/ 8011: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(6782) +const satisfies = (version, range, options) => { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} +module.exports = satisfies + + +/***/ }), + +/***/ 9872: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compareBuild = __nccwpck_require__(7648) +const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) +module.exports = sort + + +/***/ }), + +/***/ 8780: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(6353) +const valid = (version, options) => { + const v = parse(version, options) + return v ? v.version : null +} +module.exports = valid + + +/***/ }), + +/***/ 2088: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// just pre-load all the stuff that index.js lazily exports +const internalRe = __nccwpck_require__(5471) +const constants = __nccwpck_require__(5101) +const SemVer = __nccwpck_require__(7163) +const identifiers = __nccwpck_require__(3348) +const parse = __nccwpck_require__(6353) +const valid = __nccwpck_require__(8780) +const clean = __nccwpck_require__(1799) +const inc = __nccwpck_require__(2338) +const diff = __nccwpck_require__(711) +const major = __nccwpck_require__(8511) +const minor = __nccwpck_require__(2603) +const patch = __nccwpck_require__(8756) +const prerelease = __nccwpck_require__(5714) +const compare = __nccwpck_require__(8469) +const rcompare = __nccwpck_require__(2173) +const compareLoose = __nccwpck_require__(6874) +const compareBuild = __nccwpck_require__(7648) +const sort = __nccwpck_require__(9872) +const rsort = __nccwpck_require__(7192) +const gt = __nccwpck_require__(6599) +const lt = __nccwpck_require__(3872) +const eq = __nccwpck_require__(5082) +const neq = __nccwpck_require__(4974) +const gte = __nccwpck_require__(1236) +const lte = __nccwpck_require__(6717) +const cmp = __nccwpck_require__(8646) +const coerce = __nccwpck_require__(5385) +const Comparator = __nccwpck_require__(9379) +const Range = __nccwpck_require__(6782) +const satisfies = __nccwpck_require__(8011) +const toComparators = __nccwpck_require__(4750) +const maxSatisfying = __nccwpck_require__(5574) +const minSatisfying = __nccwpck_require__(8595) +const minVersion = __nccwpck_require__(1866) +const validRange = __nccwpck_require__(4737) +const outside = __nccwpck_require__(280) +const gtr = __nccwpck_require__(2276) +const ltr = __nccwpck_require__(5213) +const intersects = __nccwpck_require__(3465) +const simplifyRange = __nccwpck_require__(2028) +const subset = __nccwpck_require__(1489) +module.exports = { + parse, + valid, + clean, + inc, + diff, + major, + minor, + patch, + prerelease, + compare, + rcompare, + compareLoose, + compareBuild, + sort, + rsort, + gt, + lt, + eq, + neq, + gte, + lte, + cmp, + coerce, + Comparator, + Range, + satisfies, + toComparators, + maxSatisfying, + minSatisfying, + minVersion, + validRange, + outside, + gtr, + ltr, + intersects, + simplifyRange, + subset, + SemVer, + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION, + RELEASE_TYPES: constants.RELEASE_TYPES, + compareIdentifiers: identifiers.compareIdentifiers, + rcompareIdentifiers: identifiers.rcompareIdentifiers, +} + + +/***/ }), + +/***/ 5101: +/***/ ((module) => { + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0' + +const MAX_LENGTH = 256 +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || +/* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16 + +// Max safe length for a build identifier. The max length minus 6 characters for +// the shortest version with a build 0.0.0+BUILD. +const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 + +const RELEASE_TYPES = [ + 'major', + 'premajor', + 'minor', + 'preminor', + 'patch', + 'prepatch', + 'prerelease', +] + +module.exports = { + MAX_LENGTH, + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_SAFE_INTEGER, + RELEASE_TYPES, + SEMVER_SPEC_VERSION, + FLAG_INCLUDE_PRERELEASE: 0b001, + FLAG_LOOSE: 0b010, +} + + +/***/ }), + +/***/ 1159: +/***/ ((module) => { + +const debug = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {} + +module.exports = debug + + +/***/ }), + +/***/ 3348: +/***/ ((module) => { + +const numeric = /^[0-9]+$/ +const compareIdentifiers = (a, b) => { + const anum = numeric.test(a) + const bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + +module.exports = { + compareIdentifiers, + rcompareIdentifiers, +} + + +/***/ }), + +/***/ 1383: +/***/ ((module) => { + +class LRUCache { + constructor () { + this.max = 1000 + this.map = new Map() + } + + get (key) { + const value = this.map.get(key) + if (value === undefined) { + return undefined + } else { + // Remove the key from the map and add it to the end + this.map.delete(key) + this.map.set(key, value) + return value + } + } + + delete (key) { + return this.map.delete(key) + } + + set (key, value) { + const deleted = this.delete(key) + + if (!deleted && value !== undefined) { + // If cache is full, delete the least recently used item + if (this.map.size >= this.max) { + const firstKey = this.map.keys().next().value + this.delete(firstKey) + } + + this.map.set(key, value) + } + + return this + } +} + +module.exports = LRUCache + + +/***/ }), + +/***/ 356: +/***/ ((module) => { + +// parse out just the options we care about +const looseOption = Object.freeze({ loose: true }) +const emptyOpts = Object.freeze({ }) +const parseOptions = options => { + if (!options) { + return emptyOpts + } + + if (typeof options !== 'object') { + return looseOption + } + + return options +} +module.exports = parseOptions + + +/***/ }), + +/***/ 5471: +/***/ ((module, exports, __nccwpck_require__) => { + +const { + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_LENGTH, +} = __nccwpck_require__(5101) +const debug = __nccwpck_require__(1159) +exports = module.exports = {} + +// The actual regexps go on exports.re +const re = exports.re = [] +const safeRe = exports.safeRe = [] +const src = exports.src = [] +const t = exports.t = {} +let R = 0 + +const LETTERDASHNUMBER = '[a-zA-Z0-9-]' + +// Replace some greedy regex tokens to prevent regex dos issues. These regex are +// used internally via the safeRe object since all inputs in this library get +// normalized first to trim and collapse all extra whitespace. The original +// regexes are exported for userland consumption and lower level usage. A +// future breaking change could export the safer regex only with a note that +// all input should have extra whitespace removed. +const safeRegexReplacements = [ + ['\\s', 1], + ['\\d', MAX_LENGTH], + [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], +] + +const makeSafeRegex = (value) => { + for (const [token, max] of safeRegexReplacements) { + value = value + .split(`${token}*`).join(`${token}{0,${max}}`) + .split(`${token}+`).join(`${token}{1,${max}}`) + } + return value +} + +const createToken = (name, value, isGlobal) => { + const safe = makeSafeRegex(value) + const index = R++ + debug(name, index, value) + t[name] = index + src[index] = value + re[index] = new RegExp(value, isGlobal ? 'g' : undefined) + safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined) +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') +createToken('NUMERICIDENTIFIERLOOSE', '\\d+') + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`) + +// ## Main Version +// Three dot-separated numeric identifiers. + +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`) + +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`) + +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`) + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`) + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`) + +createToken('FULL', `^${src[t.FULLPLAIN]}$`) + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`) + +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + +createToken('GTLT', '((?:<|>)?=?)') + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) + +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCEPLAIN', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`) +createToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\d])`) +createToken('COERCEFULL', src[t.COERCEPLAIN] + + `(?:${src[t.PRERELEASE]})?` + + `(?:${src[t.BUILD]})?` + + `(?:$|[^\\d])`) +createToken('COERCERTL', src[t.COERCE], true) +createToken('COERCERTLFULL', src[t.COERCEFULL], true) + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)') + +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) +exports.tildeTrimReplace = '$1~' + +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)') + +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) +exports.caretTrimReplace = '$1^' + +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) +exports.comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`) + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`) + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*') +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$') + + +/***/ }), + +/***/ 2276: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// Determine if version is greater than all the versions possible in the range. +const outside = __nccwpck_require__(280) +const gtr = (version, range, options) => outside(version, range, '>', options) +module.exports = gtr + + +/***/ }), + +/***/ 3465: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(6782) +const intersects = (r1, r2, options) => { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2, options) +} +module.exports = intersects + + +/***/ }), + +/***/ 5213: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const outside = __nccwpck_require__(280) +// Determine if version is less than all the versions possible in the range +const ltr = (version, range, options) => outside(version, range, '<', options) +module.exports = ltr + + +/***/ }), + +/***/ 5574: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const Range = __nccwpck_require__(6782) + +const maxSatisfying = (versions, range, options) => { + let max = null + let maxSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} +module.exports = maxSatisfying + + +/***/ }), + +/***/ 8595: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const Range = __nccwpck_require__(6782) +const minSatisfying = (versions, range, options) => { + let min = null + let minSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} +module.exports = minSatisfying + + +/***/ }), + +/***/ 1866: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const Range = __nccwpck_require__(6782) +const gt = __nccwpck_require__(6599) + +const minVersion = (range, loose) => { + range = new Range(range, loose) + + let minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let setMin = null + comparators.forEach((comparator) => { + // Clone to avoid manipulating the comparator's semver object. + const compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!setMin || gt(compver, setMin)) { + setMin = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`) + } + }) + if (setMin && (!minver || gt(minver, setMin))) { + minver = setMin + } + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} +module.exports = minVersion + + +/***/ }), + +/***/ 280: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(7163) +const Comparator = __nccwpck_require__(9379) +const { ANY } = Comparator +const Range = __nccwpck_require__(6782) +const satisfies = __nccwpck_require__(8011) +const gt = __nccwpck_require__(6599) +const lt = __nccwpck_require__(3872) +const lte = __nccwpck_require__(6717) +const gte = __nccwpck_require__(1236) + +const outside = (version, range, hilo, options) => { + version = new SemVer(version, options) + range = new Range(range, options) + + let gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisfies the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let high = null + let low = null + + comparators.forEach((comparator) => { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +module.exports = outside + + +/***/ }), + +/***/ 2028: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// given a set of versions and a range, create a "simplified" range +// that includes the same versions that the original range does +// If the original range is shorter than the simplified one, return that. +const satisfies = __nccwpck_require__(8011) +const compare = __nccwpck_require__(8469) +module.exports = (versions, range, options) => { + const set = [] + let first = null + let prev = null + const v = versions.sort((a, b) => compare(a, b, options)) + for (const version of v) { + const included = satisfies(version, range, options) + if (included) { + prev = version + if (!first) { + first = version + } + } else { + if (prev) { + set.push([first, prev]) + } + prev = null + first = null + } + } + if (first) { + set.push([first, null]) + } + + const ranges = [] + for (const [min, max] of set) { + if (min === max) { + ranges.push(min) + } else if (!max && min === v[0]) { + ranges.push('*') + } else if (!max) { + ranges.push(`>=${min}`) + } else if (min === v[0]) { + ranges.push(`<=${max}`) + } else { + ranges.push(`${min} - ${max}`) + } + } + const simplified = ranges.join(' || ') + const original = typeof range.raw === 'string' ? range.raw : String(range) + return simplified.length < original.length ? simplified : range +} + + +/***/ }), + +/***/ 1489: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(6782) +const Comparator = __nccwpck_require__(9379) +const { ANY } = Comparator +const satisfies = __nccwpck_require__(8011) +const compare = __nccwpck_require__(8469) + +// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: +// - Every simple range `r1, r2, ...` is a null set, OR +// - Every simple range `r1, r2, ...` which is not a null set is a subset of +// some `R1, R2, ...` +// +// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: +// - If c is only the ANY comparator +// - If C is only the ANY comparator, return true +// - Else if in prerelease mode, return false +// - else replace c with `[>=0.0.0]` +// - If C is only the ANY comparator +// - if in prerelease mode, return true +// - else replace C with `[>=0.0.0]` +// - Let EQ be the set of = comparators in c +// - If EQ is more than one, return true (null set) +// - Let GT be the highest > or >= comparator in c +// - Let LT be the lowest < or <= comparator in c +// - If GT and LT, and GT.semver > LT.semver, return true (null set) +// - If any C is a = range, and GT or LT are set, return false +// - If EQ +// - If GT, and EQ does not satisfy GT, return true (null set) +// - If LT, and EQ does not satisfy LT, return true (null set) +// - If EQ satisfies every C, return true +// - Else return false +// - If GT +// - If GT.semver is lower than any > or >= comp in C, return false +// - If GT is >=, and GT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the GT.semver tuple, return false +// - If LT +// - If LT.semver is greater than any < or <= comp in C, return false +// - If LT is <=, and LT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the LT.semver tuple, return false +// - Else return true + +const subset = (sub, dom, options = {}) => { + if (sub === dom) { + return true + } + + sub = new Range(sub, options) + dom = new Range(dom, options) + let sawNonNull = false + + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options) + sawNonNull = sawNonNull || isSub !== null + if (isSub) { + continue OUTER + } + } + // the null set is a subset of everything, but null simple ranges in + // a complex range should be ignored. so if we saw a non-null range, + // then we know this isn't a subset, but if EVERY simple range was null, + // then it is a subset. + if (sawNonNull) { + return false + } + } + return true +} + +const minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')] +const minimumVersion = [new Comparator('>=0.0.0')] + +const simpleSubset = (sub, dom, options) => { + if (sub === dom) { + return true + } + + if (sub.length === 1 && sub[0].semver === ANY) { + if (dom.length === 1 && dom[0].semver === ANY) { + return true + } else if (options.includePrerelease) { + sub = minimumVersionWithPreRelease + } else { + sub = minimumVersion + } + } + + if (dom.length === 1 && dom[0].semver === ANY) { + if (options.includePrerelease) { + return true + } else { + dom = minimumVersion + } + } + + const eqSet = new Set() + let gt, lt + for (const c of sub) { + if (c.operator === '>' || c.operator === '>=') { + gt = higherGT(gt, c, options) + } else if (c.operator === '<' || c.operator === '<=') { + lt = lowerLT(lt, c, options) + } else { + eqSet.add(c.semver) + } + } + + if (eqSet.size > 1) { + return null + } + + let gtltComp + if (gt && lt) { + gtltComp = compare(gt.semver, lt.semver, options) + if (gtltComp > 0) { + return null + } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) { + return null + } + } + + // will iterate one or zero times + for (const eq of eqSet) { + if (gt && !satisfies(eq, String(gt), options)) { + return null + } + + if (lt && !satisfies(eq, String(lt), options)) { + return null + } + + for (const c of dom) { + if (!satisfies(eq, String(c), options)) { + return false + } + } + + return true + } + + let higher, lower + let hasDomLT, hasDomGT + // if the subset has a prerelease, we need a comparator in the superset + // with the same tuple and a prerelease, or it's not a subset + let needDomLTPre = lt && + !options.includePrerelease && + lt.semver.prerelease.length ? lt.semver : false + let needDomGTPre = gt && + !options.includePrerelease && + gt.semver.prerelease.length ? gt.semver : false + // exception: <1.2.3-0 is the same as <1.2.3 + if (needDomLTPre && needDomLTPre.prerelease.length === 1 && + lt.operator === '<' && needDomLTPre.prerelease[0] === 0) { + needDomLTPre = false + } + + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' + hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' + if (gt) { + if (needDomGTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomGTPre.major && + c.semver.minor === needDomGTPre.minor && + c.semver.patch === needDomGTPre.patch) { + needDomGTPre = false + } + } + if (c.operator === '>' || c.operator === '>=') { + higher = higherGT(gt, c, options) + if (higher === c && higher !== gt) { + return false + } + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) { + return false + } + } + if (lt) { + if (needDomLTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomLTPre.major && + c.semver.minor === needDomLTPre.minor && + c.semver.patch === needDomLTPre.patch) { + needDomLTPre = false + } + } + if (c.operator === '<' || c.operator === '<=') { + lower = lowerLT(lt, c, options) + if (lower === c && lower !== lt) { + return false + } + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) { + return false + } + } + if (!c.operator && (lt || gt) && gtltComp !== 0) { + return false + } + } + + // if there was a < or >, and nothing in the dom, then must be false + // UNLESS it was limited by another range in the other direction. + // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 + if (gt && hasDomLT && !lt && gtltComp !== 0) { + return false + } + + if (lt && hasDomGT && !gt && gtltComp !== 0) { + return false + } + + // we needed a prerelease range in a specific tuple, but didn't get one + // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0, + // because it includes prereleases in the 1.2.3 tuple + if (needDomGTPre || needDomLTPre) { + return false + } + + return true +} + +// >=1.2.3 is lower than >1.2.3 +const higherGT = (a, b, options) => { + if (!a) { + return b + } + const comp = compare(a.semver, b.semver, options) + return comp > 0 ? a + : comp < 0 ? b + : b.operator === '>' && a.operator === '>=' ? b + : a +} + +// <=1.2.3 is higher than <1.2.3 +const lowerLT = (a, b, options) => { + if (!a) { + return b + } + const comp = compare(a.semver, b.semver, options) + return comp < 0 ? a + : comp > 0 ? b + : b.operator === '<' && a.operator === '<=' ? b + : a +} + +module.exports = subset + + +/***/ }), + +/***/ 4750: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(6782) + +// Mostly just for testing and legacy API reasons +const toComparators = (range, options) => + new Range(range, options).set + .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) + +module.exports = toComparators + + +/***/ }), + +/***/ 4737: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(6782) +const validRange = (range, options) => { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} +module.exports = validRange + + +/***/ }), + +/***/ 1450: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + +const os = __nccwpck_require__(857); +const tty = __nccwpck_require__(2018); +const hasFlag = __nccwpck_require__(3813); + +const {env} = process; + +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + forceColor = 0; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = 1; +} + +if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + forceColor = 1; + } else if (env.FORCE_COLOR === 'false') { + forceColor = 0; + } else { + forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); + } +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} + +function supportsColor(haveStream, streamIsTTY) { + if (forceColor === 0) { + return 0; + } + + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; + } + + const min = forceColor || 0; + + if (env.TERM === 'dumb') { + return min; + } + + if (process.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + return min; +} + +function getSupportLevel(stream) { + const level = supportsColor(stream, stream && stream.isTTY); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: translateLevel(supportsColor(true, tty.isatty(1))), + stderr: translateLevel(supportsColor(true, tty.isatty(2))) +}; + + +/***/ }), + +/***/ 1552: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var punycode = __nccwpck_require__(4876); +var mappingTable = __nccwpck_require__(2472); + +var PROCESSING_OPTIONS = { + TRANSITIONAL: 0, + NONTRANSITIONAL: 1 +}; + +function normalize(str) { // fix bug in v8 + return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000'); +} + +function findStatus(val) { + var start = 0; + var end = mappingTable.length - 1; + + while (start <= end) { + var mid = Math.floor((start + end) / 2); + + var target = mappingTable[mid]; + if (target[0][0] <= val && target[0][1] >= val) { + return target; + } else if (target[0][0] > val) { + end = mid - 1; + } else { + start = mid + 1; + } + } + + return null; +} + +var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + +function countSymbols(string) { + return string + // replace every surrogate pair with a BMP symbol + .replace(regexAstralSymbols, '_') + // then get the length + .length; +} + +function mapChars(domain_name, useSTD3, processing_option) { + var hasError = false; + var processed = ""; + + var len = countSymbols(domain_name); + for (var i = 0; i < len; ++i) { + var codePoint = domain_name.codePointAt(i); + var status = findStatus(codePoint); + + switch (status[1]) { + case "disallowed": + hasError = true; + processed += String.fromCodePoint(codePoint); + break; + case "ignored": + break; + case "mapped": + processed += String.fromCodePoint.apply(String, status[2]); + break; + case "deviation": + if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) { + processed += String.fromCodePoint.apply(String, status[2]); + } else { + processed += String.fromCodePoint(codePoint); + } + break; + case "valid": + processed += String.fromCodePoint(codePoint); + break; + case "disallowed_STD3_mapped": + if (useSTD3) { + hasError = true; + processed += String.fromCodePoint(codePoint); + } else { + processed += String.fromCodePoint.apply(String, status[2]); + } + break; + case "disallowed_STD3_valid": + if (useSTD3) { + hasError = true; + } + + processed += String.fromCodePoint(codePoint); + break; + } + } + + return { + string: processed, + error: hasError + }; +} + +var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/; + +function validateLabel(label, processing_option) { + if (label.substr(0, 4) === "xn--") { + label = punycode.toUnicode(label); + processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL; + } + + var error = false; + + if (normalize(label) !== label || + (label[3] === "-" && label[4] === "-") || + label[0] === "-" || label[label.length - 1] === "-" || + label.indexOf(".") !== -1 || + label.search(combiningMarksRegex) === 0) { + error = true; + } + + var len = countSymbols(label); + for (var i = 0; i < len; ++i) { + var status = findStatus(label.codePointAt(i)); + if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") || + (processing === PROCESSING_OPTIONS.NONTRANSITIONAL && + status[1] !== "valid" && status[1] !== "deviation")) { + error = true; + break; + } + } + + return { + label: label, + error: error + }; +} + +function processing(domain_name, useSTD3, processing_option) { + var result = mapChars(domain_name, useSTD3, processing_option); + result.string = normalize(result.string); + + var labels = result.string.split("."); + for (var i = 0; i < labels.length; ++i) { + try { + var validation = validateLabel(labels[i]); + labels[i] = validation.label; + result.error = result.error || validation.error; + } catch(e) { + result.error = true; + } + } + + return { + string: labels.join("."), + error: result.error + }; +} + +module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) { + var result = processing(domain_name, useSTD3, processing_option); + var labels = result.string.split("."); + labels = labels.map(function(l) { + try { + return punycode.toASCII(l); + } catch(e) { + result.error = true; + return l; + } + }); + + if (verifyDnsLength) { + var total = labels.slice(0, labels.length - 1).join(".").length; + if (total.length > 253 || total.length === 0) { + result.error = true; + } + + for (var i=0; i < labels.length; ++i) { + if (labels.length > 63 || labels.length === 0) { + result.error = true; + break; + } + } + } + + if (result.error) return null; + return labels.join("."); +}; + +module.exports.toUnicode = function(domain_name, useSTD3) { + var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL); + + return { + domain: result.string, + error: result.error + }; +}; + +module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; + + +/***/ }), + +/***/ 1860: +/***/ ((module) => { + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global global, define, Symbol, Reflect, Promise, SuppressedError */ +var __extends; +var __assign; +var __rest; +var __decorate; +var __param; +var __esDecorate; +var __runInitializers; +var __propKey; +var __setFunctionName; +var __metadata; +var __awaiter; +var __generator; +var __exportStar; +var __values; +var __read; +var __spread; +var __spreadArrays; +var __spreadArray; +var __await; +var __asyncGenerator; +var __asyncDelegator; +var __asyncValues; +var __makeTemplateObject; +var __importStar; +var __importDefault; +var __classPrivateFieldGet; +var __classPrivateFieldSet; +var __classPrivateFieldIn; +var __createBinding; +var __addDisposableResource; +var __disposeResources; +(function (factory) { + var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; + if (typeof define === "function" && define.amd) { + define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); }); + } + else if ( true && typeof module.exports === "object") { + factory(createExporter(root, createExporter(module.exports))); + } + else { + factory(createExporter(root)); + } + function createExporter(exports, previous) { + if (exports !== root) { + if (typeof Object.create === "function") { + Object.defineProperty(exports, "__esModule", { value: true }); + } + else { + exports.__esModule = true; + } + } + return function (id, v) { return exports[id] = previous ? previous(id, v) : v; }; + } +}) +(function (exporter) { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + + __extends = function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + + __rest = function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; + }; + + __decorate = function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + + __param = function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } + }; + + __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { + function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } + var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; + var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; + var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); + var _, done = false; + for (var i = decorators.length - 1; i >= 0; i--) { + var context = {}; + for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; + for (var p in contextIn.access) context.access[p] = contextIn.access[p]; + context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; + var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); + if (kind === "accessor") { + if (result === void 0) continue; + if (result === null || typeof result !== "object") throw new TypeError("Object expected"); + if (_ = accept(result.get)) descriptor.get = _; + if (_ = accept(result.set)) descriptor.set = _; + if (_ = accept(result.init)) initializers.unshift(_); + } + else if (_ = accept(result)) { + if (kind === "field") initializers.unshift(_); + else descriptor[key] = _; + } + } + if (target) Object.defineProperty(target, contextIn.name, descriptor); + done = true; + }; + + __runInitializers = function (thisArg, initializers, value) { + var useValue = arguments.length > 2; + for (var i = 0; i < initializers.length; i++) { + value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); + } + return useValue ? value : void 0; + }; + + __propKey = function (x) { + return typeof x === "symbol" ? x : "".concat(x); + }; + + __setFunctionName = function (f, name, prefix) { + if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; + return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); + }; + + __metadata = function (metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); + }; + + __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()); + }); + }; + + __generator = function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + + __exportStar = function(m, o) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); + }; + + __createBinding = Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + }); + + __values = function (o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + }; + + __read = function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + }; + + /** @deprecated */ + __spread = function () { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; + }; + + /** @deprecated */ + __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; + }; + + __spreadArray = function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; + + __await = function (v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); + }; + + __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", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; + function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } + function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } + 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]); } + }; + + __asyncDelegator = function (o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } + }; + + __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); } + }; + + __makeTemplateObject = function (cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; + }; + + var __setModuleDefault = Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); + }) : function(o, v) { + o["default"] = v; + }; + + __importStar = function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; + }; + + __importDefault = function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + + __classPrivateFieldGet = function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); + }; + + __classPrivateFieldSet = function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; + }; + + __classPrivateFieldIn = function (state, receiver) { + if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); + return typeof state === "function" ? receiver === state : state.has(receiver); + }; + + __addDisposableResource = function (env, value, async) { + if (value !== null && value !== void 0) { + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); + var dispose, inner; + if (async) { + if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); + dispose = value[Symbol.asyncDispose]; + } + if (dispose === void 0) { + if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); + dispose = value[Symbol.dispose]; + if (async) inner = dispose; + } + if (typeof dispose !== "function") throw new TypeError("Object not disposable."); + if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; + env.stack.push({ value: value, dispose: dispose, async: async }); + } + else if (async) { + env.stack.push({ async: true }); + } + return value; + }; + + var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; + }; + + __disposeResources = function (env) { + function fail(e) { + env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; + env.hasError = true; + } + function next() { + while (env.stack.length) { + var rec = env.stack.pop(); + try { + var result = rec.dispose && rec.dispose.call(rec.value); + if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + } + catch (e) { + fail(e); + } + } + if (env.hasError) throw env.error; + } + return next(); + }; + + exporter("__extends", __extends); + exporter("__assign", __assign); + exporter("__rest", __rest); + exporter("__decorate", __decorate); + exporter("__param", __param); + exporter("__esDecorate", __esDecorate); + exporter("__runInitializers", __runInitializers); + exporter("__propKey", __propKey); + exporter("__setFunctionName", __setFunctionName); + exporter("__metadata", __metadata); + exporter("__awaiter", __awaiter); + exporter("__generator", __generator); + exporter("__exportStar", __exportStar); + exporter("__createBinding", __createBinding); + exporter("__values", __values); + exporter("__read", __read); + exporter("__spread", __spread); + exporter("__spreadArrays", __spreadArrays); + exporter("__spreadArray", __spreadArray); + exporter("__await", __await); + exporter("__asyncGenerator", __asyncGenerator); + exporter("__asyncDelegator", __asyncDelegator); + exporter("__asyncValues", __asyncValues); + exporter("__makeTemplateObject", __makeTemplateObject); + exporter("__importStar", __importStar); + exporter("__importDefault", __importDefault); + exporter("__classPrivateFieldGet", __classPrivateFieldGet); + exporter("__classPrivateFieldSet", __classPrivateFieldSet); + exporter("__classPrivateFieldIn", __classPrivateFieldIn); + exporter("__addDisposableResource", __addDisposableResource); + exporter("__disposeResources", __disposeResources); +}); + + +/***/ }), + +/***/ 770: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +module.exports = __nccwpck_require__(218); + + +/***/ }), + +/***/ 218: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +var net = __nccwpck_require__(9278); +var tls = __nccwpck_require__(4756); +var http = __nccwpck_require__(8611); +var https = __nccwpck_require__(5692); +var events = __nccwpck_require__(4434); +var assert = __nccwpck_require__(2613); +var util = __nccwpck_require__(9023); + + +exports.httpOverHttp = httpOverHttp; +exports.httpsOverHttp = httpsOverHttp; +exports.httpOverHttps = httpOverHttps; +exports.httpsOverHttps = httpsOverHttps; + + +function httpOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + return agent; +} + +function httpsOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; +} + +function httpOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + return agent; +} + +function httpsOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; +} + + +function TunnelingAgent(options) { + var self = this; + self.options = options || {}; + self.proxyOptions = self.options.proxy || {}; + self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; + self.requests = []; + self.sockets = []; + + self.on('free', function onFree(socket, host, port, localAddress) { + var options = toOptions(host, port, localAddress); + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i]; + if (pending.host === options.host && pending.port === options.port) { + // Detect the request to connect same origin server, + // reuse the connection. + self.requests.splice(i, 1); + pending.request.onSocket(socket); + return; + } + } + socket.destroy(); + self.removeSocket(socket); + }); +} +util.inherits(TunnelingAgent, events.EventEmitter); + +TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { + var self = this; + var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); + + if (self.sockets.length >= this.maxSockets) { + // We are over limit so we'll add it to the queue. + self.requests.push(options); + return; + } + + // If we are under maxSockets create a new one. + self.createSocket(options, function(socket) { + socket.on('free', onFree); + socket.on('close', onCloseOrRemove); + socket.on('agentRemove', onCloseOrRemove); + req.onSocket(socket); + + function onFree() { + self.emit('free', socket, options); + } + + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener('free', onFree); + socket.removeListener('close', onCloseOrRemove); + socket.removeListener('agentRemove', onCloseOrRemove); + } + }); +}; + +TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this; + var placeholder = {}; + self.sockets.push(placeholder); + + var connectOptions = mergeOptions({}, self.proxyOptions, { + method: 'CONNECT', + path: options.host + ':' + options.port, + agent: false, + headers: { + host: options.host + ':' + options.port + } + }); + if (options.localAddress) { + connectOptions.localAddress = options.localAddress; + } + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {}; + connectOptions.headers['Proxy-Authorization'] = 'Basic ' + + new Buffer(connectOptions.proxyAuth).toString('base64'); + } + + debug('making CONNECT request'); + var connectReq = self.request(connectOptions); + connectReq.useChunkedEncodingByDefault = false; // for v0.6 + connectReq.once('response', onResponse); // for v0.6 + connectReq.once('upgrade', onUpgrade); // for v0.6 + connectReq.once('connect', onConnect); // for v0.7 or later + connectReq.once('error', onError); + connectReq.end(); + + function onResponse(res) { + // Very hacky. This is necessary to avoid http-parser leaks. + res.upgrade = true; + } + + function onUpgrade(res, socket, head) { + // Hacky. + process.nextTick(function() { + onConnect(res, socket, head); + }); + } + + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); + + if (res.statusCode !== 200) { + debug('tunneling socket could not be established, statusCode=%d', + res.statusCode); + socket.destroy(); + var error = new Error('tunneling socket could not be established, ' + + 'statusCode=' + res.statusCode); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + return; + } + if (head.length > 0) { + debug('got illegal response body from proxy'); + socket.destroy(); + var error = new Error('got illegal response body from proxy'); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + return; + } + debug('tunneling connection has established'); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + return cb(socket); + } + + function onError(cause) { + connectReq.removeAllListeners(); + + debug('tunneling socket could not be established, cause=%s\n', + cause.message, cause.stack); + var error = new Error('tunneling socket could not be established, ' + + 'cause=' + cause.message); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + } +}; + +TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket) + if (pos === -1) { + return; + } + this.sockets.splice(pos, 1); + + var pending = this.requests.shift(); + if (pending) { + // If we have pending requests and a socket gets closed a new one + // needs to be created to take over in the pool for the one that closed. + this.createSocket(pending, function(socket) { + pending.request.onSocket(socket); + }); + } +}; + +function createSecureSocket(options, cb) { + var self = this; + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + var hostHeader = options.request.getHeader('host'); + var tlsOptions = mergeOptions({}, self.options, { + socket: socket, + servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host + }); + + // 0 is dummy port for v0.6 + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); +} + + +function toOptions(host, port, localAddress) { + if (typeof host === 'string') { // since v0.10 + return { + host: host, + port: port, + localAddress: localAddress + }; + } + return host; // for v0.11 or later +} + +function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i]; + if (typeof overrides === 'object') { + var keys = Object.keys(overrides); + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j]; + if (overrides[k] !== undefined) { + target[k] = overrides[k]; + } + } + } + } + return target; +} + + +var debug; +if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug = function() { + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === 'string') { + args[0] = 'TUNNEL: ' + args[0]; + } else { + args.unshift('TUNNEL:'); + } + console.error.apply(console, args); + } +} else { + debug = function() {}; +} +exports.debug = debug; // for test + + +/***/ }), + +/***/ 6752: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const Client = __nccwpck_require__(6197) +const Dispatcher = __nccwpck_require__(992) +const errors = __nccwpck_require__(8707) +const Pool = __nccwpck_require__(5076) +const BalancedPool = __nccwpck_require__(1093) +const Agent = __nccwpck_require__(9965) +const util = __nccwpck_require__(3440) +const { InvalidArgumentError } = errors +const api = __nccwpck_require__(6615) +const buildConnector = __nccwpck_require__(9136) +const MockClient = __nccwpck_require__(7365) +const MockAgent = __nccwpck_require__(7501) +const MockPool = __nccwpck_require__(4004) +const mockErrors = __nccwpck_require__(2429) +const ProxyAgent = __nccwpck_require__(2720) +const RetryHandler = __nccwpck_require__(3573) +const { getGlobalDispatcher, setGlobalDispatcher } = __nccwpck_require__(2581) +const DecoratorHandler = __nccwpck_require__(8840) +const RedirectHandler = __nccwpck_require__(8299) +const createRedirectInterceptor = __nccwpck_require__(4415) + +let hasCrypto +try { + __nccwpck_require__(6982) + hasCrypto = true +} catch { + hasCrypto = false +} + +Object.assign(Dispatcher.prototype, api) + +module.exports.Dispatcher = Dispatcher +module.exports.Client = Client +module.exports.Pool = Pool +module.exports.BalancedPool = BalancedPool +module.exports.Agent = Agent +module.exports.ProxyAgent = ProxyAgent +module.exports.RetryHandler = RetryHandler + +module.exports.DecoratorHandler = DecoratorHandler +module.exports.RedirectHandler = RedirectHandler +module.exports.createRedirectInterceptor = createRedirectInterceptor + +module.exports.buildConnector = buildConnector +module.exports.errors = errors + +function makeDispatcher (fn) { + return (url, opts, handler) => { + if (typeof opts === 'function') { + handler = opts + opts = null + } + + if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) { + throw new InvalidArgumentError('invalid url') + } + + if (opts != null && typeof opts !== 'object') { + throw new InvalidArgumentError('invalid opts') + } + + if (opts && opts.path != null) { + if (typeof opts.path !== 'string') { + throw new InvalidArgumentError('invalid opts.path') + } + + let path = opts.path + if (!opts.path.startsWith('/')) { + path = `/${path}` + } + + url = new URL(util.parseOrigin(url).origin + path) + } else { + if (!opts) { + opts = typeof url === 'object' ? url : {} + } + + url = util.parseURL(url) + } + + const { agent, dispatcher = getGlobalDispatcher() } = opts + + if (agent) { + throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?') + } + + return fn.call(dispatcher, { + ...opts, + origin: url.origin, + path: url.search ? `${url.pathname}${url.search}` : url.pathname, + method: opts.method || (opts.body ? 'PUT' : 'GET') + }, handler) + } +} + +module.exports.setGlobalDispatcher = setGlobalDispatcher +module.exports.getGlobalDispatcher = getGlobalDispatcher + +if (util.nodeMajor > 16 || (util.nodeMajor === 16 && util.nodeMinor >= 8)) { + let fetchImpl = null + module.exports.fetch = async function fetch (resource) { + if (!fetchImpl) { + fetchImpl = (__nccwpck_require__(2315).fetch) + } + + try { + return await fetchImpl(...arguments) + } catch (err) { + if (typeof err === 'object') { + Error.captureStackTrace(err, this) + } + + throw err + } + } + module.exports.Headers = __nccwpck_require__(6349).Headers + module.exports.Response = __nccwpck_require__(8676).Response + module.exports.Request = __nccwpck_require__(5194).Request + module.exports.FormData = __nccwpck_require__(3073).FormData + module.exports.File = __nccwpck_require__(3041).File + module.exports.FileReader = __nccwpck_require__(2160).FileReader + + const { setGlobalOrigin, getGlobalOrigin } = __nccwpck_require__(5628) + + module.exports.setGlobalOrigin = setGlobalOrigin + module.exports.getGlobalOrigin = getGlobalOrigin + + const { CacheStorage } = __nccwpck_require__(4738) + const { kConstruct } = __nccwpck_require__(296) + + // Cache & CacheStorage are tightly coupled with fetch. Even if it may run + // in an older version of Node, it doesn't have any use without fetch. + module.exports.caches = new CacheStorage(kConstruct) +} + +if (util.nodeMajor >= 16) { + const { deleteCookie, getCookies, getSetCookies, setCookie } = __nccwpck_require__(3168) + + module.exports.deleteCookie = deleteCookie + module.exports.getCookies = getCookies + module.exports.getSetCookies = getSetCookies + module.exports.setCookie = setCookie + + const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(4322) + + module.exports.parseMIMEType = parseMIMEType + module.exports.serializeAMimeType = serializeAMimeType +} + +if (util.nodeMajor >= 18 && hasCrypto) { + const { WebSocket } = __nccwpck_require__(5171) + + module.exports.WebSocket = WebSocket +} + +module.exports.request = makeDispatcher(api.request) +module.exports.stream = makeDispatcher(api.stream) +module.exports.pipeline = makeDispatcher(api.pipeline) +module.exports.connect = makeDispatcher(api.connect) +module.exports.upgrade = makeDispatcher(api.upgrade) + +module.exports.MockClient = MockClient +module.exports.MockPool = MockPool +module.exports.MockAgent = MockAgent +module.exports.mockErrors = mockErrors + + +/***/ }), + +/***/ 9965: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { InvalidArgumentError } = __nccwpck_require__(8707) +const { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = __nccwpck_require__(6443) +const DispatcherBase = __nccwpck_require__(1) +const Pool = __nccwpck_require__(5076) +const Client = __nccwpck_require__(6197) +const util = __nccwpck_require__(3440) +const createRedirectInterceptor = __nccwpck_require__(4415) +const { WeakRef, FinalizationRegistry } = __nccwpck_require__(3194)() + +const kOnConnect = Symbol('onConnect') +const kOnDisconnect = Symbol('onDisconnect') +const kOnConnectionError = Symbol('onConnectionError') +const kMaxRedirections = Symbol('maxRedirections') +const kOnDrain = Symbol('onDrain') +const kFactory = Symbol('factory') +const kFinalizer = Symbol('finalizer') +const kOptions = Symbol('options') + +function defaultFactory (origin, opts) { + return opts && opts.connections === 1 + ? new Client(origin, opts) + : new Pool(origin, opts) +} + +class Agent extends DispatcherBase { + constructor ({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { + super() + + if (typeof factory !== 'function') { + throw new InvalidArgumentError('factory must be a function.') + } + + if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { + throw new InvalidArgumentError('connect must be a function or an object') + } + + if (!Number.isInteger(maxRedirections) || maxRedirections < 0) { + throw new InvalidArgumentError('maxRedirections must be a positive number') + } + + if (connect && typeof connect !== 'function') { + connect = { ...connect } + } + + this[kInterceptors] = options.interceptors && options.interceptors.Agent && Array.isArray(options.interceptors.Agent) + ? options.interceptors.Agent + : [createRedirectInterceptor({ maxRedirections })] + + this[kOptions] = { ...util.deepClone(options), connect } + this[kOptions].interceptors = options.interceptors + ? { ...options.interceptors } + : undefined + this[kMaxRedirections] = maxRedirections + this[kFactory] = factory + this[kClients] = new Map() + this[kFinalizer] = new FinalizationRegistry(/* istanbul ignore next: gc is undeterministic */ key => { + const ref = this[kClients].get(key) + if (ref !== undefined && ref.deref() === undefined) { + this[kClients].delete(key) + } + }) + + const agent = this + + this[kOnDrain] = (origin, targets) => { + agent.emit('drain', origin, [agent, ...targets]) + } + + this[kOnConnect] = (origin, targets) => { + agent.emit('connect', origin, [agent, ...targets]) + } + + this[kOnDisconnect] = (origin, targets, err) => { + agent.emit('disconnect', origin, [agent, ...targets], err) + } + + this[kOnConnectionError] = (origin, targets, err) => { + agent.emit('connectionError', origin, [agent, ...targets], err) + } + } + + get [kRunning] () { + let ret = 0 + for (const ref of this[kClients].values()) { + const client = ref.deref() + /* istanbul ignore next: gc is undeterministic */ + if (client) { + ret += client[kRunning] + } + } + return ret + } + + [kDispatch] (opts, handler) { + let key + if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) { + key = String(opts.origin) + } else { + throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.') + } + + const ref = this[kClients].get(key) + + let dispatcher = ref ? ref.deref() : null + if (!dispatcher) { + dispatcher = this[kFactory](opts.origin, this[kOptions]) + .on('drain', this[kOnDrain]) + .on('connect', this[kOnConnect]) + .on('disconnect', this[kOnDisconnect]) + .on('connectionError', this[kOnConnectionError]) + + this[kClients].set(key, new WeakRef(dispatcher)) + this[kFinalizer].register(dispatcher, key) + } + + return dispatcher.dispatch(opts, handler) + } + + async [kClose] () { + const closePromises = [] + for (const ref of this[kClients].values()) { + const client = ref.deref() + /* istanbul ignore else: gc is undeterministic */ + if (client) { + closePromises.push(client.close()) + } + } + + await Promise.all(closePromises) + } + + async [kDestroy] (err) { + const destroyPromises = [] + for (const ref of this[kClients].values()) { + const client = ref.deref() + /* istanbul ignore else: gc is undeterministic */ + if (client) { + destroyPromises.push(client.destroy(err)) + } + } + + await Promise.all(destroyPromises) + } +} + +module.exports = Agent + + +/***/ }), + +/***/ 158: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const { addAbortListener } = __nccwpck_require__(3440) +const { RequestAbortedError } = __nccwpck_require__(8707) + +const kListener = Symbol('kListener') +const kSignal = Symbol('kSignal') + +function abort (self) { + if (self.abort) { + self.abort() + } else { + self.onError(new RequestAbortedError()) + } +} + +function addSignal (self, signal) { + self[kSignal] = null + self[kListener] = null + + if (!signal) { + return + } + + if (signal.aborted) { + abort(self) + return + } + + self[kSignal] = signal + self[kListener] = () => { + abort(self) + } + + addAbortListener(self[kSignal], self[kListener]) +} + +function removeSignal (self) { + if (!self[kSignal]) { + return + } + + if ('removeEventListener' in self[kSignal]) { + self[kSignal].removeEventListener('abort', self[kListener]) + } else { + self[kSignal].removeListener('abort', self[kListener]) + } + + self[kSignal] = null + self[kListener] = null +} + +module.exports = { + addSignal, + removeSignal +} + + +/***/ }), + +/***/ 4660: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { AsyncResource } = __nccwpck_require__(290) +const { InvalidArgumentError, RequestAbortedError, SocketError } = __nccwpck_require__(8707) +const util = __nccwpck_require__(3440) +const { addSignal, removeSignal } = __nccwpck_require__(158) + +class ConnectHandler extends AsyncResource { + constructor (opts, callback) { + if (!opts || typeof opts !== 'object') { + throw new InvalidArgumentError('invalid opts') + } + + if (typeof callback !== 'function') { + throw new InvalidArgumentError('invalid callback') + } + + const { signal, opaque, responseHeaders } = opts + + if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { + throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') + } + + super('UNDICI_CONNECT') + + this.opaque = opaque || null + this.responseHeaders = responseHeaders || null + this.callback = callback + this.abort = null + + addSignal(this, signal) + } + + onConnect (abort, context) { + if (!this.callback) { + throw new RequestAbortedError() + } + + this.abort = abort + this.context = context + } + + onHeaders () { + throw new SocketError('bad connect', null) + } + + onUpgrade (statusCode, rawHeaders, socket) { + const { callback, opaque, context } = this + + removeSignal(this) + + this.callback = null + + let headers = rawHeaders + // Indicates is an HTTP2Session + if (headers != null) { + headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) + } + + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + socket, + opaque, + context + }) + } + + onError (err) { + const { callback, opaque } = this + + removeSignal(this) + + if (callback) { + this.callback = null + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }) + }) + } + } +} + +function connect (opts, callback) { + if (callback === undefined) { + return new Promise((resolve, reject) => { + connect.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data) + }) + }) + } + + try { + const connectHandler = new ConnectHandler(opts, callback) + this.dispatch({ ...opts, method: 'CONNECT' }, connectHandler) + } catch (err) { + if (typeof callback !== 'function') { + throw err + } + const opaque = opts && opts.opaque + queueMicrotask(() => callback(err, { opaque })) + } +} + +module.exports = connect + + +/***/ }), + +/***/ 6862: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { + Readable, + Duplex, + PassThrough +} = __nccwpck_require__(2203) +const { + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError +} = __nccwpck_require__(8707) +const util = __nccwpck_require__(3440) +const { AsyncResource } = __nccwpck_require__(290) +const { addSignal, removeSignal } = __nccwpck_require__(158) +const assert = __nccwpck_require__(2613) + +const kResume = Symbol('resume') + +class PipelineRequest extends Readable { + constructor () { + super({ autoDestroy: true }) + + this[kResume] = null + } + + _read () { + const { [kResume]: resume } = this + + if (resume) { + this[kResume] = null + resume() + } + } + + _destroy (err, callback) { + this._read() + + callback(err) + } +} + +class PipelineResponse extends Readable { + constructor (resume) { + super({ autoDestroy: true }) + this[kResume] = resume + } + + _read () { + this[kResume]() + } + + _destroy (err, callback) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError() + } + + callback(err) + } +} + +class PipelineHandler extends AsyncResource { + constructor (opts, handler) { + if (!opts || typeof opts !== 'object') { + throw new InvalidArgumentError('invalid opts') + } + + if (typeof handler !== 'function') { + throw new InvalidArgumentError('invalid handler') + } + + const { signal, method, opaque, onInfo, responseHeaders } = opts + + if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { + throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') + } + + if (method === 'CONNECT') { + throw new InvalidArgumentError('invalid method') + } + + if (onInfo && typeof onInfo !== 'function') { + throw new InvalidArgumentError('invalid onInfo callback') + } + + super('UNDICI_PIPELINE') + + this.opaque = opaque || null + this.responseHeaders = responseHeaders || null + this.handler = handler + this.abort = null + this.context = null + this.onInfo = onInfo || null + + this.req = new PipelineRequest().on('error', util.nop) + + this.ret = new Duplex({ + readableObjectMode: opts.objectMode, + autoDestroy: true, + read: () => { + const { body } = this + + if (body && body.resume) { + body.resume() + } + }, + write: (chunk, encoding, callback) => { + const { req } = this + + if (req.push(chunk, encoding) || req._readableState.destroyed) { + callback() + } else { + req[kResume] = callback + } + }, + destroy: (err, callback) => { + const { body, req, res, ret, abort } = this + + if (!err && !ret._readableState.endEmitted) { + err = new RequestAbortedError() + } + + if (abort && err) { + abort() + } + + util.destroy(body, err) + util.destroy(req, err) + util.destroy(res, err) + + removeSignal(this) + + callback(err) + } + }).on('prefinish', () => { + const { req } = this + + // Node < 15 does not call _final in same tick. + req.push(null) + }) + + this.res = null + + addSignal(this, signal) + } + + onConnect (abort, context) { + const { ret, res } = this + + assert(!res, 'pipeline cannot be retried') + + if (ret.destroyed) { + throw new RequestAbortedError() + } + + this.abort = abort + this.context = context + } + + onHeaders (statusCode, rawHeaders, resume) { + const { opaque, handler, context } = this + + if (statusCode < 200) { + if (this.onInfo) { + const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) + this.onInfo({ statusCode, headers }) + } + return + } + + this.res = new PipelineResponse(resume) + + let body + try { + this.handler = null + const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) + body = this.runInAsyncScope(handler, null, { + statusCode, + headers, + opaque, + body: this.res, + context + }) + } catch (err) { + this.res.on('error', util.nop) + throw err + } + + if (!body || typeof body.on !== 'function') { + throw new InvalidReturnValueError('expected Readable') + } + + body + .on('data', (chunk) => { + const { ret, body } = this + + if (!ret.push(chunk) && body.pause) { + body.pause() + } + }) + .on('error', (err) => { + const { ret } = this + + util.destroy(ret, err) + }) + .on('end', () => { + const { ret } = this + + ret.push(null) + }) + .on('close', () => { + const { ret } = this + + if (!ret._readableState.ended) { + util.destroy(ret, new RequestAbortedError()) + } + }) + + this.body = body + } + + onData (chunk) { + const { res } = this + return res.push(chunk) + } + + onComplete (trailers) { + const { res } = this + res.push(null) + } + + onError (err) { + const { ret } = this + this.handler = null + util.destroy(ret, err) + } +} + +function pipeline (opts, handler) { + try { + const pipelineHandler = new PipelineHandler(opts, handler) + this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler) + return pipelineHandler.ret + } catch (err) { + return new PassThrough().destroy(err) + } +} + +module.exports = pipeline + + +/***/ }), + +/***/ 4043: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const Readable = __nccwpck_require__(9927) +const { + InvalidArgumentError, + RequestAbortedError +} = __nccwpck_require__(8707) +const util = __nccwpck_require__(3440) +const { getResolveErrorBodyCallback } = __nccwpck_require__(7655) +const { AsyncResource } = __nccwpck_require__(290) +const { addSignal, removeSignal } = __nccwpck_require__(158) + +class RequestHandler extends AsyncResource { + constructor (opts, callback) { + if (!opts || typeof opts !== 'object') { + throw new InvalidArgumentError('invalid opts') + } + + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts + + try { + if (typeof callback !== 'function') { + throw new InvalidArgumentError('invalid callback') + } + + if (highWaterMark && (typeof highWaterMark !== 'number' || highWaterMark < 0)) { + throw new InvalidArgumentError('invalid highWaterMark') + } + + if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { + throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') + } + + if (method === 'CONNECT') { + throw new InvalidArgumentError('invalid method') + } + + if (onInfo && typeof onInfo !== 'function') { + throw new InvalidArgumentError('invalid onInfo callback') + } + + super('UNDICI_REQUEST') + } catch (err) { + if (util.isStream(body)) { + util.destroy(body.on('error', util.nop), err) + } + throw err + } + + this.responseHeaders = responseHeaders || null + this.opaque = opaque || null + this.callback = callback + this.res = null + this.abort = null + this.body = body + this.trailers = {} + this.context = null + this.onInfo = onInfo || null + this.throwOnError = throwOnError + this.highWaterMark = highWaterMark + + if (util.isStream(body)) { + body.on('error', (err) => { + this.onError(err) + }) + } + + addSignal(this, signal) + } + + onConnect (abort, context) { + if (!this.callback) { + throw new RequestAbortedError() + } + + this.abort = abort + this.context = context + } + + onHeaders (statusCode, rawHeaders, resume, statusMessage) { + const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this + + const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) + + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }) + } + return + } + + const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers + const contentType = parsedHeaders['content-type'] + const body = new Readable({ resume, abort, contentType, highWaterMark }) + + this.callback = null + this.res = body + if (callback !== null) { + if (this.throwOnError && statusCode >= 400) { + this.runInAsyncScope(getResolveErrorBodyCallback, null, + { callback, body, contentType, statusCode, statusMessage, headers } + ) + } else { + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + trailers: this.trailers, + opaque, + body, + context + }) + } + } + } + + onData (chunk) { + const { res } = this + return res.push(chunk) + } + + onComplete (trailers) { + const { res } = this + + removeSignal(this) + + util.parseHeaders(trailers, this.trailers) + + res.push(null) + } + + onError (err) { + const { res, callback, body, opaque } = this + + removeSignal(this) + + if (callback) { + // TODO: Does this need queueMicrotask? + this.callback = null + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }) + }) + } + + if (res) { + this.res = null + // Ensure all queued handlers are invoked before destroying res. + queueMicrotask(() => { + util.destroy(res, err) + }) + } + + if (body) { + this.body = null + util.destroy(body, err) + } + } +} + +function request (opts, callback) { + if (callback === undefined) { + return new Promise((resolve, reject) => { + request.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data) + }) + }) + } + + try { + this.dispatch(opts, new RequestHandler(opts, callback)) + } catch (err) { + if (typeof callback !== 'function') { + throw err + } + const opaque = opts && opts.opaque + queueMicrotask(() => callback(err, { opaque })) + } +} + +module.exports = request +module.exports.RequestHandler = RequestHandler + + +/***/ }), + +/***/ 3560: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { finished, PassThrough } = __nccwpck_require__(2203) +const { + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError +} = __nccwpck_require__(8707) +const util = __nccwpck_require__(3440) +const { getResolveErrorBodyCallback } = __nccwpck_require__(7655) +const { AsyncResource } = __nccwpck_require__(290) +const { addSignal, removeSignal } = __nccwpck_require__(158) + +class StreamHandler extends AsyncResource { + constructor (opts, factory, callback) { + if (!opts || typeof opts !== 'object') { + throw new InvalidArgumentError('invalid opts') + } + + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts + + try { + if (typeof callback !== 'function') { + throw new InvalidArgumentError('invalid callback') + } + + if (typeof factory !== 'function') { + throw new InvalidArgumentError('invalid factory') + } + + if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { + throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') + } + + if (method === 'CONNECT') { + throw new InvalidArgumentError('invalid method') + } + + if (onInfo && typeof onInfo !== 'function') { + throw new InvalidArgumentError('invalid onInfo callback') + } + + super('UNDICI_STREAM') + } catch (err) { + if (util.isStream(body)) { + util.destroy(body.on('error', util.nop), err) + } + throw err + } + + this.responseHeaders = responseHeaders || null + this.opaque = opaque || null + this.factory = factory + this.callback = callback + this.res = null + this.abort = null + this.context = null + this.trailers = null + this.body = body + this.onInfo = onInfo || null + this.throwOnError = throwOnError || false + + if (util.isStream(body)) { + body.on('error', (err) => { + this.onError(err) + }) + } + + addSignal(this, signal) + } + + onConnect (abort, context) { + if (!this.callback) { + throw new RequestAbortedError() + } + + this.abort = abort + this.context = context + } + + onHeaders (statusCode, rawHeaders, resume, statusMessage) { + const { factory, opaque, context, callback, responseHeaders } = this + + const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) + + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }) + } + return + } + + this.factory = null + + let res + + if (this.throwOnError && statusCode >= 400) { + const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers + const contentType = parsedHeaders['content-type'] + res = new PassThrough() + + this.callback = null + this.runInAsyncScope(getResolveErrorBodyCallback, null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ) + } else { + if (factory === null) { + return + } + + res = this.runInAsyncScope(factory, null, { + statusCode, + headers, + opaque, + context + }) + + if ( + !res || + typeof res.write !== 'function' || + typeof res.end !== 'function' || + typeof res.on !== 'function' + ) { + throw new InvalidReturnValueError('expected Writable') + } + + // TODO: Avoid finished. It registers an unnecessary amount of listeners. + finished(res, { readable: false }, (err) => { + const { callback, res, opaque, trailers, abort } = this + + this.res = null + if (err || !res.readable) { + util.destroy(res, err) + } + + this.callback = null + this.runInAsyncScope(callback, null, err || null, { opaque, trailers }) + + if (err) { + abort() + } + }) + } + + res.on('drain', resume) + + this.res = res + + const needDrain = res.writableNeedDrain !== undefined + ? res.writableNeedDrain + : res._writableState && res._writableState.needDrain + + return needDrain !== true + } + + onData (chunk) { + const { res } = this + + return res ? res.write(chunk) : true + } + + onComplete (trailers) { + const { res } = this + + removeSignal(this) + + if (!res) { + return + } + + this.trailers = util.parseHeaders(trailers) + + res.end() + } + + onError (err) { + const { res, callback, opaque, body } = this + + removeSignal(this) + + this.factory = null + + if (res) { + this.res = null + util.destroy(res, err) + } else if (callback) { + this.callback = null + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }) + }) + } + + if (body) { + this.body = null + util.destroy(body, err) + } + } +} + +function stream (opts, factory, callback) { + if (callback === undefined) { + return new Promise((resolve, reject) => { + stream.call(this, opts, factory, (err, data) => { + return err ? reject(err) : resolve(data) + }) + }) + } + + try { + this.dispatch(opts, new StreamHandler(opts, factory, callback)) + } catch (err) { + if (typeof callback !== 'function') { + throw err + } + const opaque = opts && opts.opaque + queueMicrotask(() => callback(err, { opaque })) + } +} + +module.exports = stream + + +/***/ }), + +/***/ 1882: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { InvalidArgumentError, RequestAbortedError, SocketError } = __nccwpck_require__(8707) +const { AsyncResource } = __nccwpck_require__(290) +const util = __nccwpck_require__(3440) +const { addSignal, removeSignal } = __nccwpck_require__(158) +const assert = __nccwpck_require__(2613) + +class UpgradeHandler extends AsyncResource { + constructor (opts, callback) { + if (!opts || typeof opts !== 'object') { + throw new InvalidArgumentError('invalid opts') + } + + if (typeof callback !== 'function') { + throw new InvalidArgumentError('invalid callback') + } + + const { signal, opaque, responseHeaders } = opts + + if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { + throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') + } + + super('UNDICI_UPGRADE') + + this.responseHeaders = responseHeaders || null + this.opaque = opaque || null + this.callback = callback + this.abort = null + this.context = null + + addSignal(this, signal) + } + + onConnect (abort, context) { + if (!this.callback) { + throw new RequestAbortedError() + } + + this.abort = abort + this.context = null + } + + onHeaders () { + throw new SocketError('bad upgrade', null) + } + + onUpgrade (statusCode, rawHeaders, socket) { + const { callback, opaque, context } = this + + assert.strictEqual(statusCode, 101) + + removeSignal(this) + + this.callback = null + const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) + this.runInAsyncScope(callback, null, null, { + headers, + socket, + opaque, + context + }) + } + + onError (err) { + const { callback, opaque } = this + + removeSignal(this) + + if (callback) { + this.callback = null + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }) + }) + } + } +} + +function upgrade (opts, callback) { + if (callback === undefined) { + return new Promise((resolve, reject) => { + upgrade.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data) + }) + }) + } + + try { + const upgradeHandler = new UpgradeHandler(opts, callback) + this.dispatch({ + ...opts, + method: opts.method || 'GET', + upgrade: opts.protocol || 'Websocket' + }, upgradeHandler) + } catch (err) { + if (typeof callback !== 'function') { + throw err + } + const opaque = opts && opts.opaque + queueMicrotask(() => callback(err, { opaque })) + } +} + +module.exports = upgrade + + +/***/ }), + +/***/ 6615: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +module.exports.request = __nccwpck_require__(4043) +module.exports.stream = __nccwpck_require__(3560) +module.exports.pipeline = __nccwpck_require__(6862) +module.exports.upgrade = __nccwpck_require__(1882) +module.exports.connect = __nccwpck_require__(4660) + + +/***/ }), + +/***/ 9927: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// Ported from https://github.com/nodejs/undici/pull/907 + + + +const assert = __nccwpck_require__(2613) +const { Readable } = __nccwpck_require__(2203) +const { RequestAbortedError, NotSupportedError, InvalidArgumentError } = __nccwpck_require__(8707) +const util = __nccwpck_require__(3440) +const { ReadableStreamFrom, toUSVString } = __nccwpck_require__(3440) + +let Blob + +const kConsume = Symbol('kConsume') +const kReading = Symbol('kReading') +const kBody = Symbol('kBody') +const kAbort = Symbol('abort') +const kContentType = Symbol('kContentType') + +const noop = () => {} + +module.exports = class BodyReadable extends Readable { + constructor ({ + resume, + abort, + contentType = '', + highWaterMark = 64 * 1024 // Same as nodejs fs streams. + }) { + super({ + autoDestroy: true, + read: resume, + highWaterMark + }) + + this._readableState.dataEmitted = false + + this[kAbort] = abort + this[kConsume] = null + this[kBody] = null + this[kContentType] = contentType + + // Is stream being consumed through Readable API? + // This is an optimization so that we avoid checking + // for 'data' and 'readable' listeners in the hot path + // inside push(). + this[kReading] = false + } + + destroy (err) { + if (this.destroyed) { + // Node < 16 + return this + } + + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError() + } + + if (err) { + this[kAbort]() + } + + return super.destroy(err) + } + + emit (ev, ...args) { + if (ev === 'data') { + // Node < 16.7 + this._readableState.dataEmitted = true + } else if (ev === 'error') { + // Node < 16 + this._readableState.errorEmitted = true + } + return super.emit(ev, ...args) + } + + on (ev, ...args) { + if (ev === 'data' || ev === 'readable') { + this[kReading] = true + } + return super.on(ev, ...args) + } + + addListener (ev, ...args) { + return this.on(ev, ...args) + } + + off (ev, ...args) { + const ret = super.off(ev, ...args) + if (ev === 'data' || ev === 'readable') { + this[kReading] = ( + this.listenerCount('data') > 0 || + this.listenerCount('readable') > 0 + ) + } + return ret + } + + removeListener (ev, ...args) { + return this.off(ev, ...args) + } + + push (chunk) { + if (this[kConsume] && chunk !== null && this.readableLength === 0) { + consumePush(this[kConsume], chunk) + return this[kReading] ? super.push(chunk) : true + } + return super.push(chunk) + } + + // https://fetch.spec.whatwg.org/#dom-body-text + async text () { + return consume(this, 'text') + } + + // https://fetch.spec.whatwg.org/#dom-body-json + async json () { + return consume(this, 'json') + } + + // https://fetch.spec.whatwg.org/#dom-body-blob + async blob () { + return consume(this, 'blob') + } + + // https://fetch.spec.whatwg.org/#dom-body-arraybuffer + async arrayBuffer () { + return consume(this, 'arrayBuffer') + } + + // https://fetch.spec.whatwg.org/#dom-body-formdata + async formData () { + // TODO: Implement. + throw new NotSupportedError() + } + + // https://fetch.spec.whatwg.org/#dom-body-bodyused + get bodyUsed () { + return util.isDisturbed(this) + } + + // https://fetch.spec.whatwg.org/#dom-body-body + get body () { + if (!this[kBody]) { + this[kBody] = ReadableStreamFrom(this) + if (this[kConsume]) { + // TODO: Is this the best way to force a lock? + this[kBody].getReader() // Ensure stream is locked. + assert(this[kBody].locked) + } + } + return this[kBody] + } + + dump (opts) { + let limit = opts && Number.isFinite(opts.limit) ? opts.limit : 262144 + const signal = opts && opts.signal + + if (signal) { + try { + if (typeof signal !== 'object' || !('aborted' in signal)) { + throw new InvalidArgumentError('signal must be an AbortSignal') + } + util.throwIfAborted(signal) + } catch (err) { + return Promise.reject(err) + } + } + + if (this.closed) { + return Promise.resolve(null) + } + + return new Promise((resolve, reject) => { + const signalListenerCleanup = signal + ? util.addAbortListener(signal, () => { + this.destroy() + }) + : noop + + this + .on('close', function () { + signalListenerCleanup() + if (signal && signal.aborted) { + reject(signal.reason || Object.assign(new Error('The operation was aborted'), { name: 'AbortError' })) + } else { + resolve(null) + } + }) + .on('error', noop) + .on('data', function (chunk) { + limit -= chunk.length + if (limit <= 0) { + this.destroy() + } + }) + .resume() + }) + } +} + +// https://streams.spec.whatwg.org/#readablestream-locked +function isLocked (self) { + // Consume is an implicit lock. + return (self[kBody] && self[kBody].locked === true) || self[kConsume] +} + +// https://fetch.spec.whatwg.org/#body-unusable +function isUnusable (self) { + return util.isDisturbed(self) || isLocked(self) +} + +async function consume (stream, type) { + if (isUnusable(stream)) { + throw new TypeError('unusable') + } + + assert(!stream[kConsume]) + + return new Promise((resolve, reject) => { + stream[kConsume] = { + type, + stream, + resolve, + reject, + length: 0, + body: [] + } + + stream + .on('error', function (err) { + consumeFinish(this[kConsume], err) + }) + .on('close', function () { + if (this[kConsume].body !== null) { + consumeFinish(this[kConsume], new RequestAbortedError()) + } + }) + + process.nextTick(consumeStart, stream[kConsume]) + }) +} + +function consumeStart (consume) { + if (consume.body === null) { + return + } + + const { _readableState: state } = consume.stream + + for (const chunk of state.buffer) { + consumePush(consume, chunk) + } + + if (state.endEmitted) { + consumeEnd(this[kConsume]) + } else { + consume.stream.on('end', function () { + consumeEnd(this[kConsume]) + }) + } + + consume.stream.resume() + + while (consume.stream.read() != null) { + // Loop + } +} + +function consumeEnd (consume) { + const { type, body, resolve, stream, length } = consume + + try { + if (type === 'text') { + resolve(toUSVString(Buffer.concat(body))) + } else if (type === 'json') { + resolve(JSON.parse(Buffer.concat(body))) + } else if (type === 'arrayBuffer') { + const dst = new Uint8Array(length) + + let pos = 0 + for (const buf of body) { + dst.set(buf, pos) + pos += buf.byteLength + } + + resolve(dst.buffer) + } else if (type === 'blob') { + if (!Blob) { + Blob = (__nccwpck_require__(181).Blob) + } + resolve(new Blob(body, { type: stream[kContentType] })) + } + + consumeFinish(consume) + } catch (err) { + stream.destroy(err) + } +} + +function consumePush (consume, chunk) { + consume.length += chunk.length + consume.body.push(chunk) +} + +function consumeFinish (consume, err) { + if (consume.body === null) { + return + } + + if (err) { + consume.reject(err) + } else { + consume.resolve() + } + + consume.type = null + consume.stream = null + consume.resolve = null + consume.reject = null + consume.length = 0 + consume.body = null +} + + +/***/ }), + +/***/ 7655: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const assert = __nccwpck_require__(2613) +const { + ResponseStatusCodeError +} = __nccwpck_require__(8707) +const { toUSVString } = __nccwpck_require__(3440) + +async function getResolveErrorBodyCallback ({ callback, body, contentType, statusCode, statusMessage, headers }) { + assert(body) + + let chunks = [] + let limit = 0 + + for await (const chunk of body) { + chunks.push(chunk) + limit += chunk.length + if (limit > 128 * 1024) { + chunks = null + break + } + } + + if (statusCode === 204 || !contentType || !chunks) { + process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers)) + return + } + + try { + if (contentType.startsWith('application/json')) { + const payload = JSON.parse(toUSVString(Buffer.concat(chunks))) + process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload)) + return + } + + if (contentType.startsWith('text/')) { + const payload = toUSVString(Buffer.concat(chunks)) + process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload)) + return + } + } catch (err) { + // Process in a fallback if error + } + + process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers)) +} + +module.exports = { getResolveErrorBodyCallback } + + +/***/ }), + +/***/ 1093: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { + BalancedPoolMissingUpstreamError, + InvalidArgumentError +} = __nccwpck_require__(8707) +const { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher +} = __nccwpck_require__(8640) +const Pool = __nccwpck_require__(5076) +const { kUrl, kInterceptors } = __nccwpck_require__(6443) +const { parseOrigin } = __nccwpck_require__(3440) +const kFactory = Symbol('factory') + +const kOptions = Symbol('options') +const kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor') +const kCurrentWeight = Symbol('kCurrentWeight') +const kIndex = Symbol('kIndex') +const kWeight = Symbol('kWeight') +const kMaxWeightPerServer = Symbol('kMaxWeightPerServer') +const kErrorPenalty = Symbol('kErrorPenalty') + +function getGreatestCommonDivisor (a, b) { + if (b === 0) return a + return getGreatestCommonDivisor(b, a % b) +} + +function defaultFactory (origin, opts) { + return new Pool(origin, opts) +} + +class BalancedPool extends PoolBase { + constructor (upstreams = [], { factory = defaultFactory, ...opts } = {}) { + super() + + this[kOptions] = opts + this[kIndex] = -1 + this[kCurrentWeight] = 0 + + this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100 + this[kErrorPenalty] = this[kOptions].errorPenalty || 15 + + if (!Array.isArray(upstreams)) { + upstreams = [upstreams] + } + + if (typeof factory !== 'function') { + throw new InvalidArgumentError('factory must be a function.') + } + + this[kInterceptors] = opts.interceptors && opts.interceptors.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) + ? opts.interceptors.BalancedPool + : [] + this[kFactory] = factory + + for (const upstream of upstreams) { + this.addUpstream(upstream) + } + this._updateBalancedPoolStats() + } + + addUpstream (upstream) { + const upstreamOrigin = parseOrigin(upstream).origin + + if (this[kClients].find((pool) => ( + pool[kUrl].origin === upstreamOrigin && + pool.closed !== true && + pool.destroyed !== true + ))) { + return this + } + const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions])) + + this[kAddClient](pool) + pool.on('connect', () => { + pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]) + }) + + pool.on('connectionError', () => { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]) + this._updateBalancedPoolStats() + }) + + pool.on('disconnect', (...args) => { + const err = args[2] + if (err && err.code === 'UND_ERR_SOCKET') { + // decrease the weight of the pool. + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]) + this._updateBalancedPoolStats() + } + }) + + for (const client of this[kClients]) { + client[kWeight] = this[kMaxWeightPerServer] + } + + this._updateBalancedPoolStats() + + return this + } + + _updateBalancedPoolStats () { + this[kGreatestCommonDivisor] = this[kClients].map(p => p[kWeight]).reduce(getGreatestCommonDivisor, 0) + } + + removeUpstream (upstream) { + const upstreamOrigin = parseOrigin(upstream).origin + + const pool = this[kClients].find((pool) => ( + pool[kUrl].origin === upstreamOrigin && + pool.closed !== true && + pool.destroyed !== true + )) + + if (pool) { + this[kRemoveClient](pool) + } + + return this + } + + get upstreams () { + return this[kClients] + .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true) + .map((p) => p[kUrl].origin) + } + + [kGetDispatcher] () { + // We validate that pools is greater than 0, + // otherwise we would have to wait until an upstream + // is added, which might never happen. + if (this[kClients].length === 0) { + throw new BalancedPoolMissingUpstreamError() + } + + const dispatcher = this[kClients].find(dispatcher => ( + !dispatcher[kNeedDrain] && + dispatcher.closed !== true && + dispatcher.destroyed !== true + )) + + if (!dispatcher) { + return + } + + const allClientsBusy = this[kClients].map(pool => pool[kNeedDrain]).reduce((a, b) => a && b, true) + + if (allClientsBusy) { + return + } + + let counter = 0 + + let maxWeightIndex = this[kClients].findIndex(pool => !pool[kNeedDrain]) + + while (counter++ < this[kClients].length) { + this[kIndex] = (this[kIndex] + 1) % this[kClients].length + const pool = this[kClients][this[kIndex]] + + // find pool index with the largest weight + if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { + maxWeightIndex = this[kIndex] + } + + // decrease the current weight every `this[kClients].length`. + if (this[kIndex] === 0) { + // Set the current weight to the next lower weight. + this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor] + + if (this[kCurrentWeight] <= 0) { + this[kCurrentWeight] = this[kMaxWeightPerServer] + } + } + if (pool[kWeight] >= this[kCurrentWeight] && (!pool[kNeedDrain])) { + return pool + } + } + + this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight] + this[kIndex] = maxWeightIndex + return this[kClients][maxWeightIndex] + } +} + +module.exports = BalancedPool + + +/***/ }), + +/***/ 479: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { kConstruct } = __nccwpck_require__(296) +const { urlEquals, fieldValues: getFieldValues } = __nccwpck_require__(3993) +const { kEnumerableProperty, isDisturbed } = __nccwpck_require__(3440) +const { kHeadersList } = __nccwpck_require__(6443) +const { webidl } = __nccwpck_require__(4222) +const { Response, cloneResponse } = __nccwpck_require__(8676) +const { Request } = __nccwpck_require__(5194) +const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(9710) +const { fetching } = __nccwpck_require__(2315) +const { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = __nccwpck_require__(5523) +const assert = __nccwpck_require__(2613) +const { getGlobalDispatcher } = __nccwpck_require__(2581) + +/** + * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation + * @typedef {Object} CacheBatchOperation + * @property {'delete' | 'put'} type + * @property {any} request + * @property {any} response + * @property {import('../../types/cache').CacheQueryOptions} options + */ + +/** + * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list + * @typedef {[any, any][]} requestResponseList + */ + +class Cache { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list + * @type {requestResponseList} + */ + #relevantRequestResponseList + + constructor () { + if (arguments[0] !== kConstruct) { + webidl.illegalConstructor() + } + + this.#relevantRequestResponseList = arguments[1] + } + + async match (request, options = {}) { + webidl.brandCheck(this, Cache) + webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.match' }) + + request = webidl.converters.RequestInfo(request) + options = webidl.converters.CacheQueryOptions(options) + + const p = await this.matchAll(request, options) + + if (p.length === 0) { + return + } + + return p[0] + } + + async matchAll (request = undefined, options = {}) { + webidl.brandCheck(this, Cache) + + if (request !== undefined) request = webidl.converters.RequestInfo(request) + options = webidl.converters.CacheQueryOptions(options) + + // 1. + let r = null + + // 2. + if (request !== undefined) { + if (request instanceof Request) { + // 2.1.1 + r = request[kState] + + // 2.1.2 + if (r.method !== 'GET' && !options.ignoreMethod) { + return [] + } + } else if (typeof request === 'string') { + // 2.2.1 + r = new Request(request)[kState] + } + } + + // 5. + // 5.1 + const responses = [] + + // 5.2 + if (request === undefined) { + // 5.2.1 + for (const requestResponse of this.#relevantRequestResponseList) { + responses.push(requestResponse[1]) + } + } else { // 5.3 + // 5.3.1 + const requestResponses = this.#queryCache(r, options) + + // 5.3.2 + for (const requestResponse of requestResponses) { + responses.push(requestResponse[1]) + } + } + + // 5.4 + // We don't implement CORs so we don't need to loop over the responses, yay! + + // 5.5.1 + const responseList = [] + + // 5.5.2 + for (const response of responses) { + // 5.5.2.1 + const responseObject = new Response(response.body?.source ?? null) + const body = responseObject[kState].body + responseObject[kState] = response + responseObject[kState].body = body + responseObject[kHeaders][kHeadersList] = response.headersList + responseObject[kHeaders][kGuard] = 'immutable' + + responseList.push(responseObject) + } + + // 6. + return Object.freeze(responseList) + } + + async add (request) { + webidl.brandCheck(this, Cache) + webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.add' }) + + request = webidl.converters.RequestInfo(request) + + // 1. + const requests = [request] + + // 2. + const responseArrayPromise = this.addAll(requests) + + // 3. + return await responseArrayPromise + } + + async addAll (requests) { + webidl.brandCheck(this, Cache) + webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.addAll' }) + + requests = webidl.converters['sequence'](requests) + + // 1. + const responsePromises = [] + + // 2. + const requestList = [] + + // 3. + for (const request of requests) { + if (typeof request === 'string') { + continue + } + + // 3.1 + const r = request[kState] + + // 3.2 + if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') { + throw webidl.errors.exception({ + header: 'Cache.addAll', + message: 'Expected http/s scheme when method is not GET.' + }) + } + } + + // 4. + /** @type {ReturnType[]} */ + const fetchControllers = [] + + // 5. + for (const request of requests) { + // 5.1 + const r = new Request(request)[kState] + + // 5.2 + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: 'Cache.addAll', + message: 'Expected http/s scheme.' + }) + } + + // 5.4 + r.initiator = 'fetch' + r.destination = 'subresource' + + // 5.5 + requestList.push(r) + + // 5.6 + const responsePromise = createDeferredPromise() + + // 5.7 + fetchControllers.push(fetching({ + request: r, + dispatcher: getGlobalDispatcher(), + processResponse (response) { + // 1. + if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) { + responsePromise.reject(webidl.errors.exception({ + header: 'Cache.addAll', + message: 'Received an invalid status code or the request failed.' + })) + } else if (response.headersList.contains('vary')) { // 2. + // 2.1 + const fieldValues = getFieldValues(response.headersList.get('vary')) + + // 2.2 + for (const fieldValue of fieldValues) { + // 2.2.1 + if (fieldValue === '*') { + responsePromise.reject(webidl.errors.exception({ + header: 'Cache.addAll', + message: 'invalid vary field value' + })) + + for (const controller of fetchControllers) { + controller.abort() + } + + return + } + } + } + }, + processResponseEndOfBody (response) { + // 1. + if (response.aborted) { + responsePromise.reject(new DOMException('aborted', 'AbortError')) + return + } + + // 2. + responsePromise.resolve(response) + } + })) + + // 5.8 + responsePromises.push(responsePromise.promise) + } + + // 6. + const p = Promise.all(responsePromises) + + // 7. + const responses = await p + + // 7.1 + const operations = [] + + // 7.2 + let index = 0 + + // 7.3 + for (const response of responses) { + // 7.3.1 + /** @type {CacheBatchOperation} */ + const operation = { + type: 'put', // 7.3.2 + request: requestList[index], // 7.3.3 + response // 7.3.4 + } + + operations.push(operation) // 7.3.5 + + index++ // 7.3.6 + } + + // 7.5 + const cacheJobPromise = createDeferredPromise() + + // 7.6.1 + let errorData = null + + // 7.6.2 + try { + this.#batchCacheOperations(operations) + } catch (e) { + errorData = e + } + + // 7.6.3 + queueMicrotask(() => { + // 7.6.3.1 + if (errorData === null) { + cacheJobPromise.resolve(undefined) + } else { + // 7.6.3.2 + cacheJobPromise.reject(errorData) + } + }) + + // 7.7 + return cacheJobPromise.promise + } + + async put (request, response) { + webidl.brandCheck(this, Cache) + webidl.argumentLengthCheck(arguments, 2, { header: 'Cache.put' }) + + request = webidl.converters.RequestInfo(request) + response = webidl.converters.Response(response) + + // 1. + let innerRequest = null + + // 2. + if (request instanceof Request) { + innerRequest = request[kState] + } else { // 3. + innerRequest = new Request(request)[kState] + } + + // 4. + if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') { + throw webidl.errors.exception({ + header: 'Cache.put', + message: 'Expected an http/s scheme when method is not GET' + }) + } + + // 5. + const innerResponse = response[kState] + + // 6. + if (innerResponse.status === 206) { + throw webidl.errors.exception({ + header: 'Cache.put', + message: 'Got 206 status' + }) + } + + // 7. + if (innerResponse.headersList.contains('vary')) { + // 7.1. + const fieldValues = getFieldValues(innerResponse.headersList.get('vary')) + + // 7.2. + for (const fieldValue of fieldValues) { + // 7.2.1 + if (fieldValue === '*') { + throw webidl.errors.exception({ + header: 'Cache.put', + message: 'Got * vary field value' + }) + } + } + } + + // 8. + if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { + throw webidl.errors.exception({ + header: 'Cache.put', + message: 'Response body is locked or disturbed' + }) + } + + // 9. + const clonedResponse = cloneResponse(innerResponse) + + // 10. + const bodyReadPromise = createDeferredPromise() + + // 11. + if (innerResponse.body != null) { + // 11.1 + const stream = innerResponse.body.stream + + // 11.2 + const reader = stream.getReader() + + // 11.3 + readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject) + } else { + bodyReadPromise.resolve(undefined) + } + + // 12. + /** @type {CacheBatchOperation[]} */ + const operations = [] + + // 13. + /** @type {CacheBatchOperation} */ + const operation = { + type: 'put', // 14. + request: innerRequest, // 15. + response: clonedResponse // 16. + } + + // 17. + operations.push(operation) + + // 19. + const bytes = await bodyReadPromise.promise + + if (clonedResponse.body != null) { + clonedResponse.body.source = bytes + } + + // 19.1 + const cacheJobPromise = createDeferredPromise() + + // 19.2.1 + let errorData = null + + // 19.2.2 + try { + this.#batchCacheOperations(operations) + } catch (e) { + errorData = e + } + + // 19.2.3 + queueMicrotask(() => { + // 19.2.3.1 + if (errorData === null) { + cacheJobPromise.resolve() + } else { // 19.2.3.2 + cacheJobPromise.reject(errorData) + } + }) + + return cacheJobPromise.promise + } + + async delete (request, options = {}) { + webidl.brandCheck(this, Cache) + webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.delete' }) + + request = webidl.converters.RequestInfo(request) + options = webidl.converters.CacheQueryOptions(options) + + /** + * @type {Request} + */ + let r = null + + if (request instanceof Request) { + r = request[kState] + + if (r.method !== 'GET' && !options.ignoreMethod) { + return false + } + } else { + assert(typeof request === 'string') + + r = new Request(request)[kState] + } + + /** @type {CacheBatchOperation[]} */ + const operations = [] + + /** @type {CacheBatchOperation} */ + const operation = { + type: 'delete', + request: r, + options + } + + operations.push(operation) + + const cacheJobPromise = createDeferredPromise() + + let errorData = null + let requestResponses + + try { + requestResponses = this.#batchCacheOperations(operations) + } catch (e) { + errorData = e + } + + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(!!requestResponses?.length) + } else { + cacheJobPromise.reject(errorData) + } + }) + + return cacheJobPromise.promise + } + + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys + * @param {any} request + * @param {import('../../types/cache').CacheQueryOptions} options + * @returns {readonly Request[]} + */ + async keys (request = undefined, options = {}) { + webidl.brandCheck(this, Cache) + + if (request !== undefined) request = webidl.converters.RequestInfo(request) + options = webidl.converters.CacheQueryOptions(options) + + // 1. + let r = null + + // 2. + if (request !== undefined) { + // 2.1 + if (request instanceof Request) { + // 2.1.1 + r = request[kState] + + // 2.1.2 + if (r.method !== 'GET' && !options.ignoreMethod) { + return [] + } + } else if (typeof request === 'string') { // 2.2 + r = new Request(request)[kState] + } + } + + // 4. + const promise = createDeferredPromise() + + // 5. + // 5.1 + const requests = [] + + // 5.2 + if (request === undefined) { + // 5.2.1 + for (const requestResponse of this.#relevantRequestResponseList) { + // 5.2.1.1 + requests.push(requestResponse[0]) + } + } else { // 5.3 + // 5.3.1 + const requestResponses = this.#queryCache(r, options) + + // 5.3.2 + for (const requestResponse of requestResponses) { + // 5.3.2.1 + requests.push(requestResponse[0]) + } + } + + // 5.4 + queueMicrotask(() => { + // 5.4.1 + const requestList = [] + + // 5.4.2 + for (const request of requests) { + const requestObject = new Request('https://a') + requestObject[kState] = request + requestObject[kHeaders][kHeadersList] = request.headersList + requestObject[kHeaders][kGuard] = 'immutable' + requestObject[kRealm] = request.client + + // 5.4.2.1 + requestList.push(requestObject) + } + + // 5.4.3 + promise.resolve(Object.freeze(requestList)) + }) + + return promise.promise + } + + /** + * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm + * @param {CacheBatchOperation[]} operations + * @returns {requestResponseList} + */ + #batchCacheOperations (operations) { + // 1. + const cache = this.#relevantRequestResponseList + + // 2. + const backupCache = [...cache] + + // 3. + const addedItems = [] + + // 4.1 + const resultList = [] + + try { + // 4.2 + for (const operation of operations) { + // 4.2.1 + if (operation.type !== 'delete' && operation.type !== 'put') { + throw webidl.errors.exception({ + header: 'Cache.#batchCacheOperations', + message: 'operation type does not match "delete" or "put"' + }) + } + + // 4.2.2 + if (operation.type === 'delete' && operation.response != null) { + throw webidl.errors.exception({ + header: 'Cache.#batchCacheOperations', + message: 'delete operation should not have an associated response' + }) + } + + // 4.2.3 + if (this.#queryCache(operation.request, operation.options, addedItems).length) { + throw new DOMException('???', 'InvalidStateError') + } + + // 4.2.4 + let requestResponses + + // 4.2.5 + if (operation.type === 'delete') { + // 4.2.5.1 + requestResponses = this.#queryCache(operation.request, operation.options) + + // TODO: the spec is wrong, this is needed to pass WPTs + if (requestResponses.length === 0) { + return [] + } + + // 4.2.5.2 + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse) + assert(idx !== -1) + + // 4.2.5.2.1 + cache.splice(idx, 1) + } + } else if (operation.type === 'put') { // 4.2.6 + // 4.2.6.1 + if (operation.response == null) { + throw webidl.errors.exception({ + header: 'Cache.#batchCacheOperations', + message: 'put operation should have an associated response' + }) + } + + // 4.2.6.2 + const r = operation.request + + // 4.2.6.3 + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: 'Cache.#batchCacheOperations', + message: 'expected http or https scheme' + }) + } + + // 4.2.6.4 + if (r.method !== 'GET') { + throw webidl.errors.exception({ + header: 'Cache.#batchCacheOperations', + message: 'not get method' + }) + } + + // 4.2.6.5 + if (operation.options != null) { + throw webidl.errors.exception({ + header: 'Cache.#batchCacheOperations', + message: 'options must not be defined' + }) + } + + // 4.2.6.6 + requestResponses = this.#queryCache(operation.request) + + // 4.2.6.7 + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse) + assert(idx !== -1) + + // 4.2.6.7.1 + cache.splice(idx, 1) + } + + // 4.2.6.8 + cache.push([operation.request, operation.response]) + + // 4.2.6.10 + addedItems.push([operation.request, operation.response]) + } + + // 4.2.7 + resultList.push([operation.request, operation.response]) + } + + // 4.3 + return resultList + } catch (e) { // 5. + // 5.1 + this.#relevantRequestResponseList.length = 0 + + // 5.2 + this.#relevantRequestResponseList = backupCache + + // 5.3 + throw e + } + } + + /** + * @see https://w3c.github.io/ServiceWorker/#query-cache + * @param {any} requestQuery + * @param {import('../../types/cache').CacheQueryOptions} options + * @param {requestResponseList} targetStorage + * @returns {requestResponseList} + */ + #queryCache (requestQuery, options, targetStorage) { + /** @type {requestResponseList} */ + const resultList = [] + + const storage = targetStorage ?? this.#relevantRequestResponseList + + for (const requestResponse of storage) { + const [cachedRequest, cachedResponse] = requestResponse + if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) { + resultList.push(requestResponse) + } + } + + return resultList + } + + /** + * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm + * @param {any} requestQuery + * @param {any} request + * @param {any | null} response + * @param {import('../../types/cache').CacheQueryOptions | undefined} options + * @returns {boolean} + */ + #requestMatchesCachedItem (requestQuery, request, response = null, options) { + // if (options?.ignoreMethod === false && request.method === 'GET') { + // return false + // } + + const queryURL = new URL(requestQuery.url) + + const cachedURL = new URL(request.url) + + if (options?.ignoreSearch) { + cachedURL.search = '' + + queryURL.search = '' + } + + if (!urlEquals(queryURL, cachedURL, true)) { + return false + } + + if ( + response == null || + options?.ignoreVary || + !response.headersList.contains('vary') + ) { + return true + } + + const fieldValues = getFieldValues(response.headersList.get('vary')) + + for (const fieldValue of fieldValues) { + if (fieldValue === '*') { + return false + } + + const requestValue = request.headersList.get(fieldValue) + const queryValue = requestQuery.headersList.get(fieldValue) + + // If one has the header and the other doesn't, or one has + // a different value than the other, return false + if (requestValue !== queryValue) { + return false + } + } + + return true + } +} + +Object.defineProperties(Cache.prototype, { + [Symbol.toStringTag]: { + value: 'Cache', + configurable: true + }, + match: kEnumerableProperty, + matchAll: kEnumerableProperty, + add: kEnumerableProperty, + addAll: kEnumerableProperty, + put: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty +}) + +const cacheQueryOptionConverters = [ + { + key: 'ignoreSearch', + converter: webidl.converters.boolean, + defaultValue: false + }, + { + key: 'ignoreMethod', + converter: webidl.converters.boolean, + defaultValue: false + }, + { + key: 'ignoreVary', + converter: webidl.converters.boolean, + defaultValue: false + } +] + +webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters) + +webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([ + ...cacheQueryOptionConverters, + { + key: 'cacheName', + converter: webidl.converters.DOMString + } +]) + +webidl.converters.Response = webidl.interfaceConverter(Response) + +webidl.converters['sequence'] = webidl.sequenceConverter( + webidl.converters.RequestInfo +) + +module.exports = { + Cache +} + + +/***/ }), + +/***/ 4738: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { kConstruct } = __nccwpck_require__(296) +const { Cache } = __nccwpck_require__(479) +const { webidl } = __nccwpck_require__(4222) +const { kEnumerableProperty } = __nccwpck_require__(3440) + +class CacheStorage { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map + * @type {Map} + */ + async has (cacheName) { + webidl.brandCheck(this, CacheStorage) + webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.has' }) + + cacheName = webidl.converters.DOMString(cacheName) + + // 2.1.1 + // 2.2 + return this.#caches.has(cacheName) + } + + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open + * @param {string} cacheName + * @returns {Promise} + */ + async open (cacheName) { + webidl.brandCheck(this, CacheStorage) + webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.open' }) + + cacheName = webidl.converters.DOMString(cacheName) + + // 2.1 + if (this.#caches.has(cacheName)) { + // await caches.open('v1') !== await caches.open('v1') + + // 2.1.1 + const cache = this.#caches.get(cacheName) + + // 2.1.1.1 + return new Cache(kConstruct, cache) + } + + // 2.2 + const cache = [] + + // 2.3 + this.#caches.set(cacheName, cache) + + // 2.4 + return new Cache(kConstruct, cache) + } + + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete + * @param {string} cacheName + * @returns {Promise} + */ + async delete (cacheName) { + webidl.brandCheck(this, CacheStorage) + webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.delete' }) + + cacheName = webidl.converters.DOMString(cacheName) + + return this.#caches.delete(cacheName) + } + + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys + * @returns {string[]} + */ + async keys () { + webidl.brandCheck(this, CacheStorage) + + // 2.1 + const keys = this.#caches.keys() + + // 2.2 + return [...keys] + } +} + +Object.defineProperties(CacheStorage.prototype, { + [Symbol.toStringTag]: { + value: 'CacheStorage', + configurable: true + }, + match: kEnumerableProperty, + has: kEnumerableProperty, + open: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty +}) + +module.exports = { + CacheStorage +} + + +/***/ }), + +/***/ 296: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +module.exports = { + kConstruct: (__nccwpck_require__(6443).kConstruct) +} + + +/***/ }), + +/***/ 3993: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const assert = __nccwpck_require__(2613) +const { URLSerializer } = __nccwpck_require__(4322) +const { isValidHeaderName } = __nccwpck_require__(5523) + +/** + * @see https://url.spec.whatwg.org/#concept-url-equals + * @param {URL} A + * @param {URL} B + * @param {boolean | undefined} excludeFragment + * @returns {boolean} + */ +function urlEquals (A, B, excludeFragment = false) { + const serializedA = URLSerializer(A, excludeFragment) + + const serializedB = URLSerializer(B, excludeFragment) + + return serializedA === serializedB +} + +/** + * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262 + * @param {string} header + */ +function fieldValues (header) { + assert(header !== null) + + const values = [] + + for (let value of header.split(',')) { + value = value.trim() + + if (!value.length) { + continue + } else if (!isValidHeaderName(value)) { + continue + } + + values.push(value) + } + + return values +} + +module.exports = { + urlEquals, + fieldValues +} + + +/***/ }), + +/***/ 6197: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// @ts-check + + + +/* global WebAssembly */ + +const assert = __nccwpck_require__(2613) +const net = __nccwpck_require__(9278) +const http = __nccwpck_require__(8611) +const { pipeline } = __nccwpck_require__(2203) +const util = __nccwpck_require__(3440) +const timers = __nccwpck_require__(8804) +const Request = __nccwpck_require__(4655) +const DispatcherBase = __nccwpck_require__(1) +const { + RequestContentLengthMismatchError, + ResponseContentLengthMismatchError, + InvalidArgumentError, + RequestAbortedError, + HeadersTimeoutError, + HeadersOverflowError, + SocketError, + InformationalError, + BodyTimeoutError, + HTTPParserError, + ResponseExceededMaxSizeError, + ClientDestroyedError +} = __nccwpck_require__(8707) +const buildConnector = __nccwpck_require__(9136) +const { + kUrl, + kReset, + kServerName, + kClient, + kBusy, + kParser, + kConnect, + kBlocking, + kResuming, + kRunning, + kPending, + kSize, + kWriting, + kQueue, + kConnected, + kConnecting, + kNeedDrain, + kNoRef, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kSocket, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kConnector, + kMaxRedirections, + kMaxRequests, + kCounter, + kClose, + kDestroy, + kDispatch, + kInterceptors, + kLocalAddress, + kMaxResponseSize, + kHTTPConnVersion, + // HTTP2 + kHost, + kHTTP2Session, + kHTTP2SessionState, + kHTTP2BuildRequest, + kHTTP2CopyHeaders, + kHTTP1BuildRequest +} = __nccwpck_require__(6443) + +/** @type {import('http2')} */ +let http2 +try { + http2 = __nccwpck_require__(5675) +} catch { + // @ts-ignore + http2 = { constants: {} } +} + +const { + constants: { + HTTP2_HEADER_AUTHORITY, + HTTP2_HEADER_METHOD, + HTTP2_HEADER_PATH, + HTTP2_HEADER_SCHEME, + HTTP2_HEADER_CONTENT_LENGTH, + HTTP2_HEADER_EXPECT, + HTTP2_HEADER_STATUS + } +} = http2 + +// Experimental +let h2ExperimentalWarned = false + +const FastBuffer = Buffer[Symbol.species] + +const kClosedResolve = Symbol('kClosedResolve') + +const channels = {} + +try { + const diagnosticsChannel = __nccwpck_require__(1637) + channels.sendHeaders = diagnosticsChannel.channel('undici:client:sendHeaders') + channels.beforeConnect = diagnosticsChannel.channel('undici:client:beforeConnect') + channels.connectError = diagnosticsChannel.channel('undici:client:connectError') + channels.connected = diagnosticsChannel.channel('undici:client:connected') +} catch { + channels.sendHeaders = { hasSubscribers: false } + channels.beforeConnect = { hasSubscribers: false } + channels.connectError = { hasSubscribers: false } + channels.connected = { hasSubscribers: false } +} + +/** + * @type {import('../types/client').default} + */ +class Client extends DispatcherBase { + /** + * + * @param {string|URL} url + * @param {import('../types/client').Client.Options} options + */ + constructor (url, { + interceptors, + maxHeaderSize, + headersTimeout, + socketTimeout, + requestTimeout, + connectTimeout, + bodyTimeout, + idleTimeout, + keepAlive, + keepAliveTimeout, + maxKeepAliveTimeout, + keepAliveMaxTimeout, + keepAliveTimeoutThreshold, + socketPath, + pipelining, + tls, + strictContentLength, + maxCachedSessions, + maxRedirections, + connect, + maxRequestsPerClient, + localAddress, + maxResponseSize, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + // h2 + allowH2, + maxConcurrentStreams + } = {}) { + super() + + if (keepAlive !== undefined) { + throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead') + } + + if (socketTimeout !== undefined) { + throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead') + } + + if (requestTimeout !== undefined) { + throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead') + } + + if (idleTimeout !== undefined) { + throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead') + } + + if (maxKeepAliveTimeout !== undefined) { + throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead') + } + + if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) { + throw new InvalidArgumentError('invalid maxHeaderSize') + } + + if (socketPath != null && typeof socketPath !== 'string') { + throw new InvalidArgumentError('invalid socketPath') + } + + if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) { + throw new InvalidArgumentError('invalid connectTimeout') + } + + if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) { + throw new InvalidArgumentError('invalid keepAliveTimeout') + } + + if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) { + throw new InvalidArgumentError('invalid keepAliveMaxTimeout') + } + + if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) { + throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold') + } + + if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError('headersTimeout must be a positive integer or zero') + } + + if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero') + } + + if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { + throw new InvalidArgumentError('connect must be a function or an object') + } + + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError('maxRedirections must be a positive number') + } + + if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) { + throw new InvalidArgumentError('maxRequestsPerClient must be a positive number') + } + + if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) { + throw new InvalidArgumentError('localAddress must be valid string IP address') + } + + if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) { + throw new InvalidArgumentError('maxResponseSize must be a positive number') + } + + if ( + autoSelectFamilyAttemptTimeout != null && + (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1) + ) { + throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number') + } + + // h2 + if (allowH2 != null && typeof allowH2 !== 'boolean') { + throw new InvalidArgumentError('allowH2 must be a valid boolean value') + } + + if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) { + throw new InvalidArgumentError('maxConcurrentStreams must be a possitive integer, greater than 0') + } + + if (typeof connect !== 'function') { + connect = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined), + ...connect + }) + } + + this[kInterceptors] = interceptors && interceptors.Client && Array.isArray(interceptors.Client) + ? interceptors.Client + : [createRedirectInterceptor({ maxRedirections })] + this[kUrl] = util.parseOrigin(url) + this[kConnector] = connect + this[kSocket] = null + this[kPipelining] = pipelining != null ? pipelining : 1 + this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize + this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout + this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout + this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold + this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout] + this[kServerName] = null + this[kLocalAddress] = localAddress != null ? localAddress : null + this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming + this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming + this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\r\n` + this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3 + this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3 + this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength + this[kMaxRedirections] = maxRedirections + this[kMaxRequests] = maxRequestsPerClient + this[kClosedResolve] = null + this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1 + this[kHTTPConnVersion] = 'h1' + + // HTTP/2 + this[kHTTP2Session] = null + this[kHTTP2SessionState] = !allowH2 + ? null + : { + // streams: null, // Fixed queue of streams - For future support of `push` + openStreams: 0, // Keep track of them to decide wether or not unref the session + maxConcurrentStreams: maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server + } + this[kHost] = `${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}` + + // kQueue is built up of 3 sections separated by + // the kRunningIdx and kPendingIdx indices. + // | complete | running | pending | + // ^ kRunningIdx ^ kPendingIdx ^ kQueue.length + // kRunningIdx points to the first running element. + // kPendingIdx points to the first pending element. + // This implements a fast queue with an amortized + // time of O(1). + + this[kQueue] = [] + this[kRunningIdx] = 0 + this[kPendingIdx] = 0 + } + + get pipelining () { + return this[kPipelining] + } + + set pipelining (value) { + this[kPipelining] = value + resume(this, true) + } + + get [kPending] () { + return this[kQueue].length - this[kPendingIdx] + } + + get [kRunning] () { + return this[kPendingIdx] - this[kRunningIdx] + } + + get [kSize] () { + return this[kQueue].length - this[kRunningIdx] + } + + get [kConnected] () { + return !!this[kSocket] && !this[kConnecting] && !this[kSocket].destroyed + } + + get [kBusy] () { + const socket = this[kSocket] + return ( + (socket && (socket[kReset] || socket[kWriting] || socket[kBlocking])) || + (this[kSize] >= (this[kPipelining] || 1)) || + this[kPending] > 0 + ) + } + + /* istanbul ignore: only used for test */ + [kConnect] (cb) { + connect(this) + this.once('connect', cb) + } + + [kDispatch] (opts, handler) { + const origin = opts.origin || this[kUrl].origin + + const request = this[kHTTPConnVersion] === 'h2' + ? Request[kHTTP2BuildRequest](origin, opts, handler) + : Request[kHTTP1BuildRequest](origin, opts, handler) + + this[kQueue].push(request) + if (this[kResuming]) { + // Do nothing. + } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { + // Wait a tick in case stream/iterator is ended in the same tick. + this[kResuming] = 1 + process.nextTick(resume, this) + } else { + resume(this, true) + } + + if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { + this[kNeedDrain] = 2 + } + + return this[kNeedDrain] < 2 + } + + async [kClose] () { + // TODO: for H2 we need to gracefully flush the remaining enqueued + // request and close each stream. + return new Promise((resolve) => { + if (!this[kSize]) { + resolve(null) + } else { + this[kClosedResolve] = resolve + } + }) + } + + async [kDestroy] (err) { + return new Promise((resolve) => { + const requests = this[kQueue].splice(this[kPendingIdx]) + for (let i = 0; i < requests.length; i++) { + const request = requests[i] + errorRequest(this, request, err) + } + + const callback = () => { + if (this[kClosedResolve]) { + // TODO (fix): Should we error here with ClientDestroyedError? + this[kClosedResolve]() + this[kClosedResolve] = null + } + resolve() + } + + if (this[kHTTP2Session] != null) { + util.destroy(this[kHTTP2Session], err) + this[kHTTP2Session] = null + this[kHTTP2SessionState] = null + } + + if (!this[kSocket]) { + queueMicrotask(callback) + } else { + util.destroy(this[kSocket].on('close', callback), err) + } + + resume(this) + }) + } +} + +function onHttp2SessionError (err) { + assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID') + + this[kSocket][kError] = err + + onError(this[kClient], err) +} + +function onHttp2FrameError (type, code, id) { + const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`) + + if (id === 0) { + this[kSocket][kError] = err + onError(this[kClient], err) + } +} + +function onHttp2SessionEnd () { + util.destroy(this, new SocketError('other side closed')) + util.destroy(this[kSocket], new SocketError('other side closed')) +} + +function onHTTP2GoAway (code) { + const client = this[kClient] + const err = new InformationalError(`HTTP/2: "GOAWAY" frame received with code ${code}`) + client[kSocket] = null + client[kHTTP2Session] = null + + if (client.destroyed) { + assert(this[kPending] === 0) + + // Fail entire queue. + const requests = client[kQueue].splice(client[kRunningIdx]) + for (let i = 0; i < requests.length; i++) { + const request = requests[i] + errorRequest(this, request, err) + } + } else if (client[kRunning] > 0) { + // Fail head of pipeline. + const request = client[kQueue][client[kRunningIdx]] + client[kQueue][client[kRunningIdx]++] = null + + errorRequest(client, request, err) + } + + client[kPendingIdx] = client[kRunningIdx] + + assert(client[kRunning] === 0) + + client.emit('disconnect', + client[kUrl], + [client], + err + ) + + resume(client) +} + +const constants = __nccwpck_require__(2824) +const createRedirectInterceptor = __nccwpck_require__(4415) +const EMPTY_BUF = Buffer.alloc(0) + +async function lazyllhttp () { + const llhttpWasmData = process.env.JEST_WORKER_ID ? __nccwpck_require__(3870) : undefined + + let mod + try { + mod = await WebAssembly.compile(Buffer.from(__nccwpck_require__(3434), 'base64')) + } catch (e) { + /* istanbul ignore next */ + + // We could check if the error was caused by the simd option not + // being enabled, but the occurring of this other error + // * https://github.com/emscripten-core/emscripten/issues/11495 + // got me to remove that check to avoid breaking Node 12. + mod = await WebAssembly.compile(Buffer.from(llhttpWasmData || __nccwpck_require__(3870), 'base64')) + } + + return await WebAssembly.instantiate(mod, { + env: { + /* eslint-disable camelcase */ + + wasm_on_url: (p, at, len) => { + /* istanbul ignore next */ + return 0 + }, + wasm_on_status: (p, at, len) => { + assert.strictEqual(currentParser.ptr, p) + const start = at - currentBufferPtr + currentBufferRef.byteOffset + return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 + }, + wasm_on_message_begin: (p) => { + assert.strictEqual(currentParser.ptr, p) + return currentParser.onMessageBegin() || 0 + }, + wasm_on_header_field: (p, at, len) => { + assert.strictEqual(currentParser.ptr, p) + const start = at - currentBufferPtr + currentBufferRef.byteOffset + return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 + }, + wasm_on_header_value: (p, at, len) => { + assert.strictEqual(currentParser.ptr, p) + const start = at - currentBufferPtr + currentBufferRef.byteOffset + return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 + }, + wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { + assert.strictEqual(currentParser.ptr, p) + return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0 + }, + wasm_on_body: (p, at, len) => { + assert.strictEqual(currentParser.ptr, p) + const start = at - currentBufferPtr + currentBufferRef.byteOffset + return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 + }, + wasm_on_message_complete: (p) => { + assert.strictEqual(currentParser.ptr, p) + return currentParser.onMessageComplete() || 0 + } + + /* eslint-enable camelcase */ + } + }) +} + +let llhttpInstance = null +let llhttpPromise = lazyllhttp() +llhttpPromise.catch() + +let currentParser = null +let currentBufferRef = null +let currentBufferSize = 0 +let currentBufferPtr = null + +const TIMEOUT_HEADERS = 1 +const TIMEOUT_BODY = 2 +const TIMEOUT_IDLE = 3 + +class Parser { + constructor (client, socket, { exports }) { + assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0) + + this.llhttp = exports + this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE) + this.client = client + this.socket = socket + this.timeout = null + this.timeoutValue = null + this.timeoutType = null + this.statusCode = null + this.statusText = '' + this.upgrade = false + this.headers = [] + this.headersSize = 0 + this.headersMaxSize = client[kMaxHeadersSize] + this.shouldKeepAlive = false + this.paused = false + this.resume = this.resume.bind(this) + + this.bytesRead = 0 + + this.keepAlive = '' + this.contentLength = '' + this.connection = '' + this.maxResponseSize = client[kMaxResponseSize] + } + + setTimeout (value, type) { + this.timeoutType = type + if (value !== this.timeoutValue) { + timers.clearTimeout(this.timeout) + if (value) { + this.timeout = timers.setTimeout(onParserTimeout, value, this) + // istanbul ignore else: only for jest + if (this.timeout.unref) { + this.timeout.unref() + } + } else { + this.timeout = null + } + this.timeoutValue = value + } else if (this.timeout) { + // istanbul ignore else: only for jest + if (this.timeout.refresh) { + this.timeout.refresh() + } + } + } + + resume () { + if (this.socket.destroyed || !this.paused) { + return + } + + assert(this.ptr != null) + assert(currentParser == null) + + this.llhttp.llhttp_resume(this.ptr) + + assert(this.timeoutType === TIMEOUT_BODY) + if (this.timeout) { + // istanbul ignore else: only for jest + if (this.timeout.refresh) { + this.timeout.refresh() + } + } + + this.paused = false + this.execute(this.socket.read() || EMPTY_BUF) // Flush parser. + this.readMore() + } + + readMore () { + while (!this.paused && this.ptr) { + const chunk = this.socket.read() + if (chunk === null) { + break + } + this.execute(chunk) + } + } + + execute (data) { + assert(this.ptr != null) + assert(currentParser == null) + assert(!this.paused) + + const { socket, llhttp } = this + + if (data.length > currentBufferSize) { + if (currentBufferPtr) { + llhttp.free(currentBufferPtr) + } + currentBufferSize = Math.ceil(data.length / 4096) * 4096 + currentBufferPtr = llhttp.malloc(currentBufferSize) + } + + new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data) + + // Call `execute` on the wasm parser. + // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data, + // and finally the length of bytes to parse. + // The return value is an error code or `constants.ERROR.OK`. + try { + let ret + + try { + currentBufferRef = data + currentParser = this + ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length) + /* eslint-disable-next-line no-useless-catch */ + } catch (err) { + /* istanbul ignore next: difficult to make a test case for */ + throw err + } finally { + currentParser = null + currentBufferRef = null + } + + const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr + + if (ret === constants.ERROR.PAUSED_UPGRADE) { + this.onUpgrade(data.slice(offset)) + } else if (ret === constants.ERROR.PAUSED) { + this.paused = true + socket.unshift(data.slice(offset)) + } else if (ret !== constants.ERROR.OK) { + const ptr = llhttp.llhttp_get_error_reason(this.ptr) + let message = '' + /* istanbul ignore else: difficult to make a test case for */ + if (ptr) { + const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0) + message = + 'Response does not match the HTTP/1.1 protocol (' + + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + + ')' + } + throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset)) + } + } catch (err) { + util.destroy(socket, err) + } + } + + destroy () { + assert(this.ptr != null) + assert(currentParser == null) + + this.llhttp.llhttp_free(this.ptr) + this.ptr = null + + timers.clearTimeout(this.timeout) + this.timeout = null + this.timeoutValue = null + this.timeoutType = null + + this.paused = false + } + + onStatus (buf) { + this.statusText = buf.toString() + } + + onMessageBegin () { + const { socket, client } = this + + /* istanbul ignore next: difficult to make a test case for */ + if (socket.destroyed) { + return -1 + } + + const request = client[kQueue][client[kRunningIdx]] + if (!request) { + return -1 + } + } + + onHeaderField (buf) { + const len = this.headers.length + + if ((len & 1) === 0) { + this.headers.push(buf) + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]) + } + + this.trackHeader(buf.length) + } + + onHeaderValue (buf) { + let len = this.headers.length + + if ((len & 1) === 1) { + this.headers.push(buf) + len += 1 + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]) + } + + const key = this.headers[len - 2] + if (key.length === 10 && key.toString().toLowerCase() === 'keep-alive') { + this.keepAlive += buf.toString() + } else if (key.length === 10 && key.toString().toLowerCase() === 'connection') { + this.connection += buf.toString() + } else if (key.length === 14 && key.toString().toLowerCase() === 'content-length') { + this.contentLength += buf.toString() + } + + this.trackHeader(buf.length) + } + + trackHeader (len) { + this.headersSize += len + if (this.headersSize >= this.headersMaxSize) { + util.destroy(this.socket, new HeadersOverflowError()) + } + } + + onUpgrade (head) { + const { upgrade, client, socket, headers, statusCode } = this + + assert(upgrade) + + const request = client[kQueue][client[kRunningIdx]] + assert(request) + + assert(!socket.destroyed) + assert(socket === client[kSocket]) + assert(!this.paused) + assert(request.upgrade || request.method === 'CONNECT') + + this.statusCode = null + this.statusText = '' + this.shouldKeepAlive = null + + assert(this.headers.length % 2 === 0) + this.headers = [] + this.headersSize = 0 + + socket.unshift(head) + + socket[kParser].destroy() + socket[kParser] = null + + socket[kClient] = null + socket[kError] = null + socket + .removeListener('error', onSocketError) + .removeListener('readable', onSocketReadable) + .removeListener('end', onSocketEnd) + .removeListener('close', onSocketClose) + + client[kSocket] = null + client[kQueue][client[kRunningIdx]++] = null + client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade')) + + try { + request.onUpgrade(statusCode, headers, socket) + } catch (err) { + util.destroy(socket, err) + } + + resume(client) + } + + onHeadersComplete (statusCode, upgrade, shouldKeepAlive) { + const { client, socket, headers, statusText } = this + + /* istanbul ignore next: difficult to make a test case for */ + if (socket.destroyed) { + return -1 + } + + const request = client[kQueue][client[kRunningIdx]] + + /* istanbul ignore next: difficult to make a test case for */ + if (!request) { + return -1 + } + + assert(!this.upgrade) + assert(this.statusCode < 200) + + if (statusCode === 100) { + util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket))) + return -1 + } + + /* this can only happen if server is misbehaving */ + if (upgrade && !request.upgrade) { + util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket))) + return -1 + } + + assert.strictEqual(this.timeoutType, TIMEOUT_HEADERS) + + this.statusCode = statusCode + this.shouldKeepAlive = ( + shouldKeepAlive || + // Override llhttp value which does not allow keepAlive for HEAD. + (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive') + ) + + if (this.statusCode >= 200) { + const bodyTimeout = request.bodyTimeout != null + ? request.bodyTimeout + : client[kBodyTimeout] + this.setTimeout(bodyTimeout, TIMEOUT_BODY) + } else if (this.timeout) { + // istanbul ignore else: only for jest + if (this.timeout.refresh) { + this.timeout.refresh() + } + } + + if (request.method === 'CONNECT') { + assert(client[kRunning] === 1) + this.upgrade = true + return 2 + } + + if (upgrade) { + assert(client[kRunning] === 1) + this.upgrade = true + return 2 + } + + assert(this.headers.length % 2 === 0) + this.headers = [] + this.headersSize = 0 + + if (this.shouldKeepAlive && client[kPipelining]) { + const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null + + if (keepAliveTimeout != null) { + const timeout = Math.min( + keepAliveTimeout - client[kKeepAliveTimeoutThreshold], + client[kKeepAliveMaxTimeout] + ) + if (timeout <= 0) { + socket[kReset] = true + } else { + client[kKeepAliveTimeoutValue] = timeout + } + } else { + client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout] + } + } else { + // Stop more requests from being dispatched. + socket[kReset] = true + } + + const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false + + if (request.aborted) { + return -1 + } + + if (request.method === 'HEAD') { + return 1 + } + + if (statusCode < 200) { + return 1 + } + + if (socket[kBlocking]) { + socket[kBlocking] = false + resume(client) + } + + return pause ? constants.ERROR.PAUSED : 0 + } + + onBody (buf) { + const { client, socket, statusCode, maxResponseSize } = this + + if (socket.destroyed) { + return -1 + } + + const request = client[kQueue][client[kRunningIdx]] + assert(request) + + assert.strictEqual(this.timeoutType, TIMEOUT_BODY) + if (this.timeout) { + // istanbul ignore else: only for jest + if (this.timeout.refresh) { + this.timeout.refresh() + } + } + + assert(statusCode >= 200) + + if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) { + util.destroy(socket, new ResponseExceededMaxSizeError()) + return -1 + } + + this.bytesRead += buf.length + + if (request.onData(buf) === false) { + return constants.ERROR.PAUSED + } + } + + onMessageComplete () { + const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this + + if (socket.destroyed && (!statusCode || shouldKeepAlive)) { + return -1 + } + + if (upgrade) { + return + } + + const request = client[kQueue][client[kRunningIdx]] + assert(request) + + assert(statusCode >= 100) + + this.statusCode = null + this.statusText = '' + this.bytesRead = 0 + this.contentLength = '' + this.keepAlive = '' + this.connection = '' + + assert(this.headers.length % 2 === 0) + this.headers = [] + this.headersSize = 0 + + if (statusCode < 200) { + return + } + + /* istanbul ignore next: should be handled by llhttp? */ + if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) { + util.destroy(socket, new ResponseContentLengthMismatchError()) + return -1 + } + + request.onComplete(headers) + + client[kQueue][client[kRunningIdx]++] = null + + if (socket[kWriting]) { + assert.strictEqual(client[kRunning], 0) + // Response completed before request. + util.destroy(socket, new InformationalError('reset')) + return constants.ERROR.PAUSED + } else if (!shouldKeepAlive) { + util.destroy(socket, new InformationalError('reset')) + return constants.ERROR.PAUSED + } else if (socket[kReset] && client[kRunning] === 0) { + // Destroy socket once all requests have completed. + // The request at the tail of the pipeline is the one + // that requested reset and no further requests should + // have been queued since then. + util.destroy(socket, new InformationalError('reset')) + return constants.ERROR.PAUSED + } else if (client[kPipelining] === 1) { + // We must wait a full event loop cycle to reuse this socket to make sure + // that non-spec compliant servers are not closing the connection even if they + // said they won't. + setImmediate(resume, client) + } else { + resume(client) + } + } +} + +function onParserTimeout (parser) { + const { socket, timeoutType, client } = parser + + /* istanbul ignore else */ + if (timeoutType === TIMEOUT_HEADERS) { + if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { + assert(!parser.paused, 'cannot be paused while waiting for headers') + util.destroy(socket, new HeadersTimeoutError()) + } + } else if (timeoutType === TIMEOUT_BODY) { + if (!parser.paused) { + util.destroy(socket, new BodyTimeoutError()) + } + } else if (timeoutType === TIMEOUT_IDLE) { + assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]) + util.destroy(socket, new InformationalError('socket idle timeout')) + } +} + +function onSocketReadable () { + const { [kParser]: parser } = this + if (parser) { + parser.readMore() + } +} + +function onSocketError (err) { + const { [kClient]: client, [kParser]: parser } = this + + assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID') + + if (client[kHTTPConnVersion] !== 'h2') { + // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded + // to the user. + if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) { + // We treat all incoming data so for as a valid response. + parser.onMessageComplete() + return + } + } + + this[kError] = err + + onError(this[kClient], err) +} + +function onError (client, err) { + if ( + client[kRunning] === 0 && + err.code !== 'UND_ERR_INFO' && + err.code !== 'UND_ERR_SOCKET' + ) { + // Error is not caused by running request and not a recoverable + // socket error. + + assert(client[kPendingIdx] === client[kRunningIdx]) + + const requests = client[kQueue].splice(client[kRunningIdx]) + for (let i = 0; i < requests.length; i++) { + const request = requests[i] + errorRequest(client, request, err) + } + assert(client[kSize] === 0) + } +} + +function onSocketEnd () { + const { [kParser]: parser, [kClient]: client } = this + + if (client[kHTTPConnVersion] !== 'h2') { + if (parser.statusCode && !parser.shouldKeepAlive) { + // We treat all incoming data so far as a valid response. + parser.onMessageComplete() + return + } + } + + util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this))) +} + +function onSocketClose () { + const { [kClient]: client, [kParser]: parser } = this + + if (client[kHTTPConnVersion] === 'h1' && parser) { + if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { + // We treat all incoming data so far as a valid response. + parser.onMessageComplete() + } + + this[kParser].destroy() + this[kParser] = null + } + + const err = this[kError] || new SocketError('closed', util.getSocketInfo(this)) + + client[kSocket] = null + + if (client.destroyed) { + assert(client[kPending] === 0) + + // Fail entire queue. + const requests = client[kQueue].splice(client[kRunningIdx]) + for (let i = 0; i < requests.length; i++) { + const request = requests[i] + errorRequest(client, request, err) + } + } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') { + // Fail head of pipeline. + const request = client[kQueue][client[kRunningIdx]] + client[kQueue][client[kRunningIdx]++] = null + + errorRequest(client, request, err) + } + + client[kPendingIdx] = client[kRunningIdx] + + assert(client[kRunning] === 0) + + client.emit('disconnect', client[kUrl], [client], err) + + resume(client) +} + +async function connect (client) { + assert(!client[kConnecting]) + assert(!client[kSocket]) + + let { host, hostname, protocol, port } = client[kUrl] + + // Resolve ipv6 + if (hostname[0] === '[') { + const idx = hostname.indexOf(']') + + assert(idx !== -1) + const ip = hostname.substring(1, idx) + + assert(net.isIP(ip)) + hostname = ip + } + + client[kConnecting] = true + + if (channels.beforeConnect.hasSubscribers) { + channels.beforeConnect.publish({ + connectParams: { + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector] + }) + } + + try { + const socket = await new Promise((resolve, reject) => { + client[kConnector]({ + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, (err, socket) => { + if (err) { + reject(err) + } else { + resolve(socket) + } + }) + }) + + if (client.destroyed) { + util.destroy(socket.on('error', () => {}), new ClientDestroyedError()) + return + } + + client[kConnecting] = false + + assert(socket) + + const isH2 = socket.alpnProtocol === 'h2' + if (isH2) { + if (!h2ExperimentalWarned) { + h2ExperimentalWarned = true + process.emitWarning('H2 support is experimental, expect them to change at any time.', { + code: 'UNDICI-H2' + }) + } + + const session = http2.connect(client[kUrl], { + createConnection: () => socket, + peerMaxConcurrentStreams: client[kHTTP2SessionState].maxConcurrentStreams + }) + + client[kHTTPConnVersion] = 'h2' + session[kClient] = client + session[kSocket] = socket + session.on('error', onHttp2SessionError) + session.on('frameError', onHttp2FrameError) + session.on('end', onHttp2SessionEnd) + session.on('goaway', onHTTP2GoAway) + session.on('close', onSocketClose) + session.unref() + + client[kHTTP2Session] = session + socket[kHTTP2Session] = session + } else { + if (!llhttpInstance) { + llhttpInstance = await llhttpPromise + llhttpPromise = null + } + + socket[kNoRef] = false + socket[kWriting] = false + socket[kReset] = false + socket[kBlocking] = false + socket[kParser] = new Parser(client, socket, llhttpInstance) + } + + socket[kCounter] = 0 + socket[kMaxRequests] = client[kMaxRequests] + socket[kClient] = client + socket[kError] = null + + socket + .on('error', onSocketError) + .on('readable', onSocketReadable) + .on('end', onSocketEnd) + .on('close', onSocketClose) + + client[kSocket] = socket + + if (channels.connected.hasSubscribers) { + channels.connected.publish({ + connectParams: { + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + socket + }) + } + client.emit('connect', client[kUrl], [client]) + } catch (err) { + if (client.destroyed) { + return + } + + client[kConnecting] = false + + if (channels.connectError.hasSubscribers) { + channels.connectError.publish({ + connectParams: { + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + error: err + }) + } + + if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') { + assert(client[kRunning] === 0) + while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) { + const request = client[kQueue][client[kPendingIdx]++] + errorRequest(client, request, err) + } + } else { + onError(client, err) + } + + client.emit('connectionError', client[kUrl], [client], err) + } + + resume(client) +} + +function emitDrain (client) { + client[kNeedDrain] = 0 + client.emit('drain', client[kUrl], [client]) +} + +function resume (client, sync) { + if (client[kResuming] === 2) { + return + } + + client[kResuming] = 2 + + _resume(client, sync) + client[kResuming] = 0 + + if (client[kRunningIdx] > 256) { + client[kQueue].splice(0, client[kRunningIdx]) + client[kPendingIdx] -= client[kRunningIdx] + client[kRunningIdx] = 0 + } +} + +function _resume (client, sync) { + while (true) { + if (client.destroyed) { + assert(client[kPending] === 0) + return + } + + if (client[kClosedResolve] && !client[kSize]) { + client[kClosedResolve]() + client[kClosedResolve] = null + return + } + + const socket = client[kSocket] + + if (socket && !socket.destroyed && socket.alpnProtocol !== 'h2') { + if (client[kSize] === 0) { + if (!socket[kNoRef] && socket.unref) { + socket.unref() + socket[kNoRef] = true + } + } else if (socket[kNoRef] && socket.ref) { + socket.ref() + socket[kNoRef] = false + } + + if (client[kSize] === 0) { + if (socket[kParser].timeoutType !== TIMEOUT_IDLE) { + socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_IDLE) + } + } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) { + if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) { + const request = client[kQueue][client[kRunningIdx]] + const headersTimeout = request.headersTimeout != null + ? request.headersTimeout + : client[kHeadersTimeout] + socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS) + } + } + } + + if (client[kBusy]) { + client[kNeedDrain] = 2 + } else if (client[kNeedDrain] === 2) { + if (sync) { + client[kNeedDrain] = 1 + process.nextTick(emitDrain, client) + } else { + emitDrain(client) + } + continue + } + + if (client[kPending] === 0) { + return + } + + if (client[kRunning] >= (client[kPipelining] || 1)) { + return + } + + const request = client[kQueue][client[kPendingIdx]] + + if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) { + if (client[kRunning] > 0) { + return + } + + client[kServerName] = request.servername + + if (socket && socket.servername !== request.servername) { + util.destroy(socket, new InformationalError('servername changed')) + return + } + } + + if (client[kConnecting]) { + return + } + + if (!socket && !client[kHTTP2Session]) { + connect(client) + return + } + + if (socket.destroyed || socket[kWriting] || socket[kReset] || socket[kBlocking]) { + return + } + + if (client[kRunning] > 0 && !request.idempotent) { + // Non-idempotent request cannot be retried. + // Ensure that no other requests are inflight and + // could cause failure. + return + } + + if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) { + // Don't dispatch an upgrade until all preceding requests have completed. + // A misbehaving server might upgrade the connection before all pipelined + // request has completed. + return + } + + if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && + (util.isStream(request.body) || util.isAsyncIterable(request.body))) { + // Request with stream or iterator body can error while other requests + // are inflight and indirectly error those as well. + // Ensure this doesn't happen by waiting for inflight + // to complete before dispatching. + + // Request with stream or iterator body cannot be retried. + // Ensure that no other requests are inflight and + // could cause failure. + return + } + + if (!request.aborted && write(client, request)) { + client[kPendingIdx]++ + } else { + client[kQueue].splice(client[kPendingIdx], 1) + } + } +} + +// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2 +function shouldSendContentLength (method) { + return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT' +} + +function write (client, request) { + if (client[kHTTPConnVersion] === 'h2') { + writeH2(client, client[kHTTP2Session], request) + return + } + + const { body, method, path, host, upgrade, headers, blocking, reset } = request + + // https://tools.ietf.org/html/rfc7231#section-4.3.1 + // https://tools.ietf.org/html/rfc7231#section-4.3.2 + // https://tools.ietf.org/html/rfc7231#section-4.3.5 + + // Sending a payload body on a request that does not + // expect it can cause undefined behavior on some + // servers and corrupt connection state. Do not + // re-use the connection for further requests. + + const expectsPayload = ( + method === 'PUT' || + method === 'POST' || + method === 'PATCH' + ) + + if (body && typeof body.read === 'function') { + // Try to read EOF in order to get length. + body.read(0) + } + + const bodyLength = util.bodyLength(body) + + let contentLength = bodyLength + + if (contentLength === null) { + contentLength = request.contentLength + } + + if (contentLength === 0 && !expectsPayload) { + // https://tools.ietf.org/html/rfc7230#section-3.3.2 + // A user agent SHOULD NOT send a Content-Length header field when + // the request message does not contain a payload body and the method + // semantics do not anticipate such a body. + + contentLength = null + } + + // https://github.com/nodejs/undici/issues/2046 + // A user agent may send a Content-Length header with 0 value, this should be allowed. + if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + errorRequest(client, request, new RequestContentLengthMismatchError()) + return false + } + + process.emitWarning(new RequestContentLengthMismatchError()) + } + + const socket = client[kSocket] + + try { + request.onConnect((err) => { + if (request.aborted || request.completed) { + return + } + + errorRequest(client, request, err || new RequestAbortedError()) + + util.destroy(socket, new InformationalError('aborted')) + }) + } catch (err) { + errorRequest(client, request, err) + } + + if (request.aborted) { + return false + } + + if (method === 'HEAD') { + // https://github.com/mcollina/undici/issues/258 + // Close after a HEAD request to interop with misbehaving servers + // that may send a body in the response. + + socket[kReset] = true + } + + if (upgrade || method === 'CONNECT') { + // On CONNECT or upgrade, block pipeline from dispatching further + // requests on this connection. + + socket[kReset] = true + } + + if (reset != null) { + socket[kReset] = reset + } + + if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) { + socket[kReset] = true + } + + if (blocking) { + socket[kBlocking] = true + } + + let header = `${method} ${path} HTTP/1.1\r\n` + + if (typeof host === 'string') { + header += `host: ${host}\r\n` + } else { + header += client[kHostHeader] + } + + if (upgrade) { + header += `connection: upgrade\r\nupgrade: ${upgrade}\r\n` + } else if (client[kPipelining] && !socket[kReset]) { + header += 'connection: keep-alive\r\n' + } else { + header += 'connection: close\r\n' + } + + if (headers) { + header += headers + } + + if (channels.sendHeaders.hasSubscribers) { + channels.sendHeaders.publish({ request, headers: header, socket }) + } + + /* istanbul ignore else: assertion */ + if (!body || bodyLength === 0) { + if (contentLength === 0) { + socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1') + } else { + assert(contentLength === null, 'no body must not have content length') + socket.write(`${header}\r\n`, 'latin1') + } + request.onRequestSent() + } else if (util.isBuffer(body)) { + assert(contentLength === body.byteLength, 'buffer body must have content length') + + socket.cork() + socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') + socket.write(body) + socket.uncork() + request.onBodySent(body) + request.onRequestSent() + if (!expectsPayload) { + socket[kReset] = true + } + } else if (util.isBlobLike(body)) { + if (typeof body.stream === 'function') { + writeIterable({ body: body.stream(), client, request, socket, contentLength, header, expectsPayload }) + } else { + writeBlob({ body, client, request, socket, contentLength, header, expectsPayload }) + } + } else if (util.isStream(body)) { + writeStream({ body, client, request, socket, contentLength, header, expectsPayload }) + } else if (util.isIterable(body)) { + writeIterable({ body, client, request, socket, contentLength, header, expectsPayload }) + } else { + assert(false) + } + + return true +} + +function writeH2 (client, session, request) { + const { body, method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request + + let headers + if (typeof reqHeaders === 'string') headers = Request[kHTTP2CopyHeaders](reqHeaders.trim()) + else headers = reqHeaders + + if (upgrade) { + errorRequest(client, request, new Error('Upgrade not supported for H2')) + return false + } + + try { + // TODO(HTTP/2): Should we call onConnect immediately or on stream ready event? + request.onConnect((err) => { + if (request.aborted || request.completed) { + return + } + + errorRequest(client, request, err || new RequestAbortedError()) + }) + } catch (err) { + errorRequest(client, request, err) + } + + if (request.aborted) { + return false + } + + /** @type {import('node:http2').ClientHttp2Stream} */ + let stream + const h2State = client[kHTTP2SessionState] + + headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost] + headers[HTTP2_HEADER_METHOD] = method + + if (method === 'CONNECT') { + session.ref() + // we are already connected, streams are pending, first request + // will create a new stream. We trigger a request to create the stream and wait until + // `ready` event is triggered + // We disabled endStream to allow the user to write to the stream + stream = session.request(headers, { endStream: false, signal }) + + if (stream.id && !stream.pending) { + request.onUpgrade(null, null, stream) + ++h2State.openStreams + } else { + stream.once('ready', () => { + request.onUpgrade(null, null, stream) + ++h2State.openStreams + }) + } + + stream.once('close', () => { + h2State.openStreams -= 1 + // TODO(HTTP/2): unref only if current streams count is 0 + if (h2State.openStreams === 0) session.unref() + }) + + return true + } + + // https://tools.ietf.org/html/rfc7540#section-8.3 + // :path and :scheme headers must be omited when sending CONNECT + + headers[HTTP2_HEADER_PATH] = path + headers[HTTP2_HEADER_SCHEME] = 'https' + + // https://tools.ietf.org/html/rfc7231#section-4.3.1 + // https://tools.ietf.org/html/rfc7231#section-4.3.2 + // https://tools.ietf.org/html/rfc7231#section-4.3.5 + + // Sending a payload body on a request that does not + // expect it can cause undefined behavior on some + // servers and corrupt connection state. Do not + // re-use the connection for further requests. + + const expectsPayload = ( + method === 'PUT' || + method === 'POST' || + method === 'PATCH' + ) + + if (body && typeof body.read === 'function') { + // Try to read EOF in order to get length. + body.read(0) + } + + let contentLength = util.bodyLength(body) + + if (contentLength == null) { + contentLength = request.contentLength + } + + if (contentLength === 0 || !expectsPayload) { + // https://tools.ietf.org/html/rfc7230#section-3.3.2 + // A user agent SHOULD NOT send a Content-Length header field when + // the request message does not contain a payload body and the method + // semantics do not anticipate such a body. + + contentLength = null + } + + // https://github.com/nodejs/undici/issues/2046 + // A user agent may send a Content-Length header with 0 value, this should be allowed. + if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + errorRequest(client, request, new RequestContentLengthMismatchError()) + return false + } + + process.emitWarning(new RequestContentLengthMismatchError()) + } + + if (contentLength != null) { + assert(body, 'no body must not have content length') + headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}` + } + + session.ref() + + const shouldEndStream = method === 'GET' || method === 'HEAD' + if (expectContinue) { + headers[HTTP2_HEADER_EXPECT] = '100-continue' + stream = session.request(headers, { endStream: shouldEndStream, signal }) + + stream.once('continue', writeBodyH2) + } else { + stream = session.request(headers, { + endStream: shouldEndStream, + signal + }) + writeBodyH2() + } + + // Increment counter as we have new several streams open + ++h2State.openStreams + + stream.once('response', headers => { + const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers + + if (request.onHeaders(Number(statusCode), realHeaders, stream.resume.bind(stream), '') === false) { + stream.pause() + } + }) + + stream.once('end', () => { + request.onComplete([]) + }) + + stream.on('data', (chunk) => { + if (request.onData(chunk) === false) { + stream.pause() + } + }) + + stream.once('close', () => { + h2State.openStreams -= 1 + // TODO(HTTP/2): unref only if current streams count is 0 + if (h2State.openStreams === 0) { + session.unref() + } + }) + + stream.once('error', function (err) { + if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) { + h2State.streams -= 1 + util.destroy(stream, err) + } + }) + + stream.once('frameError', (type, code) => { + const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`) + errorRequest(client, request, err) + + if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) { + h2State.streams -= 1 + util.destroy(stream, err) + } + }) + + // stream.on('aborted', () => { + // // TODO(HTTP/2): Support aborted + // }) + + // stream.on('timeout', () => { + // // TODO(HTTP/2): Support timeout + // }) + + // stream.on('push', headers => { + // // TODO(HTTP/2): Suppor push + // }) + + // stream.on('trailers', headers => { + // // TODO(HTTP/2): Support trailers + // }) + + return true + + function writeBodyH2 () { + /* istanbul ignore else: assertion */ + if (!body) { + request.onRequestSent() + } else if (util.isBuffer(body)) { + assert(contentLength === body.byteLength, 'buffer body must have content length') + stream.cork() + stream.write(body) + stream.uncork() + stream.end() + request.onBodySent(body) + request.onRequestSent() + } else if (util.isBlobLike(body)) { + if (typeof body.stream === 'function') { + writeIterable({ + client, + request, + contentLength, + h2stream: stream, + expectsPayload, + body: body.stream(), + socket: client[kSocket], + header: '' + }) + } else { + writeBlob({ + body, + client, + request, + contentLength, + expectsPayload, + h2stream: stream, + header: '', + socket: client[kSocket] + }) + } + } else if (util.isStream(body)) { + writeStream({ + body, + client, + request, + contentLength, + expectsPayload, + socket: client[kSocket], + h2stream: stream, + header: '' + }) + } else if (util.isIterable(body)) { + writeIterable({ + body, + client, + request, + contentLength, + expectsPayload, + header: '', + h2stream: stream, + socket: client[kSocket] + }) + } else { + assert(false) + } + } +} + +function writeStream ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { + assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined') + + if (client[kHTTPConnVersion] === 'h2') { + // For HTTP/2, is enough to pipe the stream + const pipe = pipeline( + body, + h2stream, + (err) => { + if (err) { + util.destroy(body, err) + util.destroy(h2stream, err) + } else { + request.onRequestSent() + } + } + ) + + pipe.on('data', onPipeData) + pipe.once('end', () => { + pipe.removeListener('data', onPipeData) + util.destroy(pipe) + }) + + function onPipeData (chunk) { + request.onBodySent(chunk) + } + + return + } + + let finished = false + + const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header }) + + const onData = function (chunk) { + if (finished) { + return + } + + try { + if (!writer.write(chunk) && this.pause) { + this.pause() + } + } catch (err) { + util.destroy(this, err) + } + } + const onDrain = function () { + if (finished) { + return + } + + if (body.resume) { + body.resume() + } + } + const onAbort = function () { + if (finished) { + return + } + const err = new RequestAbortedError() + queueMicrotask(() => onFinished(err)) + } + const onFinished = function (err) { + if (finished) { + return + } + + finished = true + + assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1)) + + socket + .off('drain', onDrain) + .off('error', onFinished) + + body + .removeListener('data', onData) + .removeListener('end', onFinished) + .removeListener('error', onFinished) + .removeListener('close', onAbort) + + if (!err) { + try { + writer.end() + } catch (er) { + err = er + } + } + + writer.destroy(err) + + if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) { + util.destroy(body, err) + } else { + util.destroy(body) + } + } + + body + .on('data', onData) + .on('end', onFinished) + .on('error', onFinished) + .on('close', onAbort) + + if (body.resume) { + body.resume() + } + + socket + .on('drain', onDrain) + .on('error', onFinished) +} + +async function writeBlob ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { + assert(contentLength === body.size, 'blob body must have content length') + + const isH2 = client[kHTTPConnVersion] === 'h2' + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError() + } + + const buffer = Buffer.from(await body.arrayBuffer()) + + if (isH2) { + h2stream.cork() + h2stream.write(buffer) + h2stream.uncork() + } else { + socket.cork() + socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') + socket.write(buffer) + socket.uncork() + } + + request.onBodySent(buffer) + request.onRequestSent() + + if (!expectsPayload) { + socket[kReset] = true + } + + resume(client) + } catch (err) { + util.destroy(isH2 ? h2stream : socket, err) + } +} + +async function writeIterable ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { + assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined') + + let callback = null + function onDrain () { + if (callback) { + const cb = callback + callback = null + cb() + } + } + + const waitForDrain = () => new Promise((resolve, reject) => { + assert(callback === null) + + if (socket[kError]) { + reject(socket[kError]) + } else { + callback = resolve + } + }) + + if (client[kHTTPConnVersion] === 'h2') { + h2stream + .on('close', onDrain) + .on('drain', onDrain) + + try { + // It's up to the user to somehow abort the async iterable. + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError] + } + + const res = h2stream.write(chunk) + request.onBodySent(chunk) + if (!res) { + await waitForDrain() + } + } + } catch (err) { + h2stream.destroy(err) + } finally { + request.onRequestSent() + h2stream.end() + h2stream + .off('close', onDrain) + .off('drain', onDrain) + } + + return + } + + socket + .on('close', onDrain) + .on('drain', onDrain) + + const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header }) + try { + // It's up to the user to somehow abort the async iterable. + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError] + } + + if (!writer.write(chunk)) { + await waitForDrain() + } + } + + writer.end() + } catch (err) { + writer.destroy(err) + } finally { + socket + .off('close', onDrain) + .off('drain', onDrain) + } +} + +class AsyncWriter { + constructor ({ socket, request, contentLength, client, expectsPayload, header }) { + this.socket = socket + this.request = request + this.contentLength = contentLength + this.client = client + this.bytesWritten = 0 + this.expectsPayload = expectsPayload + this.header = header + + socket[kWriting] = true + } + + write (chunk) { + const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this + + if (socket[kError]) { + throw socket[kError] + } + + if (socket.destroyed) { + return false + } + + const len = Buffer.byteLength(chunk) + if (!len) { + return true + } + + // We should defer writing chunks. + if (contentLength !== null && bytesWritten + len > contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError() + } + + process.emitWarning(new RequestContentLengthMismatchError()) + } + + socket.cork() + + if (bytesWritten === 0) { + if (!expectsPayload) { + socket[kReset] = true + } + + if (contentLength === null) { + socket.write(`${header}transfer-encoding: chunked\r\n`, 'latin1') + } else { + socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') + } + } + + if (contentLength === null) { + socket.write(`\r\n${len.toString(16)}\r\n`, 'latin1') + } + + this.bytesWritten += len + + const ret = socket.write(chunk) + + socket.uncork() + + request.onBodySent(chunk) + + if (!ret) { + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + // istanbul ignore else: only for jest + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh() + } + } + } + + return ret + } + + end () { + const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this + request.onRequestSent() + + socket[kWriting] = false + + if (socket[kError]) { + throw socket[kError] + } + + if (socket.destroyed) { + return + } + + if (bytesWritten === 0) { + if (expectsPayload) { + // https://tools.ietf.org/html/rfc7230#section-3.3.2 + // A user agent SHOULD send a Content-Length in a request message when + // no Transfer-Encoding is sent and the request method defines a meaning + // for an enclosed payload body. + + socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1') + } else { + socket.write(`${header}\r\n`, 'latin1') + } + } else if (contentLength === null) { + socket.write('\r\n0\r\n\r\n', 'latin1') + } + + if (contentLength !== null && bytesWritten !== contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError() + } else { + process.emitWarning(new RequestContentLengthMismatchError()) + } + } + + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + // istanbul ignore else: only for jest + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh() + } + } + + resume(client) + } + + destroy (err) { + const { socket, client } = this + + socket[kWriting] = false + + if (err) { + assert(client[kRunning] <= 1, 'pipeline should only contain this request') + util.destroy(socket, err) + } + } +} + +function errorRequest (client, request, err) { + try { + request.onError(err) + assert(request.aborted) + } catch (err) { + client.emit('error', err) + } +} + +module.exports = Client + + +/***/ }), + +/***/ 3194: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +/* istanbul ignore file: only for Node 12 */ + +const { kConnected, kSize } = __nccwpck_require__(6443) + +class CompatWeakRef { + constructor (value) { + this.value = value + } + + deref () { + return this.value[kConnected] === 0 && this.value[kSize] === 0 + ? undefined + : this.value + } +} + +class CompatFinalizer { + constructor (finalizer) { + this.finalizer = finalizer + } + + register (dispatcher, key) { + if (dispatcher.on) { + dispatcher.on('disconnect', () => { + if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { + this.finalizer(key) + } + }) + } + } +} + +module.exports = function () { + // FIXME: remove workaround when the Node bug is fixed + // https://github.com/nodejs/node/issues/49344#issuecomment-1741776308 + if (process.env.NODE_V8_COVERAGE) { + return { + WeakRef: CompatWeakRef, + FinalizationRegistry: CompatFinalizer + } + } + return { + WeakRef: global.WeakRef || CompatWeakRef, + FinalizationRegistry: global.FinalizationRegistry || CompatFinalizer + } +} + + +/***/ }), + +/***/ 9237: +/***/ ((module) => { + +"use strict"; + + +// https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size +const maxAttributeValueSize = 1024 + +// https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size +const maxNameValuePairSize = 4096 + +module.exports = { + maxAttributeValueSize, + maxNameValuePairSize +} + + +/***/ }), + +/***/ 3168: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { parseSetCookie } = __nccwpck_require__(8915) +const { stringify, getHeadersList } = __nccwpck_require__(3834) +const { webidl } = __nccwpck_require__(4222) +const { Headers } = __nccwpck_require__(6349) + +/** + * @typedef {Object} Cookie + * @property {string} name + * @property {string} value + * @property {Date|number|undefined} expires + * @property {number|undefined} maxAge + * @property {string|undefined} domain + * @property {string|undefined} path + * @property {boolean|undefined} secure + * @property {boolean|undefined} httpOnly + * @property {'Strict'|'Lax'|'None'} sameSite + * @property {string[]} unparsed + */ + +/** + * @param {Headers} headers + * @returns {Record} + */ +function getCookies (headers) { + webidl.argumentLengthCheck(arguments, 1, { header: 'getCookies' }) + + webidl.brandCheck(headers, Headers, { strict: false }) + + const cookie = headers.get('cookie') + const out = {} + + if (!cookie) { + return out + } + + for (const piece of cookie.split(';')) { + const [name, ...value] = piece.split('=') + + out[name.trim()] = value.join('=') + } + + return out +} + +/** + * @param {Headers} headers + * @param {string} name + * @param {{ path?: string, domain?: string }|undefined} attributes + * @returns {void} + */ +function deleteCookie (headers, name, attributes) { + webidl.argumentLengthCheck(arguments, 2, { header: 'deleteCookie' }) + + webidl.brandCheck(headers, Headers, { strict: false }) + + name = webidl.converters.DOMString(name) + attributes = webidl.converters.DeleteCookieAttributes(attributes) + + // Matches behavior of + // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278 + setCookie(headers, { + name, + value: '', + expires: new Date(0), + ...attributes + }) +} + +/** + * @param {Headers} headers + * @returns {Cookie[]} + */ +function getSetCookies (headers) { + webidl.argumentLengthCheck(arguments, 1, { header: 'getSetCookies' }) + + webidl.brandCheck(headers, Headers, { strict: false }) + + const cookies = getHeadersList(headers).cookies + + if (!cookies) { + return [] + } + + // In older versions of undici, cookies is a list of name:value. + return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair)) +} + +/** + * @param {Headers} headers + * @param {Cookie} cookie + * @returns {void} + */ +function setCookie (headers, cookie) { + webidl.argumentLengthCheck(arguments, 2, { header: 'setCookie' }) + + webidl.brandCheck(headers, Headers, { strict: false }) + + cookie = webidl.converters.Cookie(cookie) + + const str = stringify(cookie) + + if (str) { + headers.append('Set-Cookie', stringify(cookie)) + } +} + +webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([ + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: 'path', + defaultValue: null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: 'domain', + defaultValue: null + } +]) + +webidl.converters.Cookie = webidl.dictionaryConverter([ + { + converter: webidl.converters.DOMString, + key: 'name' + }, + { + converter: webidl.converters.DOMString, + key: 'value' + }, + { + converter: webidl.nullableConverter((value) => { + if (typeof value === 'number') { + return webidl.converters['unsigned long long'](value) + } + + return new Date(value) + }), + key: 'expires', + defaultValue: null + }, + { + converter: webidl.nullableConverter(webidl.converters['long long']), + key: 'maxAge', + defaultValue: null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: 'domain', + defaultValue: null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: 'path', + defaultValue: null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: 'secure', + defaultValue: null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: 'httpOnly', + defaultValue: null + }, + { + converter: webidl.converters.USVString, + key: 'sameSite', + allowedValues: ['Strict', 'Lax', 'None'] + }, + { + converter: webidl.sequenceConverter(webidl.converters.DOMString), + key: 'unparsed', + defaultValue: [] + } +]) + +module.exports = { + getCookies, + deleteCookie, + getSetCookies, + setCookie +} + + +/***/ }), + +/***/ 8915: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { maxNameValuePairSize, maxAttributeValueSize } = __nccwpck_require__(9237) +const { isCTLExcludingHtab } = __nccwpck_require__(3834) +const { collectASequenceOfCodePointsFast } = __nccwpck_require__(4322) +const assert = __nccwpck_require__(2613) + +/** + * @description Parses the field-value attributes of a set-cookie header string. + * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4 + * @param {string} header + * @returns if the header is invalid, null will be returned + */ +function parseSetCookie (header) { + // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F + // character (CTL characters excluding HTAB): Abort these steps and + // ignore the set-cookie-string entirely. + if (isCTLExcludingHtab(header)) { + return null + } + + let nameValuePair = '' + let unparsedAttributes = '' + let name = '' + let value = '' + + // 2. If the set-cookie-string contains a %x3B (";") character: + if (header.includes(';')) { + // 1. The name-value-pair string consists of the characters up to, + // but not including, the first %x3B (";"), and the unparsed- + // attributes consist of the remainder of the set-cookie-string + // (including the %x3B (";") in question). + const position = { position: 0 } + + nameValuePair = collectASequenceOfCodePointsFast(';', header, position) + unparsedAttributes = header.slice(position.position) + } else { + // Otherwise: + + // 1. The name-value-pair string consists of all the characters + // contained in the set-cookie-string, and the unparsed- + // attributes is the empty string. + nameValuePair = header + } + + // 3. If the name-value-pair string lacks a %x3D ("=") character, then + // the name string is empty, and the value string is the value of + // name-value-pair. + if (!nameValuePair.includes('=')) { + value = nameValuePair + } else { + // Otherwise, the name string consists of the characters up to, but + // not including, the first %x3D ("=") character, and the (possibly + // empty) value string consists of the characters after the first + // %x3D ("=") character. + const position = { position: 0 } + name = collectASequenceOfCodePointsFast( + '=', + nameValuePair, + position + ) + value = nameValuePair.slice(position.position + 1) + } + + // 4. Remove any leading or trailing WSP characters from the name + // string and the value string. + name = name.trim() + value = value.trim() + + // 5. If the sum of the lengths of the name string and the value string + // is more than 4096 octets, abort these steps and ignore the set- + // cookie-string entirely. + if (name.length + value.length > maxNameValuePairSize) { + return null + } + + // 6. The cookie-name is the name string, and the cookie-value is the + // value string. + return { + name, value, ...parseUnparsedAttributes(unparsedAttributes) + } +} + +/** + * Parses the remaining attributes of a set-cookie header + * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4 + * @param {string} unparsedAttributes + * @param {[Object.]={}} cookieAttributeList + */ +function parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) { + // 1. If the unparsed-attributes string is empty, skip the rest of + // these steps. + if (unparsedAttributes.length === 0) { + return cookieAttributeList + } + + // 2. Discard the first character of the unparsed-attributes (which + // will be a %x3B (";") character). + assert(unparsedAttributes[0] === ';') + unparsedAttributes = unparsedAttributes.slice(1) + + let cookieAv = '' + + // 3. If the remaining unparsed-attributes contains a %x3B (";") + // character: + if (unparsedAttributes.includes(';')) { + // 1. Consume the characters of the unparsed-attributes up to, but + // not including, the first %x3B (";") character. + cookieAv = collectASequenceOfCodePointsFast( + ';', + unparsedAttributes, + { position: 0 } + ) + unparsedAttributes = unparsedAttributes.slice(cookieAv.length) + } else { + // Otherwise: + + // 1. Consume the remainder of the unparsed-attributes. + cookieAv = unparsedAttributes + unparsedAttributes = '' + } + + // Let the cookie-av string be the characters consumed in this step. + + let attributeName = '' + let attributeValue = '' + + // 4. If the cookie-av string contains a %x3D ("=") character: + if (cookieAv.includes('=')) { + // 1. The (possibly empty) attribute-name string consists of the + // characters up to, but not including, the first %x3D ("=") + // character, and the (possibly empty) attribute-value string + // consists of the characters after the first %x3D ("=") + // character. + const position = { position: 0 } + + attributeName = collectASequenceOfCodePointsFast( + '=', + cookieAv, + position + ) + attributeValue = cookieAv.slice(position.position + 1) + } else { + // Otherwise: + + // 1. The attribute-name string consists of the entire cookie-av + // string, and the attribute-value string is empty. + attributeName = cookieAv + } + + // 5. Remove any leading or trailing WSP characters from the attribute- + // name string and the attribute-value string. + attributeName = attributeName.trim() + attributeValue = attributeValue.trim() + + // 6. If the attribute-value is longer than 1024 octets, ignore the + // cookie-av string and return to Step 1 of this algorithm. + if (attributeValue.length > maxAttributeValueSize) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) + } + + // 7. Process the attribute-name and attribute-value according to the + // requirements in the following subsections. (Notice that + // attributes with unrecognized attribute-names are ignored.) + const attributeNameLowercase = attributeName.toLowerCase() + + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1 + // If the attribute-name case-insensitively matches the string + // "Expires", the user agent MUST process the cookie-av as follows. + if (attributeNameLowercase === 'expires') { + // 1. Let the expiry-time be the result of parsing the attribute-value + // as cookie-date (see Section 5.1.1). + const expiryTime = new Date(attributeValue) + + // 2. If the attribute-value failed to parse as a cookie date, ignore + // the cookie-av. + + cookieAttributeList.expires = expiryTime + } else if (attributeNameLowercase === 'max-age') { + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2 + // If the attribute-name case-insensitively matches the string "Max- + // Age", the user agent MUST process the cookie-av as follows. + + // 1. If the first character of the attribute-value is not a DIGIT or a + // "-" character, ignore the cookie-av. + const charCode = attributeValue.charCodeAt(0) + + if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) + } + + // 2. If the remainder of attribute-value contains a non-DIGIT + // character, ignore the cookie-av. + if (!/^\d+$/.test(attributeValue)) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) + } + + // 3. Let delta-seconds be the attribute-value converted to an integer. + const deltaSeconds = Number(attributeValue) + + // 4. Let cookie-age-limit be the maximum age of the cookie (which + // SHOULD be 400 days or less, see Section 4.1.2.2). + + // 5. Set delta-seconds to the smaller of its present value and cookie- + // age-limit. + // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs) + + // 6. If delta-seconds is less than or equal to zero (0), let expiry- + // time be the earliest representable date and time. Otherwise, let + // the expiry-time be the current date and time plus delta-seconds + // seconds. + // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds + + // 7. Append an attribute to the cookie-attribute-list with an + // attribute-name of Max-Age and an attribute-value of expiry-time. + cookieAttributeList.maxAge = deltaSeconds + } else if (attributeNameLowercase === 'domain') { + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3 + // If the attribute-name case-insensitively matches the string "Domain", + // the user agent MUST process the cookie-av as follows. + + // 1. Let cookie-domain be the attribute-value. + let cookieDomain = attributeValue + + // 2. If cookie-domain starts with %x2E ("."), let cookie-domain be + // cookie-domain without its leading %x2E ("."). + if (cookieDomain[0] === '.') { + cookieDomain = cookieDomain.slice(1) + } + + // 3. Convert the cookie-domain to lower case. + cookieDomain = cookieDomain.toLowerCase() + + // 4. Append an attribute to the cookie-attribute-list with an + // attribute-name of Domain and an attribute-value of cookie-domain. + cookieAttributeList.domain = cookieDomain + } else if (attributeNameLowercase === 'path') { + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4 + // If the attribute-name case-insensitively matches the string "Path", + // the user agent MUST process the cookie-av as follows. + + // 1. If the attribute-value is empty or if the first character of the + // attribute-value is not %x2F ("/"): + let cookiePath = '' + if (attributeValue.length === 0 || attributeValue[0] !== '/') { + // 1. Let cookie-path be the default-path. + cookiePath = '/' + } else { + // Otherwise: + + // 1. Let cookie-path be the attribute-value. + cookiePath = attributeValue + } + + // 2. Append an attribute to the cookie-attribute-list with an + // attribute-name of Path and an attribute-value of cookie-path. + cookieAttributeList.path = cookiePath + } else if (attributeNameLowercase === 'secure') { + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.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. + + cookieAttributeList.secure = true + } else if (attributeNameLowercase === 'httponly') { + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6 + // If the attribute-name case-insensitively matches the string + // "HttpOnly", the user agent MUST append an attribute to the cookie- + // attribute-list with an attribute-name of HttpOnly and an empty + // attribute-value. + + cookieAttributeList.httpOnly = true + } else if (attributeNameLowercase === 'samesite') { + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7 + // If the attribute-name case-insensitively matches the string + // "SameSite", the user agent MUST process the cookie-av as follows: + + // 1. Let enforcement be "Default". + let enforcement = 'Default' + + const attributeValueLowercase = attributeValue.toLowerCase() + // 2. If cookie-av's attribute-value is a case-insensitive match for + // "None", set enforcement to "None". + if (attributeValueLowercase.includes('none')) { + enforcement = 'None' + } + + // 3. If cookie-av's attribute-value is a case-insensitive match for + // "Strict", set enforcement to "Strict". + if (attributeValueLowercase.includes('strict')) { + enforcement = 'Strict' + } + + // 4. If cookie-av's attribute-value is a case-insensitive match for + // "Lax", set enforcement to "Lax". + if (attributeValueLowercase.includes('lax')) { + enforcement = 'Lax' + } + + // 5. Append an attribute to the cookie-attribute-list with an + // attribute-name of "SameSite" and an attribute-value of + // enforcement. + cookieAttributeList.sameSite = enforcement + } else { + cookieAttributeList.unparsed ??= [] + + cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`) + } + + // 8. Return to Step 1 of this algorithm. + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) +} + +module.exports = { + parseSetCookie, + parseUnparsedAttributes +} + + +/***/ }), + +/***/ 3834: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const assert = __nccwpck_require__(2613) +const { kHeadersList } = __nccwpck_require__(6443) + +function isCTLExcludingHtab (value) { + if (value.length === 0) { + return false + } + + for (const char of value) { + const code = char.charCodeAt(0) + + if ( + (code >= 0x00 || code <= 0x08) || + (code >= 0x0A || code <= 0x1F) || + code === 0x7F + ) { + return false + } + } +} + +/** + CHAR = + token = 1* + separators = "(" | ")" | "<" | ">" | "@" + | "," | ";" | ":" | "\" | <"> + | "/" | "[" | "]" | "?" | "=" + | "{" | "}" | SP | HT + * @param {string} name + */ +function validateCookieName (name) { + for (const char of name) { + const code = char.charCodeAt(0) + + if ( + (code <= 0x20 || code > 0x7F) || + char === '(' || + char === ')' || + char === '>' || + char === '<' || + char === '@' || + char === ',' || + char === ';' || + char === ':' || + char === '\\' || + char === '"' || + char === '/' || + char === '[' || + char === ']' || + char === '?' || + char === '=' || + char === '{' || + char === '}' + ) { + throw new Error('Invalid cookie name') + } + } +} + +/** + cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE ) + cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E + ; US-ASCII characters excluding CTLs, + ; whitespace DQUOTE, comma, semicolon, + ; and backslash + * @param {string} value + */ +function validateCookieValue (value) { + for (const char of value) { + const code = char.charCodeAt(0) + + if ( + code < 0x21 || // exclude CTLs (0-31) + code === 0x22 || + code === 0x2C || + code === 0x3B || + code === 0x5C || + code > 0x7E // non-ascii + ) { + throw new Error('Invalid header value') + } + } +} + +/** + * path-value = + * @param {string} path + */ +function validateCookiePath (path) { + for (const char of path) { + const code = char.charCodeAt(0) + + if (code < 0x21 || char === ';') { + throw new Error('Invalid cookie path') + } + } +} + +/** + * I have no idea why these values aren't allowed to be honest, + * but Deno tests these. - Khafra + * @param {string} domain + */ +function validateCookieDomain (domain) { + if ( + domain.startsWith('-') || + domain.endsWith('.') || + domain.endsWith('-') + ) { + throw new Error('Invalid cookie domain') + } +} + +/** + * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1 + * @param {number|Date} date + IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT + ; fixed length/zone/capitalization subset of the format + ; see Section 3.3 of [RFC5322] + + day-name = %x4D.6F.6E ; "Mon", case-sensitive + / %x54.75.65 ; "Tue", case-sensitive + / %x57.65.64 ; "Wed", case-sensitive + / %x54.68.75 ; "Thu", case-sensitive + / %x46.72.69 ; "Fri", case-sensitive + / %x53.61.74 ; "Sat", case-sensitive + / %x53.75.6E ; "Sun", case-sensitive + date1 = day SP month SP year + ; e.g., 02 Jun 1982 + + day = 2DIGIT + month = %x4A.61.6E ; "Jan", case-sensitive + / %x46.65.62 ; "Feb", case-sensitive + / %x4D.61.72 ; "Mar", case-sensitive + / %x41.70.72 ; "Apr", case-sensitive + / %x4D.61.79 ; "May", case-sensitive + / %x4A.75.6E ; "Jun", case-sensitive + / %x4A.75.6C ; "Jul", case-sensitive + / %x41.75.67 ; "Aug", case-sensitive + / %x53.65.70 ; "Sep", case-sensitive + / %x4F.63.74 ; "Oct", case-sensitive + / %x4E.6F.76 ; "Nov", case-sensitive + / %x44.65.63 ; "Dec", case-sensitive + year = 4DIGIT + + GMT = %x47.4D.54 ; "GMT", case-sensitive + + time-of-day = hour ":" minute ":" second + ; 00:00:00 - 23:59:60 (leap second) + + hour = 2DIGIT + minute = 2DIGIT + second = 2DIGIT + */ +function toIMFDate (date) { + if (typeof date === 'number') { + date = new Date(date) + } + + const days = [ + 'Sun', 'Mon', 'Tue', 'Wed', + 'Thu', 'Fri', 'Sat' + ] + + const months = [ + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' + ] + + const dayName = days[date.getUTCDay()] + const day = date.getUTCDate().toString().padStart(2, '0') + const month = months[date.getUTCMonth()] + const year = date.getUTCFullYear() + const hour = date.getUTCHours().toString().padStart(2, '0') + const minute = date.getUTCMinutes().toString().padStart(2, '0') + const second = date.getUTCSeconds().toString().padStart(2, '0') + + return `${dayName}, ${day} ${month} ${year} ${hour}:${minute}:${second} GMT` +} + +/** + max-age-av = "Max-Age=" non-zero-digit *DIGIT + ; In practice, both expires-av and max-age-av + ; are limited to dates representable by the + ; user agent. + * @param {number} maxAge + */ +function validateCookieMaxAge (maxAge) { + if (maxAge < 0) { + throw new Error('Invalid cookie max-age') + } +} + +/** + * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1 + * @param {import('./index').Cookie} cookie + */ +function stringify (cookie) { + if (cookie.name.length === 0) { + return null + } + + validateCookieName(cookie.name) + validateCookieValue(cookie.value) + + const out = [`${cookie.name}=${cookie.value}`] + + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1 + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2 + if (cookie.name.startsWith('__Secure-')) { + cookie.secure = true + } + + if (cookie.name.startsWith('__Host-')) { + cookie.secure = true + cookie.domain = null + cookie.path = '/' + } + + if (cookie.secure) { + out.push('Secure') + } + + if (cookie.httpOnly) { + out.push('HttpOnly') + } + + if (typeof cookie.maxAge === 'number') { + validateCookieMaxAge(cookie.maxAge) + out.push(`Max-Age=${cookie.maxAge}`) + } + + if (cookie.domain) { + validateCookieDomain(cookie.domain) + out.push(`Domain=${cookie.domain}`) + } + + if (cookie.path) { + validateCookiePath(cookie.path) + out.push(`Path=${cookie.path}`) + } + + if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') { + out.push(`Expires=${toIMFDate(cookie.expires)}`) + } + + if (cookie.sameSite) { + out.push(`SameSite=${cookie.sameSite}`) + } + + for (const part of cookie.unparsed) { + if (!part.includes('=')) { + throw new Error('Invalid unparsed') + } + + const [key, ...value] = part.split('=') + + out.push(`${key.trim()}=${value.join('=')}`) + } + + return out.join('; ') +} + +let kHeadersListNode + +function getHeadersList (headers) { + if (headers[kHeadersList]) { + return headers[kHeadersList] + } + + if (!kHeadersListNode) { + kHeadersListNode = Object.getOwnPropertySymbols(headers).find( + (symbol) => symbol.description === 'headers list' + ) + + assert(kHeadersListNode, 'Headers cannot be parsed') + } + + const headersList = headers[kHeadersListNode] + assert(headersList) + + return headersList +} + +module.exports = { + isCTLExcludingHtab, + stringify, + getHeadersList +} + + +/***/ }), + +/***/ 9136: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const net = __nccwpck_require__(9278) +const assert = __nccwpck_require__(2613) +const util = __nccwpck_require__(3440) +const { InvalidArgumentError, ConnectTimeoutError } = __nccwpck_require__(8707) + +let tls // include tls conditionally since it is not always available + +// TODO: session re-use does not wait for the first +// connection to resolve the session and might therefore +// resolve the same servername multiple times even when +// re-use is enabled. + +let SessionCache +// FIXME: remove workaround when the Node bug is fixed +// https://github.com/nodejs/node/issues/49344#issuecomment-1741776308 +if (global.FinalizationRegistry && !process.env.NODE_V8_COVERAGE) { + SessionCache = class WeakSessionCache { + constructor (maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions + this._sessionCache = new Map() + this._sessionRegistry = new global.FinalizationRegistry((key) => { + if (this._sessionCache.size < this._maxCachedSessions) { + return + } + + const ref = this._sessionCache.get(key) + if (ref !== undefined && ref.deref() === undefined) { + this._sessionCache.delete(key) + } + }) + } + + get (sessionKey) { + const ref = this._sessionCache.get(sessionKey) + return ref ? ref.deref() : null + } + + set (sessionKey, session) { + if (this._maxCachedSessions === 0) { + return + } + + this._sessionCache.set(sessionKey, new WeakRef(session)) + this._sessionRegistry.register(session, sessionKey) + } + } +} else { + SessionCache = class SimpleSessionCache { + constructor (maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions + this._sessionCache = new Map() + } + + get (sessionKey) { + return this._sessionCache.get(sessionKey) + } + + set (sessionKey, session) { + if (this._maxCachedSessions === 0) { + return + } + + if (this._sessionCache.size >= this._maxCachedSessions) { + // remove the oldest session + const { value: oldestKey } = this._sessionCache.keys().next() + this._sessionCache.delete(oldestKey) + } + + this._sessionCache.set(sessionKey, session) + } + } +} + +function buildConnector ({ allowH2, maxCachedSessions, socketPath, timeout, ...opts }) { + if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { + throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero') + } + + const options = { path: socketPath, ...opts } + const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions) + timeout = timeout == null ? 10e3 : timeout + allowH2 = allowH2 != null ? allowH2 : false + return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) { + let socket + if (protocol === 'https:') { + if (!tls) { + tls = __nccwpck_require__(4756) + } + servername = servername || options.servername || util.getServerName(host) || null + + const sessionKey = servername || hostname + const session = sessionCache.get(sessionKey) || null + + assert(sessionKey) + + socket = tls.connect({ + highWaterMark: 16384, // TLS in node can't have bigger HWM anyway... + ...options, + servername, + session, + localAddress, + // TODO(HTTP/2): Add support for h2c + ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'], + socket: httpSocket, // upgrade socket connection + port: port || 443, + host: hostname + }) + + socket + .on('session', function (session) { + // TODO (fix): Can a session become invalid once established? Don't think so? + sessionCache.set(sessionKey, session) + }) + } else { + assert(!httpSocket, 'httpSocket can only be sent on TLS update') + socket = net.connect({ + highWaterMark: 64 * 1024, // Same as nodejs fs streams. + ...options, + localAddress, + port: port || 80, + host: hostname + }) + } + + // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket + if (options.keepAlive == null || options.keepAlive) { + const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay + socket.setKeepAlive(true, keepAliveInitialDelay) + } + + const cancelTimeout = setupTimeout(() => onConnectTimeout(socket), timeout) + + socket + .setNoDelay(true) + .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () { + cancelTimeout() + + if (callback) { + const cb = callback + callback = null + cb(null, this) + } + }) + .on('error', function (err) { + cancelTimeout() + + if (callback) { + const cb = callback + callback = null + cb(err) + } + }) + + return socket + } +} + +function setupTimeout (onConnectTimeout, timeout) { + if (!timeout) { + return () => {} + } + + let s1 = null + let s2 = null + const timeoutId = setTimeout(() => { + // setImmediate is added to make sure that we priotorise socket error events over timeouts + s1 = setImmediate(() => { + if (process.platform === 'win32') { + // Windows needs an extra setImmediate probably due to implementation differences in the socket logic + s2 = setImmediate(() => onConnectTimeout()) + } else { + onConnectTimeout() + } + }) + }, timeout) + return () => { + clearTimeout(timeoutId) + clearImmediate(s1) + clearImmediate(s2) + } +} + +function onConnectTimeout (socket) { + util.destroy(socket, new ConnectTimeoutError()) +} + +module.exports = buildConnector + + +/***/ }), + +/***/ 735: +/***/ ((module) => { + +"use strict"; + + +/** @type {Record} */ +const headerNameLowerCasedRecord = {} + +// https://developer.mozilla.org/docs/Web/HTTP/Headers +const wellknownHeaderNames = [ + 'Accept', + 'Accept-Encoding', + 'Accept-Language', + 'Accept-Ranges', + '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', + 'Age', + 'Allow', + 'Alt-Svc', + 'Alt-Used', + 'Authorization', + 'Cache-Control', + 'Clear-Site-Data', + 'Connection', + 'Content-Disposition', + 'Content-Encoding', + 'Content-Language', + 'Content-Length', + 'Content-Location', + 'Content-Range', + 'Content-Security-Policy', + 'Content-Security-Policy-Report-Only', + 'Content-Type', + 'Cookie', + 'Cross-Origin-Embedder-Policy', + 'Cross-Origin-Opener-Policy', + 'Cross-Origin-Resource-Policy', + 'Date', + 'Device-Memory', + 'Downlink', + 'ECT', + 'ETag', + 'Expect', + 'Expect-CT', + 'Expires', + 'Forwarded', + 'From', + 'Host', + 'If-Match', + 'If-Modified-Since', + 'If-None-Match', + 'If-Range', + 'If-Unmodified-Since', + 'Keep-Alive', + 'Last-Modified', + 'Link', + 'Location', + 'Max-Forwards', + 'Origin', + 'Permissions-Policy', + 'Pragma', + 'Proxy-Authenticate', + 'Proxy-Authorization', + 'RTT', + 'Range', + 'Referer', + 'Referrer-Policy', + 'Refresh', + 'Retry-After', + 'Sec-WebSocket-Accept', + 'Sec-WebSocket-Extensions', + 'Sec-WebSocket-Key', + 'Sec-WebSocket-Protocol', + 'Sec-WebSocket-Version', + 'Server', + 'Server-Timing', + 'Service-Worker-Allowed', + 'Service-Worker-Navigation-Preload', + 'Set-Cookie', + 'SourceMap', + 'Strict-Transport-Security', + 'Supports-Loading-Mode', + 'TE', + 'Timing-Allow-Origin', + 'Trailer', + 'Transfer-Encoding', + 'Upgrade', + 'Upgrade-Insecure-Requests', + 'User-Agent', + 'Vary', + 'Via', + 'WWW-Authenticate', + 'X-Content-Type-Options', + 'X-DNS-Prefetch-Control', + 'X-Frame-Options', + 'X-Permitted-Cross-Domain-Policies', + 'X-Powered-By', + 'X-Requested-With', + 'X-XSS-Protection' +] + +for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = wellknownHeaderNames[i] + const lowerCasedKey = key.toLowerCase() + headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = + lowerCasedKey +} + +// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. +Object.setPrototypeOf(headerNameLowerCasedRecord, null) + +module.exports = { + wellknownHeaderNames, + headerNameLowerCasedRecord +} + + +/***/ }), + +/***/ 8707: +/***/ ((module) => { + +"use strict"; + + +class UndiciError extends Error { + constructor (message) { + super(message) + this.name = 'UndiciError' + this.code = 'UND_ERR' + } +} + +class ConnectTimeoutError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, ConnectTimeoutError) + this.name = 'ConnectTimeoutError' + this.message = message || 'Connect Timeout Error' + this.code = 'UND_ERR_CONNECT_TIMEOUT' + } +} + +class HeadersTimeoutError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, HeadersTimeoutError) + this.name = 'HeadersTimeoutError' + this.message = message || 'Headers Timeout Error' + this.code = 'UND_ERR_HEADERS_TIMEOUT' + } +} + +class HeadersOverflowError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, HeadersOverflowError) + this.name = 'HeadersOverflowError' + this.message = message || 'Headers Overflow Error' + this.code = 'UND_ERR_HEADERS_OVERFLOW' + } +} + +class BodyTimeoutError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, BodyTimeoutError) + this.name = 'BodyTimeoutError' + this.message = message || 'Body Timeout Error' + this.code = 'UND_ERR_BODY_TIMEOUT' + } +} + +class ResponseStatusCodeError extends UndiciError { + constructor (message, statusCode, headers, body) { + super(message) + Error.captureStackTrace(this, ResponseStatusCodeError) + this.name = 'ResponseStatusCodeError' + this.message = message || 'Response Status Code Error' + this.code = 'UND_ERR_RESPONSE_STATUS_CODE' + this.body = body + this.status = statusCode + this.statusCode = statusCode + this.headers = headers + } +} + +class InvalidArgumentError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, InvalidArgumentError) + this.name = 'InvalidArgumentError' + this.message = message || 'Invalid Argument Error' + this.code = 'UND_ERR_INVALID_ARG' + } +} + +class InvalidReturnValueError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, InvalidReturnValueError) + this.name = 'InvalidReturnValueError' + this.message = message || 'Invalid Return Value Error' + this.code = 'UND_ERR_INVALID_RETURN_VALUE' + } +} + +class RequestAbortedError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, RequestAbortedError) + this.name = 'AbortError' + this.message = message || 'Request aborted' + this.code = 'UND_ERR_ABORTED' + } +} + +class InformationalError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, InformationalError) + this.name = 'InformationalError' + this.message = message || 'Request information' + this.code = 'UND_ERR_INFO' + } +} + +class RequestContentLengthMismatchError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, RequestContentLengthMismatchError) + this.name = 'RequestContentLengthMismatchError' + this.message = message || 'Request body length does not match content-length header' + this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH' + } +} + +class ResponseContentLengthMismatchError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, ResponseContentLengthMismatchError) + this.name = 'ResponseContentLengthMismatchError' + this.message = message || 'Response body length does not match content-length header' + this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH' + } +} + +class ClientDestroyedError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, ClientDestroyedError) + this.name = 'ClientDestroyedError' + this.message = message || 'The client is destroyed' + this.code = 'UND_ERR_DESTROYED' + } +} + +class ClientClosedError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, ClientClosedError) + this.name = 'ClientClosedError' + this.message = message || 'The client is closed' + this.code = 'UND_ERR_CLOSED' + } +} + +class SocketError extends UndiciError { + constructor (message, socket) { + super(message) + Error.captureStackTrace(this, SocketError) + this.name = 'SocketError' + this.message = message || 'Socket error' + this.code = 'UND_ERR_SOCKET' + this.socket = socket + } +} + +class NotSupportedError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, NotSupportedError) + this.name = 'NotSupportedError' + this.message = message || 'Not supported error' + this.code = 'UND_ERR_NOT_SUPPORTED' + } +} + +class BalancedPoolMissingUpstreamError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, NotSupportedError) + this.name = 'MissingUpstreamError' + this.message = message || 'No upstream has been added to the BalancedPool' + this.code = 'UND_ERR_BPL_MISSING_UPSTREAM' + } +} + +class HTTPParserError extends Error { + constructor (message, code, data) { + super(message) + Error.captureStackTrace(this, HTTPParserError) + this.name = 'HTTPParserError' + this.code = code ? `HPE_${code}` : undefined + this.data = data ? data.toString() : undefined + } +} + +class ResponseExceededMaxSizeError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, ResponseExceededMaxSizeError) + this.name = 'ResponseExceededMaxSizeError' + this.message = message || 'Response content exceeded max size' + this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE' + } +} + +class RequestRetryError extends UndiciError { + constructor (message, code, { headers, data }) { + super(message) + Error.captureStackTrace(this, RequestRetryError) + this.name = 'RequestRetryError' + this.message = message || 'Request retry error' + this.code = 'UND_ERR_REQ_RETRY' + this.statusCode = code + this.data = data + this.headers = headers + } +} + +module.exports = { + HTTPParserError, + UndiciError, + HeadersTimeoutError, + HeadersOverflowError, + BodyTimeoutError, + RequestContentLengthMismatchError, + ConnectTimeoutError, + ResponseStatusCodeError, + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError, + ClientDestroyedError, + ClientClosedError, + InformationalError, + SocketError, + NotSupportedError, + ResponseContentLengthMismatchError, + BalancedPoolMissingUpstreamError, + ResponseExceededMaxSizeError, + RequestRetryError +} + + +/***/ }), + +/***/ 4655: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { + InvalidArgumentError, + NotSupportedError +} = __nccwpck_require__(8707) +const assert = __nccwpck_require__(2613) +const { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = __nccwpck_require__(6443) +const util = __nccwpck_require__(3440) + +// tokenRegExp and headerCharRegex have been lifted from +// https://github.com/nodejs/node/blob/main/lib/_http_common.js + +/** + * Verifies that the given val is a valid HTTP token + * per the rules defined in RFC 7230 + * See https://tools.ietf.org/html/rfc7230#section-3.2.6 + */ +const tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/ + +/** + * Matches if val contains an invalid field-vchar + * field-value = *( field-content / obs-fold ) + * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] + * field-vchar = VCHAR / obs-text + */ +const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/ + +// Verifies that a given path is valid does not contain control chars \x00 to \x20 +const invalidPathRegex = /[^\u0021-\u00ff]/ + +const kHandler = Symbol('handler') + +const channels = {} + +let extractBody + +try { + const diagnosticsChannel = __nccwpck_require__(1637) + channels.create = diagnosticsChannel.channel('undici:request:create') + channels.bodySent = diagnosticsChannel.channel('undici:request:bodySent') + channels.headers = diagnosticsChannel.channel('undici:request:headers') + channels.trailers = diagnosticsChannel.channel('undici:request:trailers') + channels.error = diagnosticsChannel.channel('undici:request:error') +} catch { + channels.create = { hasSubscribers: false } + channels.bodySent = { hasSubscribers: false } + channels.headers = { hasSubscribers: false } + channels.trailers = { hasSubscribers: false } + channels.error = { hasSubscribers: false } +} + +class Request { + constructor (origin, { + path, + method, + body, + headers, + query, + idempotent, + blocking, + upgrade, + headersTimeout, + bodyTimeout, + reset, + throwOnError, + expectContinue + }, handler) { + if (typeof path !== 'string') { + throw new InvalidArgumentError('path must be a string') + } else if ( + path[0] !== '/' && + !(path.startsWith('http://') || path.startsWith('https://')) && + method !== 'CONNECT' + ) { + throw new InvalidArgumentError('path must be an absolute URL or start with a slash') + } else if (invalidPathRegex.exec(path) !== null) { + throw new InvalidArgumentError('invalid request path') + } + + if (typeof method !== 'string') { + throw new InvalidArgumentError('method must be a string') + } else if (tokenRegExp.exec(method) === null) { + throw new InvalidArgumentError('invalid request method') + } + + if (upgrade && typeof upgrade !== 'string') { + throw new InvalidArgumentError('upgrade must be a string') + } + + if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError('invalid headersTimeout') + } + + if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError('invalid bodyTimeout') + } + + if (reset != null && typeof reset !== 'boolean') { + throw new InvalidArgumentError('invalid reset') + } + + if (expectContinue != null && typeof expectContinue !== 'boolean') { + throw new InvalidArgumentError('invalid expectContinue') + } + + this.headersTimeout = headersTimeout + + this.bodyTimeout = bodyTimeout + + this.throwOnError = throwOnError === true + + this.method = method + + this.abort = null + + if (body == null) { + this.body = null + } else if (util.isStream(body)) { + this.body = body + + const rState = this.body._readableState + if (!rState || !rState.autoDestroy) { + this.endHandler = function autoDestroy () { + util.destroy(this) + } + this.body.on('end', this.endHandler) + } + + this.errorHandler = err => { + if (this.abort) { + this.abort(err) + } else { + this.error = err + } + } + this.body.on('error', this.errorHandler) + } else if (util.isBuffer(body)) { + this.body = body.byteLength ? body : null + } else if (ArrayBuffer.isView(body)) { + this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null + } else if (body instanceof ArrayBuffer) { + this.body = body.byteLength ? Buffer.from(body) : null + } else if (typeof body === 'string') { + this.body = body.length ? Buffer.from(body) : null + } else if (util.isFormDataLike(body) || util.isIterable(body) || util.isBlobLike(body)) { + this.body = body + } else { + throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable') + } + + this.completed = false + + this.aborted = false + + this.upgrade = upgrade || null + + this.path = query ? util.buildURL(path, query) : path + + this.origin = origin + + this.idempotent = idempotent == null + ? method === 'HEAD' || method === 'GET' + : idempotent + + this.blocking = blocking == null ? false : blocking + + this.reset = reset == null ? null : reset + + this.host = null + + this.contentLength = null + + this.contentType = null + + this.headers = '' + + // Only for H2 + this.expectContinue = expectContinue != null ? expectContinue : false + + if (Array.isArray(headers)) { + if (headers.length % 2 !== 0) { + throw new InvalidArgumentError('headers array must be even') + } + for (let i = 0; i < headers.length; i += 2) { + processHeader(this, headers[i], headers[i + 1]) + } + } else if (headers && typeof headers === 'object') { + const keys = Object.keys(headers) + for (let i = 0; i < keys.length; i++) { + const key = keys[i] + processHeader(this, key, headers[key]) + } + } else if (headers != null) { + throw new InvalidArgumentError('headers must be an object or an array') + } + + if (util.isFormDataLike(this.body)) { + if (util.nodeMajor < 16 || (util.nodeMajor === 16 && util.nodeMinor < 8)) { + throw new InvalidArgumentError('Form-Data bodies are only supported in node v16.8 and newer.') + } + + if (!extractBody) { + extractBody = (__nccwpck_require__(8923).extractBody) + } + + const [bodyStream, contentType] = extractBody(body) + if (this.contentType == null) { + this.contentType = contentType + this.headers += `content-type: ${contentType}\r\n` + } + this.body = bodyStream.stream + this.contentLength = bodyStream.length + } else if (util.isBlobLike(body) && this.contentType == null && body.type) { + this.contentType = body.type + this.headers += `content-type: ${body.type}\r\n` + } + + util.validateHandler(handler, method, upgrade) + + this.servername = util.getServerName(this.host) + + this[kHandler] = handler + + if (channels.create.hasSubscribers) { + channels.create.publish({ request: this }) + } + } + + onBodySent (chunk) { + if (this[kHandler].onBodySent) { + try { + return this[kHandler].onBodySent(chunk) + } catch (err) { + this.abort(err) + } + } + } + + onRequestSent () { + if (channels.bodySent.hasSubscribers) { + channels.bodySent.publish({ request: this }) + } + + if (this[kHandler].onRequestSent) { + try { + return this[kHandler].onRequestSent() + } catch (err) { + this.abort(err) + } + } + } + + onConnect (abort) { + assert(!this.aborted) + assert(!this.completed) + + if (this.error) { + abort(this.error) + } else { + this.abort = abort + return this[kHandler].onConnect(abort) + } + } + + onHeaders (statusCode, headers, resume, statusText) { + assert(!this.aborted) + assert(!this.completed) + + if (channels.headers.hasSubscribers) { + channels.headers.publish({ request: this, response: { statusCode, headers, statusText } }) + } + + try { + return this[kHandler].onHeaders(statusCode, headers, resume, statusText) + } catch (err) { + this.abort(err) + } + } + + onData (chunk) { + assert(!this.aborted) + assert(!this.completed) + + try { + return this[kHandler].onData(chunk) + } catch (err) { + this.abort(err) + return false + } + } + + onUpgrade (statusCode, headers, socket) { + assert(!this.aborted) + assert(!this.completed) + + return this[kHandler].onUpgrade(statusCode, headers, socket) + } + + onComplete (trailers) { + this.onFinally() + + assert(!this.aborted) + + this.completed = true + if (channels.trailers.hasSubscribers) { + channels.trailers.publish({ request: this, trailers }) + } + + try { + return this[kHandler].onComplete(trailers) + } catch (err) { + // TODO (fix): This might be a bad idea? + this.onError(err) + } + } + + onError (error) { + this.onFinally() + + if (channels.error.hasSubscribers) { + channels.error.publish({ request: this, error }) + } + + if (this.aborted) { + return + } + this.aborted = true + + return this[kHandler].onError(error) + } + + onFinally () { + if (this.errorHandler) { + this.body.off('error', this.errorHandler) + this.errorHandler = null + } + + if (this.endHandler) { + this.body.off('end', this.endHandler) + this.endHandler = null + } + } + + // TODO: adjust to support H2 + addHeader (key, value) { + processHeader(this, key, value) + return this + } + + static [kHTTP1BuildRequest] (origin, opts, handler) { + // TODO: Migrate header parsing here, to make Requests + // HTTP agnostic + return new Request(origin, opts, handler) + } + + static [kHTTP2BuildRequest] (origin, opts, handler) { + const headers = opts.headers + opts = { ...opts, headers: null } + + const request = new Request(origin, opts, handler) + + request.headers = {} + + if (Array.isArray(headers)) { + if (headers.length % 2 !== 0) { + throw new InvalidArgumentError('headers array must be even') + } + for (let i = 0; i < headers.length; i += 2) { + processHeader(request, headers[i], headers[i + 1], true) + } + } else if (headers && typeof headers === 'object') { + const keys = Object.keys(headers) + for (let i = 0; i < keys.length; i++) { + const key = keys[i] + processHeader(request, key, headers[key], true) + } + } else if (headers != null) { + throw new InvalidArgumentError('headers must be an object or an array') + } + + return request + } + + static [kHTTP2CopyHeaders] (raw) { + const rawHeaders = raw.split('\r\n') + const headers = {} + + for (const header of rawHeaders) { + const [key, value] = header.split(': ') + + if (value == null || value.length === 0) continue + + if (headers[key]) headers[key] += `,${value}` + else headers[key] = value + } + + return headers + } +} + +function processHeaderValue (key, val, skipAppend) { + if (val && typeof val === 'object') { + throw new InvalidArgumentError(`invalid ${key} header`) + } + + val = val != null ? `${val}` : '' + + if (headerCharRegex.exec(val) !== null) { + throw new InvalidArgumentError(`invalid ${key} header`) + } + + return skipAppend ? val : `${key}: ${val}\r\n` +} + +function processHeader (request, key, val, skipAppend = false) { + if (val && (typeof val === 'object' && !Array.isArray(val))) { + throw new InvalidArgumentError(`invalid ${key} header`) + } else if (val === undefined) { + return + } + + if ( + request.host === null && + key.length === 4 && + key.toLowerCase() === 'host' + ) { + if (headerCharRegex.exec(val) !== null) { + throw new InvalidArgumentError(`invalid ${key} header`) + } + // Consumed by Client + request.host = val + } else if ( + request.contentLength === null && + key.length === 14 && + key.toLowerCase() === 'content-length' + ) { + request.contentLength = parseInt(val, 10) + if (!Number.isFinite(request.contentLength)) { + throw new InvalidArgumentError('invalid content-length header') + } + } else if ( + request.contentType === null && + key.length === 12 && + key.toLowerCase() === 'content-type' + ) { + request.contentType = val + if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend) + else request.headers += processHeaderValue(key, val) + } else if ( + key.length === 17 && + key.toLowerCase() === 'transfer-encoding' + ) { + throw new InvalidArgumentError('invalid transfer-encoding header') + } else if ( + key.length === 10 && + key.toLowerCase() === 'connection' + ) { + const value = typeof val === 'string' ? val.toLowerCase() : null + if (value !== 'close' && value !== 'keep-alive') { + throw new InvalidArgumentError('invalid connection header') + } else if (value === 'close') { + request.reset = true + } + } else if ( + key.length === 10 && + key.toLowerCase() === 'keep-alive' + ) { + throw new InvalidArgumentError('invalid keep-alive header') + } else if ( + key.length === 7 && + key.toLowerCase() === 'upgrade' + ) { + throw new InvalidArgumentError('invalid upgrade header') + } else if ( + key.length === 6 && + key.toLowerCase() === 'expect' + ) { + throw new NotSupportedError('expect header not supported') + } else if (tokenRegExp.exec(key) === null) { + throw new InvalidArgumentError('invalid header key') + } else { + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + if (skipAppend) { + if (request.headers[key]) request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}` + else request.headers[key] = processHeaderValue(key, val[i], skipAppend) + } else { + request.headers += processHeaderValue(key, val[i]) + } + } + } else { + if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend) + else request.headers += processHeaderValue(key, val) + } + } +} + +module.exports = Request + + +/***/ }), + +/***/ 6443: +/***/ ((module) => { + +module.exports = { + kClose: Symbol('close'), + kDestroy: Symbol('destroy'), + kDispatch: Symbol('dispatch'), + kUrl: Symbol('url'), + kWriting: Symbol('writing'), + kResuming: Symbol('resuming'), + kQueue: Symbol('queue'), + kConnect: Symbol('connect'), + kConnecting: Symbol('connecting'), + kHeadersList: Symbol('headers list'), + kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'), + kKeepAliveMaxTimeout: Symbol('max keep alive timeout'), + kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'), + kKeepAliveTimeoutValue: Symbol('keep alive timeout'), + kKeepAlive: Symbol('keep alive'), + kHeadersTimeout: Symbol('headers timeout'), + kBodyTimeout: Symbol('body timeout'), + kServerName: Symbol('server name'), + kLocalAddress: Symbol('local address'), + kHost: Symbol('host'), + kNoRef: Symbol('no ref'), + kBodyUsed: Symbol('used'), + kRunning: Symbol('running'), + kBlocking: Symbol('blocking'), + kPending: Symbol('pending'), + kSize: Symbol('size'), + kBusy: Symbol('busy'), + kQueued: Symbol('queued'), + kFree: Symbol('free'), + kConnected: Symbol('connected'), + kClosed: Symbol('closed'), + kNeedDrain: Symbol('need drain'), + kReset: Symbol('reset'), + kDestroyed: Symbol.for('nodejs.stream.destroyed'), + kMaxHeadersSize: Symbol('max headers size'), + kRunningIdx: Symbol('running index'), + kPendingIdx: Symbol('pending index'), + kError: Symbol('error'), + kClients: Symbol('clients'), + kClient: Symbol('client'), + kParser: Symbol('parser'), + kOnDestroyed: Symbol('destroy callbacks'), + kPipelining: Symbol('pipelining'), + kSocket: Symbol('socket'), + kHostHeader: Symbol('host header'), + kConnector: Symbol('connector'), + kStrictContentLength: Symbol('strict content length'), + kMaxRedirections: Symbol('maxRedirections'), + kMaxRequests: Symbol('maxRequestsPerClient'), + kProxy: Symbol('proxy agent options'), + kCounter: Symbol('socket request counter'), + kInterceptors: Symbol('dispatch interceptors'), + kMaxResponseSize: Symbol('max response size'), + kHTTP2Session: Symbol('http2Session'), + kHTTP2SessionState: Symbol('http2Session state'), + kHTTP2BuildRequest: Symbol('http2 build request'), + kHTTP1BuildRequest: Symbol('http1 build request'), + kHTTP2CopyHeaders: Symbol('http2 copy headers'), + kHTTPConnVersion: Symbol('http connection version'), + kRetryHandlerDefaultRetry: Symbol('retry agent default retry'), + kConstruct: Symbol('constructable') +} + + +/***/ }), + +/***/ 3440: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const assert = __nccwpck_require__(2613) +const { kDestroyed, kBodyUsed } = __nccwpck_require__(6443) +const { IncomingMessage } = __nccwpck_require__(8611) +const stream = __nccwpck_require__(2203) +const net = __nccwpck_require__(9278) +const { InvalidArgumentError } = __nccwpck_require__(8707) +const { Blob } = __nccwpck_require__(181) +const nodeUtil = __nccwpck_require__(9023) +const { stringify } = __nccwpck_require__(3480) +const { headerNameLowerCasedRecord } = __nccwpck_require__(735) + +const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v)) + +function nop () {} + +function isStream (obj) { + return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function' +} + +// based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License) +function isBlobLike (object) { + return (Blob && object instanceof Blob) || ( + object && + typeof object === 'object' && + (typeof object.stream === 'function' || + typeof object.arrayBuffer === 'function') && + /^(Blob|File)$/.test(object[Symbol.toStringTag]) + ) +} + +function buildURL (url, queryParams) { + if (url.includes('?') || url.includes('#')) { + throw new Error('Query params cannot be passed when url already contains "?" or "#".') + } + + const stringified = stringify(queryParams) + + if (stringified) { + url += '?' + stringified + } + + return url +} + +function parseURL (url) { + if (typeof url === 'string') { + url = new URL(url) + + if (!/^https?:/.test(url.origin || url.protocol)) { + throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.') + } + + return url + } + + if (!url || typeof url !== 'object') { + throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.') + } + + if (!/^https?:/.test(url.origin || url.protocol)) { + throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.') + } + + if (!(url instanceof URL)) { + if (url.port != null && url.port !== '' && !Number.isFinite(parseInt(url.port))) { + throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.') + } + + if (url.path != null && typeof url.path !== 'string') { + throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.') + } + + if (url.pathname != null && typeof url.pathname !== 'string') { + throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.') + } + + if (url.hostname != null && typeof url.hostname !== 'string') { + throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.') + } + + if (url.origin != null && typeof url.origin !== 'string') { + throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.') + } + + const port = url.port != null + ? url.port + : (url.protocol === 'https:' ? 443 : 80) + let origin = url.origin != null + ? url.origin + : `${url.protocol}//${url.hostname}:${port}` + let path = url.path != null + ? url.path + : `${url.pathname || ''}${url.search || ''}` + + if (origin.endsWith('/')) { + origin = origin.substring(0, origin.length - 1) + } + + if (path && !path.startsWith('/')) { + path = `/${path}` + } + // new URL(path, origin) is unsafe when `path` contains an absolute URL + // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL: + // If first parameter is a relative URL, second param is required, and will be used as the base URL. + // If first parameter is an absolute URL, a given second param will be ignored. + url = new URL(origin + path) + } + + return url +} + +function parseOrigin (url) { + url = parseURL(url) + + if (url.pathname !== '/' || url.search || url.hash) { + throw new InvalidArgumentError('invalid url') + } + + return url +} + +function getHostname (host) { + if (host[0] === '[') { + const idx = host.indexOf(']') + + assert(idx !== -1) + return host.substring(1, idx) + } + + const idx = host.indexOf(':') + if (idx === -1) return host + + return host.substring(0, idx) +} + +// IP addresses are not valid server names per RFC6066 +// > Currently, the only server names supported are DNS hostnames +function getServerName (host) { + if (!host) { + return null + } + + assert.strictEqual(typeof host, 'string') + + const servername = getHostname(host) + if (net.isIP(servername)) { + return '' + } + + return servername +} + +function deepClone (obj) { + return JSON.parse(JSON.stringify(obj)) +} + +function isAsyncIterable (obj) { + return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function') +} + +function isIterable (obj) { + return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function')) +} + +function bodyLength (body) { + if (body == null) { + return 0 + } else if (isStream(body)) { + const state = body._readableState + return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) + ? state.length + : null + } else if (isBlobLike(body)) { + return body.size != null ? body.size : null + } else if (isBuffer(body)) { + return body.byteLength + } + + return null +} + +function isDestroyed (stream) { + return !stream || !!(stream.destroyed || stream[kDestroyed]) +} + +function isReadableAborted (stream) { + const state = stream && stream._readableState + return isDestroyed(stream) && state && !state.endEmitted +} + +function destroy (stream, err) { + if (stream == null || !isStream(stream) || isDestroyed(stream)) { + return + } + + if (typeof stream.destroy === 'function') { + if (Object.getPrototypeOf(stream).constructor === IncomingMessage) { + // See: https://github.com/nodejs/node/pull/38505/files + stream.socket = null + } + + stream.destroy(err) + } else if (err) { + process.nextTick((stream, err) => { + stream.emit('error', err) + }, stream, err) + } + + if (stream.destroyed !== true) { + stream[kDestroyed] = true + } +} + +const KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/ +function parseKeepAliveTimeout (val) { + const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR) + return m ? parseInt(m[1], 10) * 1000 : null +} + +/** + * Retrieves a header name and returns its lowercase value. + * @param {string | Buffer} value Header name + * @returns {string} + */ +function headerNameToString (value) { + return headerNameLowerCasedRecord[value] || value.toLowerCase() +} + +function parseHeaders (headers, obj = {}) { + // For H2 support + if (!Array.isArray(headers)) return headers + + for (let i = 0; i < headers.length; i += 2) { + const key = headers[i].toString().toLowerCase() + let val = obj[key] + + if (!val) { + if (Array.isArray(headers[i + 1])) { + obj[key] = headers[i + 1].map(x => x.toString('utf8')) + } else { + obj[key] = headers[i + 1].toString('utf8') + } + } else { + if (!Array.isArray(val)) { + val = [val] + obj[key] = val + } + val.push(headers[i + 1].toString('utf8')) + } + } + + // See https://github.com/nodejs/node/pull/46528 + if ('content-length' in obj && 'content-disposition' in obj) { + obj['content-disposition'] = Buffer.from(obj['content-disposition']).toString('latin1') + } + + return obj +} + +function parseRawHeaders (headers) { + const ret = [] + let hasContentLength = false + let contentDispositionIdx = -1 + + for (let n = 0; n < headers.length; n += 2) { + const key = headers[n + 0].toString() + const val = headers[n + 1].toString('utf8') + + if (key.length === 14 && (key === 'content-length' || key.toLowerCase() === 'content-length')) { + ret.push(key, val) + hasContentLength = true + } else if (key.length === 19 && (key === 'content-disposition' || key.toLowerCase() === 'content-disposition')) { + contentDispositionIdx = ret.push(key, val) - 1 + } else { + ret.push(key, val) + } + } + + // See https://github.com/nodejs/node/pull/46528 + if (hasContentLength && contentDispositionIdx !== -1) { + ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString('latin1') + } + + return ret +} + +function isBuffer (buffer) { + // See, https://github.com/mcollina/undici/pull/319 + return buffer instanceof Uint8Array || Buffer.isBuffer(buffer) +} + +function validateHandler (handler, method, upgrade) { + if (!handler || typeof handler !== 'object') { + throw new InvalidArgumentError('handler must be an object') + } + + if (typeof handler.onConnect !== 'function') { + throw new InvalidArgumentError('invalid onConnect method') + } + + if (typeof handler.onError !== 'function') { + throw new InvalidArgumentError('invalid onError method') + } + + if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) { + throw new InvalidArgumentError('invalid onBodySent method') + } + + if (upgrade || method === 'CONNECT') { + if (typeof handler.onUpgrade !== 'function') { + throw new InvalidArgumentError('invalid onUpgrade method') + } + } else { + if (typeof handler.onHeaders !== 'function') { + throw new InvalidArgumentError('invalid onHeaders method') + } + + if (typeof handler.onData !== 'function') { + throw new InvalidArgumentError('invalid onData method') + } + + if (typeof handler.onComplete !== 'function') { + throw new InvalidArgumentError('invalid onComplete method') + } + } +} + +// A body is disturbed if it has been read from and it cannot +// be re-used without losing state or data. +function isDisturbed (body) { + return !!(body && ( + stream.isDisturbed + ? stream.isDisturbed(body) || body[kBodyUsed] // TODO (fix): Why is body[kBodyUsed] needed? + : body[kBodyUsed] || + body.readableDidRead || + (body._readableState && body._readableState.dataEmitted) || + isReadableAborted(body) + )) +} + +function isErrored (body) { + return !!(body && ( + stream.isErrored + ? stream.isErrored(body) + : /state: 'errored'/.test(nodeUtil.inspect(body) + ))) +} + +function isReadable (body) { + return !!(body && ( + stream.isReadable + ? stream.isReadable(body) + : /state: 'readable'/.test(nodeUtil.inspect(body) + ))) +} + +function getSocketInfo (socket) { + return { + localAddress: socket.localAddress, + localPort: socket.localPort, + remoteAddress: socket.remoteAddress, + remotePort: socket.remotePort, + remoteFamily: socket.remoteFamily, + timeout: socket.timeout, + bytesWritten: socket.bytesWritten, + bytesRead: socket.bytesRead + } +} + +async function * convertIterableToBuffer (iterable) { + for await (const chunk of iterable) { + yield Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk) + } +} + +let ReadableStream +function ReadableStreamFrom (iterable) { + if (!ReadableStream) { + ReadableStream = (__nccwpck_require__(3774).ReadableStream) + } + + if (ReadableStream.from) { + return ReadableStream.from(convertIterableToBuffer(iterable)) + } + + let iterator + return new ReadableStream( + { + async start () { + iterator = iterable[Symbol.asyncIterator]() + }, + async pull (controller) { + const { done, value } = await iterator.next() + if (done) { + queueMicrotask(() => { + controller.close() + }) + } else { + const buf = Buffer.isBuffer(value) ? value : Buffer.from(value) + controller.enqueue(new Uint8Array(buf)) + } + return controller.desiredSize > 0 + }, + async cancel (reason) { + await iterator.return() + } + }, + 0 + ) +} + +// The chunk should be a FormData instance and contains +// all the required methods. +function isFormDataLike (object) { + return ( + object && + typeof object === 'object' && + typeof object.append === 'function' && + typeof object.delete === 'function' && + typeof object.get === 'function' && + typeof object.getAll === 'function' && + typeof object.has === 'function' && + typeof object.set === 'function' && + object[Symbol.toStringTag] === 'FormData' + ) +} + +function throwIfAborted (signal) { + if (!signal) { return } + if (typeof signal.throwIfAborted === 'function') { + signal.throwIfAborted() + } else { + if (signal.aborted) { + // DOMException not available < v17.0.0 + const err = new Error('The operation was aborted') + err.name = 'AbortError' + throw err + } + } +} + +function addAbortListener (signal, listener) { + if ('addEventListener' in signal) { + signal.addEventListener('abort', listener, { once: true }) + return () => signal.removeEventListener('abort', listener) + } + signal.addListener('abort', listener) + return () => signal.removeListener('abort', listener) +} + +const hasToWellFormed = !!String.prototype.toWellFormed + +/** + * @param {string} val + */ +function toUSVString (val) { + if (hasToWellFormed) { + return `${val}`.toWellFormed() + } else if (nodeUtil.toUSVString) { + return nodeUtil.toUSVString(val) + } + + return `${val}` +} + +// Parsed accordingly to RFC 9110 +// https://www.rfc-editor.org/rfc/rfc9110#field.content-range +function parseRangeHeader (range) { + if (range == null || range === '') return { start: 0, end: null, size: null } + + const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null + return m + ? { + start: parseInt(m[1]), + end: m[2] ? parseInt(m[2]) : null, + size: m[3] ? parseInt(m[3]) : null + } + : null +} + +const kEnumerableProperty = Object.create(null) +kEnumerableProperty.enumerable = true + +module.exports = { + kEnumerableProperty, + nop, + isDisturbed, + isErrored, + isReadable, + toUSVString, + isReadableAborted, + isBlobLike, + parseOrigin, + parseURL, + getServerName, + isStream, + isIterable, + isAsyncIterable, + isDestroyed, + headerNameToString, + parseRawHeaders, + parseHeaders, + parseKeepAliveTimeout, + destroy, + bodyLength, + deepClone, + ReadableStreamFrom, + isBuffer, + validateHandler, + getSocketInfo, + isFormDataLike, + buildURL, + throwIfAborted, + addAbortListener, + parseRangeHeader, + nodeMajor, + nodeMinor, + nodeHasAutoSelectFamily: nodeMajor > 18 || (nodeMajor === 18 && nodeMinor >= 13), + safeHTTPMethods: ['GET', 'HEAD', 'OPTIONS', 'TRACE'] +} + + +/***/ }), + +/***/ 1: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const Dispatcher = __nccwpck_require__(992) +const { + ClientDestroyedError, + ClientClosedError, + InvalidArgumentError +} = __nccwpck_require__(8707) +const { kDestroy, kClose, kDispatch, kInterceptors } = __nccwpck_require__(6443) + +const kDestroyed = Symbol('destroyed') +const kClosed = Symbol('closed') +const kOnDestroyed = Symbol('onDestroyed') +const kOnClosed = Symbol('onClosed') +const kInterceptedDispatch = Symbol('Intercepted Dispatch') + +class DispatcherBase extends Dispatcher { + constructor () { + super() + + this[kDestroyed] = false + this[kOnDestroyed] = null + this[kClosed] = false + this[kOnClosed] = [] + } + + get destroyed () { + return this[kDestroyed] + } + + get closed () { + return this[kClosed] + } + + get interceptors () { + return this[kInterceptors] + } + + set interceptors (newInterceptors) { + if (newInterceptors) { + for (let i = newInterceptors.length - 1; i >= 0; i--) { + const interceptor = this[kInterceptors][i] + if (typeof interceptor !== 'function') { + throw new InvalidArgumentError('interceptor must be an function') + } + } + } + + this[kInterceptors] = newInterceptors + } + + close (callback) { + if (callback === undefined) { + return new Promise((resolve, reject) => { + this.close((err, data) => { + return err ? reject(err) : resolve(data) + }) + }) + } + + if (typeof callback !== 'function') { + throw new InvalidArgumentError('invalid callback') + } + + if (this[kDestroyed]) { + queueMicrotask(() => callback(new ClientDestroyedError(), null)) + return + } + + if (this[kClosed]) { + if (this[kOnClosed]) { + this[kOnClosed].push(callback) + } else { + queueMicrotask(() => callback(null, null)) + } + return + } + + this[kClosed] = true + this[kOnClosed].push(callback) + + const onClosed = () => { + const callbacks = this[kOnClosed] + this[kOnClosed] = null + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null) + } + } + + // Should not error. + this[kClose]() + .then(() => this.destroy()) + .then(() => { + queueMicrotask(onClosed) + }) + } + + destroy (err, callback) { + if (typeof err === 'function') { + callback = err + err = null + } + + if (callback === undefined) { + return new Promise((resolve, reject) => { + this.destroy(err, (err, data) => { + return err ? /* istanbul ignore next: should never error */ reject(err) : resolve(data) + }) + }) + } + + if (typeof callback !== 'function') { + throw new InvalidArgumentError('invalid callback') + } + + if (this[kDestroyed]) { + if (this[kOnDestroyed]) { + this[kOnDestroyed].push(callback) + } else { + queueMicrotask(() => callback(null, null)) + } + return + } + + if (!err) { + err = new ClientDestroyedError() + } + + this[kDestroyed] = true + this[kOnDestroyed] = this[kOnDestroyed] || [] + this[kOnDestroyed].push(callback) + + const onDestroyed = () => { + const callbacks = this[kOnDestroyed] + this[kOnDestroyed] = null + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null) + } + } + + // Should not error. + this[kDestroy](err).then(() => { + queueMicrotask(onDestroyed) + }) + } + + [kInterceptedDispatch] (opts, handler) { + if (!this[kInterceptors] || this[kInterceptors].length === 0) { + this[kInterceptedDispatch] = this[kDispatch] + return this[kDispatch](opts, handler) + } + + let dispatch = this[kDispatch].bind(this) + for (let i = this[kInterceptors].length - 1; i >= 0; i--) { + dispatch = this[kInterceptors][i](dispatch) + } + this[kInterceptedDispatch] = dispatch + return dispatch(opts, handler) + } + + dispatch (opts, handler) { + if (!handler || typeof handler !== 'object') { + throw new InvalidArgumentError('handler must be an object') + } + + try { + if (!opts || typeof opts !== 'object') { + throw new InvalidArgumentError('opts must be an object.') + } + + if (this[kDestroyed] || this[kOnDestroyed]) { + throw new ClientDestroyedError() + } + + if (this[kClosed]) { + throw new ClientClosedError() + } + + return this[kInterceptedDispatch](opts, handler) + } catch (err) { + if (typeof handler.onError !== 'function') { + throw new InvalidArgumentError('invalid onError method') + } + + handler.onError(err) + + return false + } + } +} + +module.exports = DispatcherBase + + +/***/ }), + +/***/ 992: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const EventEmitter = __nccwpck_require__(4434) + +class Dispatcher extends EventEmitter { + dispatch () { + throw new Error('not implemented') + } + + close () { + throw new Error('not implemented') + } + + destroy () { + throw new Error('not implemented') + } +} + +module.exports = Dispatcher + + +/***/ }), + +/***/ 8923: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const Busboy = __nccwpck_require__(9581) +const util = __nccwpck_require__(3440) +const { + ReadableStreamFrom, + isBlobLike, + isReadableStreamLike, + readableStreamClose, + createDeferredPromise, + fullyReadBody +} = __nccwpck_require__(5523) +const { FormData } = __nccwpck_require__(3073) +const { kState } = __nccwpck_require__(9710) +const { webidl } = __nccwpck_require__(4222) +const { DOMException, structuredClone } = __nccwpck_require__(7326) +const { Blob, File: NativeFile } = __nccwpck_require__(181) +const { kBodyUsed } = __nccwpck_require__(6443) +const assert = __nccwpck_require__(2613) +const { isErrored } = __nccwpck_require__(3440) +const { isUint8Array, isArrayBuffer } = __nccwpck_require__(8253) +const { File: UndiciFile } = __nccwpck_require__(3041) +const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(4322) + +let ReadableStream = globalThis.ReadableStream + +/** @type {globalThis['File']} */ +const File = NativeFile ?? UndiciFile +const textEncoder = new TextEncoder() +const textDecoder = new TextDecoder() + +// https://fetch.spec.whatwg.org/#concept-bodyinit-extract +function extractBody (object, keepalive = false) { + if (!ReadableStream) { + ReadableStream = (__nccwpck_require__(3774).ReadableStream) + } + + // 1. Let stream be null. + let stream = null + + // 2. If object is a ReadableStream object, then set stream to object. + if (object instanceof ReadableStream) { + stream = object + } else if (isBlobLike(object)) { + // 3. Otherwise, if object is a Blob object, set stream to the + // result of running object’s get stream. + stream = object.stream() + } else { + // 4. Otherwise, set stream to a new ReadableStream object, and set + // up stream. + stream = new ReadableStream({ + async pull (controller) { + controller.enqueue( + typeof source === 'string' ? textEncoder.encode(source) : source + ) + queueMicrotask(() => readableStreamClose(controller)) + }, + start () {}, + type: undefined + }) + } + + // 5. Assert: stream is a ReadableStream object. + assert(isReadableStreamLike(stream)) + + // 6. Let action be null. + let action = null + + // 7. Let source be null. + let source = null + + // 8. Let length be null. + let length = null + + // 9. Let type be null. + let type = null + + // 10. Switch on object: + if (typeof object === 'string') { + // Set source to the UTF-8 encoding of object. + // Note: setting source to a Uint8Array here breaks some mocking assumptions. + source = object + + // Set type to `text/plain;charset=UTF-8`. + type = 'text/plain;charset=UTF-8' + } else if (object instanceof URLSearchParams) { + // URLSearchParams + + // spec says to run application/x-www-form-urlencoded on body.list + // this is implemented in Node.js as apart of an URLSearchParams instance toString method + // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490 + // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100 + + // Set source to the result of running the application/x-www-form-urlencoded serializer with object’s list. + source = object.toString() + + // Set type to `application/x-www-form-urlencoded;charset=UTF-8`. + type = 'application/x-www-form-urlencoded;charset=UTF-8' + } else if (isArrayBuffer(object)) { + // BufferSource/ArrayBuffer + + // Set source to a copy of the bytes held by object. + source = new Uint8Array(object.slice()) + } else if (ArrayBuffer.isView(object)) { + // BufferSource/ArrayBufferView + + // Set source to a copy of the bytes held by object. + source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) + } else if (util.isFormDataLike(object)) { + const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` + const prefix = `--${boundary}\r\nContent-Disposition: form-data` + + /*! formdata-polyfill. MIT License. Jimmy Wärting */ + const escape = (str) => + str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22') + const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, '\r\n') + + // Set action to this step: run the multipart/form-data + // encoding algorithm, with object’s entry list and UTF-8. + // - This ensures that the body is immutable and can't be changed afterwords + // - That the content-length is calculated in advance. + // - And that all parts are pre-encoded and ready to be sent. + + const blobParts = [] + const rn = new Uint8Array([13, 10]) // '\r\n' + length = 0 + let hasUnknownSizeValue = false + + for (const [name, value] of object) { + if (typeof value === 'string') { + const chunk = textEncoder.encode(prefix + + `; name="${escape(normalizeLinefeeds(name))}"` + + `\r\n\r\n${normalizeLinefeeds(value)}\r\n`) + blobParts.push(chunk) + length += chunk.byteLength + } else { + const chunk = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + + (value.name ? `; filename="${escape(value.name)}"` : '') + '\r\n' + + `Content-Type: ${ + value.type || 'application/octet-stream' + }\r\n\r\n`) + blobParts.push(chunk, value, rn) + if (typeof value.size === 'number') { + length += chunk.byteLength + value.size + rn.byteLength + } else { + hasUnknownSizeValue = true + } + } + } + + const chunk = textEncoder.encode(`--${boundary}--`) + blobParts.push(chunk) + length += chunk.byteLength + if (hasUnknownSizeValue) { + length = null + } + + // Set source to object. + source = object + + action = async function * () { + for (const part of blobParts) { + if (part.stream) { + yield * part.stream() + } else { + yield part + } + } + } + + // Set type to `multipart/form-data; boundary=`, + // followed by the multipart/form-data boundary string generated + // by the multipart/form-data encoding algorithm. + type = 'multipart/form-data; boundary=' + boundary + } else if (isBlobLike(object)) { + // Blob + + // Set source to object. + source = object + + // Set length to object’s size. + length = object.size + + // If object’s type attribute is not the empty byte sequence, set + // type to its value. + if (object.type) { + type = object.type + } + } else if (typeof object[Symbol.asyncIterator] === 'function') { + // If keepalive is true, then throw a TypeError. + if (keepalive) { + throw new TypeError('keepalive') + } + + // If object is disturbed or locked, then throw a TypeError. + if (util.isDisturbed(object) || object.locked) { + throw new TypeError( + 'Response body object should not be disturbed or locked' + ) + } + + stream = + object instanceof ReadableStream ? object : ReadableStreamFrom(object) + } + + // 11. If source is a byte sequence, then set action to a + // step that returns source and length to source’s length. + if (typeof source === 'string' || util.isBuffer(source)) { + length = Buffer.byteLength(source) + } + + // 12. If action is non-null, then run these steps in in parallel: + if (action != null) { + // Run action. + let iterator + stream = new ReadableStream({ + async start () { + iterator = action(object)[Symbol.asyncIterator]() + }, + async pull (controller) { + const { value, done } = await iterator.next() + if (done) { + // When running action is done, close stream. + queueMicrotask(() => { + controller.close() + }) + } else { + // Whenever one or more bytes are available and stream is not errored, + // enqueue a Uint8Array wrapping an ArrayBuffer containing the available + // bytes into stream. + if (!isErrored(stream)) { + controller.enqueue(new Uint8Array(value)) + } + } + return controller.desiredSize > 0 + }, + async cancel (reason) { + await iterator.return() + }, + type: undefined + }) + } + + // 13. Let body be a body whose stream is stream, source is source, + // and length is length. + const body = { stream, source, length } + + // 14. Return (body, type). + return [body, type] +} + +// https://fetch.spec.whatwg.org/#bodyinit-safely-extract +function safelyExtractBody (object, keepalive = false) { + if (!ReadableStream) { + // istanbul ignore next + ReadableStream = (__nccwpck_require__(3774).ReadableStream) + } + + // To safely extract a body and a `Content-Type` value from + // a byte sequence or BodyInit object object, run these steps: + + // 1. If object is a ReadableStream object, then: + if (object instanceof ReadableStream) { + // Assert: object is neither disturbed nor locked. + // istanbul ignore next + assert(!util.isDisturbed(object), 'The body has already been consumed.') + // istanbul ignore next + assert(!object.locked, 'The stream is locked.') + } + + // 2. Return the results of extracting object. + return extractBody(object, keepalive) +} + +function cloneBody (body) { + // To clone a body body, run these steps: + + // https://fetch.spec.whatwg.org/#concept-body-clone + + // 1. Let « out1, out2 » be the result of teeing body’s stream. + const [out1, out2] = body.stream.tee() + const out2Clone = structuredClone(out2, { transfer: [out2] }) + // This, for whatever reasons, unrefs out2Clone which allows + // the process to exit by itself. + const [, finalClone] = out2Clone.tee() + + // 2. Set body’s stream to out1. + body.stream = out1 + + // 3. Return a body whose stream is out2 and other members are copied from body. + return { + stream: finalClone, + length: body.length, + source: body.source + } +} + +async function * consumeBody (body) { + if (body) { + if (isUint8Array(body)) { + yield body + } else { + const stream = body.stream + + if (util.isDisturbed(stream)) { + throw new TypeError('The body has already been consumed.') + } + + if (stream.locked) { + throw new TypeError('The stream is locked.') + } + + // Compat. + stream[kBodyUsed] = true + + yield * stream + } + } +} + +function throwIfAborted (state) { + if (state.aborted) { + throw new DOMException('The operation was aborted.', 'AbortError') + } +} + +function bodyMixinMethods (instance) { + const methods = { + blob () { + // The blob() method steps are to return the result of + // running consume body with this and the following step + // given a byte sequence bytes: return a Blob whose + // contents are bytes and whose type attribute is this’s + // MIME type. + return specConsumeBody(this, (bytes) => { + let mimeType = bodyMimeType(this) + + if (mimeType === 'failure') { + mimeType = '' + } else if (mimeType) { + mimeType = serializeAMimeType(mimeType) + } + + // Return a Blob whose contents are bytes and type attribute + // is mimeType. + return new Blob([bytes], { type: mimeType }) + }, instance) + }, + + arrayBuffer () { + // The arrayBuffer() method steps are to return the result + // of running consume body with this and the following step + // given a byte sequence bytes: return a new ArrayBuffer + // whose contents are bytes. + return specConsumeBody(this, (bytes) => { + return new Uint8Array(bytes).buffer + }, instance) + }, + + text () { + // The text() method steps are to return the result of running + // consume body with this and UTF-8 decode. + return specConsumeBody(this, utf8DecodeBytes, instance) + }, + + json () { + // The json() method steps are to return the result of running + // consume body with this and parse JSON from bytes. + return specConsumeBody(this, parseJSONFromBytes, instance) + }, + + async formData () { + webidl.brandCheck(this, instance) + + throwIfAborted(this[kState]) + + const contentType = this.headers.get('Content-Type') + + // If mimeType’s essence is "multipart/form-data", then: + if (/multipart\/form-data/.test(contentType)) { + const headers = {} + for (const [key, value] of this.headers) headers[key.toLowerCase()] = value + + const responseFormData = new FormData() + + let busboy + + try { + busboy = new Busboy({ + headers, + preservePath: true + }) + } catch (err) { + throw new DOMException(`${err}`, 'AbortError') + } + + busboy.on('field', (name, value) => { + responseFormData.append(name, value) + }) + busboy.on('file', (name, value, filename, encoding, mimeType) => { + const chunks = [] + + if (encoding === 'base64' || encoding.toLowerCase() === 'base64') { + let base64chunk = '' + + value.on('data', (chunk) => { + base64chunk += chunk.toString().replace(/[\r\n]/gm, '') + + const end = base64chunk.length - base64chunk.length % 4 + chunks.push(Buffer.from(base64chunk.slice(0, end), 'base64')) + + base64chunk = base64chunk.slice(end) + }) + value.on('end', () => { + chunks.push(Buffer.from(base64chunk, 'base64')) + responseFormData.append(name, new File(chunks, filename, { type: mimeType })) + }) + } else { + value.on('data', (chunk) => { + chunks.push(chunk) + }) + value.on('end', () => { + responseFormData.append(name, new File(chunks, filename, { type: mimeType })) + }) + } + }) + + const busboyResolve = new Promise((resolve, reject) => { + busboy.on('finish', resolve) + busboy.on('error', (err) => reject(new TypeError(err))) + }) + + if (this.body !== null) for await (const chunk of consumeBody(this[kState].body)) busboy.write(chunk) + busboy.end() + await busboyResolve + + return responseFormData + } else if (/application\/x-www-form-urlencoded/.test(contentType)) { + // Otherwise, if mimeType’s essence is "application/x-www-form-urlencoded", then: + + // 1. Let entries be the result of parsing bytes. + let entries + try { + let text = '' + // application/x-www-form-urlencoded parser will keep the BOM. + // https://url.spec.whatwg.org/#concept-urlencoded-parser + // Note that streaming decoder is stateful and cannot be reused + const streamingDecoder = new TextDecoder('utf-8', { ignoreBOM: true }) + + for await (const chunk of consumeBody(this[kState].body)) { + if (!isUint8Array(chunk)) { + throw new TypeError('Expected Uint8Array chunk') + } + text += streamingDecoder.decode(chunk, { stream: true }) + } + text += streamingDecoder.decode() + entries = new URLSearchParams(text) + } catch (err) { + // istanbul ignore next: Unclear when new URLSearchParams can fail on a string. + // 2. If entries is failure, then throw a TypeError. + throw Object.assign(new TypeError(), { cause: err }) + } + + // 3. Return a new FormData object whose entries are entries. + const formData = new FormData() + for (const [name, value] of entries) { + formData.append(name, value) + } + return formData + } else { + // Wait a tick before checking if the request has been aborted. + // Otherwise, a TypeError can be thrown when an AbortError should. + await Promise.resolve() + + throwIfAborted(this[kState]) + + // Otherwise, throw a TypeError. + throw webidl.errors.exception({ + header: `${instance.name}.formData`, + message: 'Could not parse content as FormData.' + }) + } + } + } + + return methods +} + +function mixinBody (prototype) { + Object.assign(prototype.prototype, bodyMixinMethods(prototype)) +} + +/** + * @see https://fetch.spec.whatwg.org/#concept-body-consume-body + * @param {Response|Request} object + * @param {(value: unknown) => unknown} convertBytesToJSValue + * @param {Response|Request} instance + */ +async function specConsumeBody (object, convertBytesToJSValue, instance) { + webidl.brandCheck(object, instance) + + throwIfAborted(object[kState]) + + // 1. If object is unusable, then return a promise rejected + // with a TypeError. + if (bodyUnusable(object[kState].body)) { + throw new TypeError('Body is unusable') + } + + // 2. Let promise be a new promise. + const promise = createDeferredPromise() + + // 3. Let errorSteps given error be to reject promise with error. + const errorSteps = (error) => promise.reject(error) + + // 4. Let successSteps given a byte sequence data be to resolve + // promise with the result of running convertBytesToJSValue + // with data. If that threw an exception, then run errorSteps + // with that exception. + const successSteps = (data) => { + try { + promise.resolve(convertBytesToJSValue(data)) + } catch (e) { + errorSteps(e) + } + } + + // 5. If object’s body is null, then run successSteps with an + // empty byte sequence. + if (object[kState].body == null) { + successSteps(new Uint8Array()) + return promise.promise + } + + // 6. Otherwise, fully read object’s body given successSteps, + // errorSteps, and object’s relevant global object. + await fullyReadBody(object[kState].body, successSteps, errorSteps) + + // 7. Return promise. + return promise.promise +} + +// https://fetch.spec.whatwg.org/#body-unusable +function bodyUnusable (body) { + // An object including the Body interface mixin is + // said to be unusable if its body is non-null and + // its body’s stream is disturbed or locked. + return body != null && (body.stream.locked || util.isDisturbed(body.stream)) +} + +/** + * @see https://encoding.spec.whatwg.org/#utf-8-decode + * @param {Buffer} buffer + */ +function utf8DecodeBytes (buffer) { + if (buffer.length === 0) { + return '' + } + + // 1. Let buffer be the result of peeking three bytes from + // ioQueue, converted to a byte sequence. + + // 2. If buffer is 0xEF 0xBB 0xBF, then read three + // bytes from ioQueue. (Do nothing with those bytes.) + if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { + buffer = buffer.subarray(3) + } + + // 3. Process a queue with an instance of UTF-8’s + // decoder, ioQueue, output, and "replacement". + const output = textDecoder.decode(buffer) + + // 4. Return output. + return output +} + +/** + * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value + * @param {Uint8Array} bytes + */ +function parseJSONFromBytes (bytes) { + return JSON.parse(utf8DecodeBytes(bytes)) +} + +/** + * @see https://fetch.spec.whatwg.org/#concept-body-mime-type + * @param {import('./response').Response|import('./request').Request} object + */ +function bodyMimeType (object) { + const { headersList } = object[kState] + const contentType = headersList.get('content-type') + + if (contentType === null) { + return 'failure' + } + + return parseMIMEType(contentType) +} + +module.exports = { + extractBody, + safelyExtractBody, + cloneBody, + mixinBody +} + + +/***/ }), + +/***/ 7326: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { MessageChannel, receiveMessageOnPort } = __nccwpck_require__(8167) + +const corsSafeListedMethods = ['GET', 'HEAD', 'POST'] +const corsSafeListedMethodsSet = new Set(corsSafeListedMethods) + +const nullBodyStatus = [101, 204, 205, 304] + +const redirectStatus = [301, 302, 303, 307, 308] +const redirectStatusSet = new Set(redirectStatus) + +// https://fetch.spec.whatwg.org/#block-bad-port +const badPorts = [ + '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79', + '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137', + '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532', + '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723', + '2049', '3659', '4045', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6697', + '10080' +] + +const badPortsSet = new Set(badPorts) + +// https://w3c.github.io/webappsec-referrer-policy/#referrer-policies +const referrerPolicy = [ + '', + 'no-referrer', + 'no-referrer-when-downgrade', + 'same-origin', + 'origin', + 'strict-origin', + 'origin-when-cross-origin', + 'strict-origin-when-cross-origin', + 'unsafe-url' +] +const referrerPolicySet = new Set(referrerPolicy) + +const requestRedirect = ['follow', 'manual', 'error'] + +const safeMethods = ['GET', 'HEAD', 'OPTIONS', 'TRACE'] +const safeMethodsSet = new Set(safeMethods) + +const requestMode = ['navigate', 'same-origin', 'no-cors', 'cors'] + +const requestCredentials = ['omit', 'same-origin', 'include'] + +const requestCache = [ + 'default', + 'no-store', + 'reload', + 'no-cache', + 'force-cache', + 'only-if-cached' +] + +// https://fetch.spec.whatwg.org/#request-body-header-name +const requestBodyHeader = [ + 'content-encoding', + 'content-language', + 'content-location', + 'content-type', + // See https://github.com/nodejs/undici/issues/2021 + // 'Content-Length' is a forbidden header name, which is typically + // removed in the Headers implementation. However, undici doesn't + // filter out headers, so we add it here. + 'content-length' +] + +// https://fetch.spec.whatwg.org/#enumdef-requestduplex +const requestDuplex = [ + 'half' +] + +// http://fetch.spec.whatwg.org/#forbidden-method +const forbiddenMethods = ['CONNECT', 'TRACE', 'TRACK'] +const forbiddenMethodsSet = new Set(forbiddenMethods) + +const subresource = [ + 'audio', + 'audioworklet', + 'font', + 'image', + 'manifest', + 'paintworklet', + 'script', + 'style', + 'track', + 'video', + 'xslt', + '' +] +const subresourceSet = new Set(subresource) + +/** @type {globalThis['DOMException']} */ +const DOMException = globalThis.DOMException ?? (() => { + // DOMException was only made a global in Node v17.0.0, + // but fetch supports >= v16.8. + try { + atob('~') + } catch (err) { + return Object.getPrototypeOf(err).constructor + } +})() + +let channel + +/** @type {globalThis['structuredClone']} */ +const structuredClone = + globalThis.structuredClone ?? + // https://github.com/nodejs/node/blob/b27ae24dcc4251bad726d9d84baf678d1f707fed/lib/internal/structured_clone.js + // structuredClone was added in v17.0.0, but fetch supports v16.8 + function structuredClone (value, options = undefined) { + if (arguments.length === 0) { + throw new TypeError('missing argument') + } + + if (!channel) { + channel = new MessageChannel() + } + channel.port1.unref() + channel.port2.unref() + channel.port1.postMessage(value, options?.transfer) + return receiveMessageOnPort(channel.port2).message + } + +module.exports = { + DOMException, + structuredClone, + subresource, + forbiddenMethods, + requestBodyHeader, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + redirectStatus, + corsSafeListedMethods, + nullBodyStatus, + safeMethods, + badPorts, + requestDuplex, + subresourceSet, + badPortsSet, + redirectStatusSet, + corsSafeListedMethodsSet, + safeMethodsSet, + forbiddenMethodsSet, + referrerPolicySet +} + + +/***/ }), + +/***/ 4322: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const assert = __nccwpck_require__(2613) +const { atob } = __nccwpck_require__(181) +const { isomorphicDecode } = __nccwpck_require__(5523) + +const encoder = new TextEncoder() + +/** + * @see https://mimesniff.spec.whatwg.org/#http-token-code-point + */ +const HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/ +const HTTP_WHITESPACE_REGEX = /(\u000A|\u000D|\u0009|\u0020)/ // eslint-disable-line +/** + * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point + */ +const HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/ // eslint-disable-line + +// https://fetch.spec.whatwg.org/#data-url-processor +/** @param {URL} dataURL */ +function dataURLProcessor (dataURL) { + // 1. Assert: dataURL’s scheme is "data". + assert(dataURL.protocol === 'data:') + + // 2. Let input be the result of running the URL + // serializer on dataURL with exclude fragment + // set to true. + let input = URLSerializer(dataURL, true) + + // 3. Remove the leading "data:" string from input. + input = input.slice(5) + + // 4. Let position point at the start of input. + const position = { position: 0 } + + // 5. Let mimeType be the result of collecting a + // sequence of code points that are not equal + // to U+002C (,), given position. + let mimeType = collectASequenceOfCodePointsFast( + ',', + input, + position + ) + + // 6. Strip leading and trailing ASCII whitespace + // from mimeType. + // Undici implementation note: we need to store the + // length because if the mimetype has spaces removed, + // the wrong amount will be sliced from the input in + // step #9 + const mimeTypeLength = mimeType.length + mimeType = removeASCIIWhitespace(mimeType, true, true) + + // 7. If position is past the end of input, then + // return failure + if (position.position >= input.length) { + return 'failure' + } + + // 8. Advance position by 1. + position.position++ + + // 9. Let encodedBody be the remainder of input. + const encodedBody = input.slice(mimeTypeLength + 1) + + // 10. Let body be the percent-decoding of encodedBody. + let body = stringPercentDecode(encodedBody) + + // 11. If mimeType ends with U+003B (;), followed by + // zero or more U+0020 SPACE, followed by an ASCII + // case-insensitive match for "base64", then: + if (/;(\u0020){0,}base64$/i.test(mimeType)) { + // 1. Let stringBody be the isomorphic decode of body. + const stringBody = isomorphicDecode(body) + + // 2. Set body to the forgiving-base64 decode of + // stringBody. + body = forgivingBase64(stringBody) + + // 3. If body is failure, then return failure. + if (body === 'failure') { + return 'failure' + } + + // 4. Remove the last 6 code points from mimeType. + mimeType = mimeType.slice(0, -6) + + // 5. Remove trailing U+0020 SPACE code points from mimeType, + // if any. + mimeType = mimeType.replace(/(\u0020)+$/, '') + + // 6. Remove the last U+003B (;) code point from mimeType. + mimeType = mimeType.slice(0, -1) + } + + // 12. If mimeType starts with U+003B (;), then prepend + // "text/plain" to mimeType. + if (mimeType.startsWith(';')) { + mimeType = 'text/plain' + mimeType + } + + // 13. Let mimeTypeRecord be the result of parsing + // mimeType. + let mimeTypeRecord = parseMIMEType(mimeType) + + // 14. If mimeTypeRecord is failure, then set + // mimeTypeRecord to text/plain;charset=US-ASCII. + if (mimeTypeRecord === 'failure') { + mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII') + } + + // 15. Return a new data: URL struct whose MIME + // type is mimeTypeRecord and body is body. + // https://fetch.spec.whatwg.org/#data-url-struct + return { mimeType: mimeTypeRecord, body } +} + +// https://url.spec.whatwg.org/#concept-url-serializer +/** + * @param {URL} url + * @param {boolean} excludeFragment + */ +function URLSerializer (url, excludeFragment = false) { + if (!excludeFragment) { + return url.href + } + + const href = url.href + const hashLength = url.hash.length + + return hashLength === 0 ? href : href.substring(0, href.length - hashLength) +} + +// https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points +/** + * @param {(char: string) => boolean} condition + * @param {string} input + * @param {{ position: number }} position + */ +function collectASequenceOfCodePoints (condition, input, position) { + // 1. Let result be the empty string. + let result = '' + + // 2. While position doesn’t point past the end of input and the + // code point at position within input meets the condition condition: + while (position.position < input.length && condition(input[position.position])) { + // 1. Append that code point to the end of result. + result += input[position.position] + + // 2. Advance position by 1. + position.position++ + } + + // 3. Return result. + return result +} + +/** + * A faster collectASequenceOfCodePoints that only works when comparing a single character. + * @param {string} char + * @param {string} input + * @param {{ position: number }} position + */ +function collectASequenceOfCodePointsFast (char, input, position) { + const idx = input.indexOf(char, position.position) + const start = position.position + + if (idx === -1) { + position.position = input.length + return input.slice(start) + } + + position.position = idx + return input.slice(start, position.position) +} + +// https://url.spec.whatwg.org/#string-percent-decode +/** @param {string} input */ +function stringPercentDecode (input) { + // 1. Let bytes be the UTF-8 encoding of input. + const bytes = encoder.encode(input) + + // 2. Return the percent-decoding of bytes. + return percentDecode(bytes) +} + +// https://url.spec.whatwg.org/#percent-decode +/** @param {Uint8Array} input */ +function percentDecode (input) { + // 1. Let output be an empty byte sequence. + /** @type {number[]} */ + const output = [] + + // 2. For each byte byte in input: + for (let i = 0; i < input.length; i++) { + const byte = input[i] + + // 1. If byte is not 0x25 (%), then append byte to output. + if (byte !== 0x25) { + output.push(byte) + + // 2. Otherwise, if byte is 0x25 (%) and the next two bytes + // after byte in input are not in the ranges + // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F), + // and 0x61 (a) to 0x66 (f), all inclusive, append byte + // to output. + } else if ( + byte === 0x25 && + !/^[0-9A-Fa-f]{2}$/i.test(String.fromCharCode(input[i + 1], input[i + 2])) + ) { + output.push(0x25) + + // 3. Otherwise: + } else { + // 1. Let bytePoint be the two bytes after byte in input, + // decoded, and then interpreted as hexadecimal number. + const nextTwoBytes = String.fromCharCode(input[i + 1], input[i + 2]) + const bytePoint = Number.parseInt(nextTwoBytes, 16) + + // 2. Append a byte whose value is bytePoint to output. + output.push(bytePoint) + + // 3. Skip the next two bytes in input. + i += 2 + } + } + + // 3. Return output. + return Uint8Array.from(output) +} + +// https://mimesniff.spec.whatwg.org/#parse-a-mime-type +/** @param {string} input */ +function parseMIMEType (input) { + // 1. Remove any leading and trailing HTTP whitespace + // from input. + input = removeHTTPWhitespace(input, true, true) + + // 2. Let position be a position variable for input, + // initially pointing at the start of input. + const position = { position: 0 } + + // 3. Let type be the result of collecting a sequence + // of code points that are not U+002F (/) from + // input, given position. + const type = collectASequenceOfCodePointsFast( + '/', + input, + position + ) + + // 4. If type is the empty string or does not solely + // contain HTTP token code points, then return failure. + // https://mimesniff.spec.whatwg.org/#http-token-code-point + if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { + return 'failure' + } + + // 5. If position is past the end of input, then return + // failure + if (position.position > input.length) { + return 'failure' + } + + // 6. Advance position by 1. (This skips past U+002F (/).) + position.position++ + + // 7. Let subtype be the result of collecting a sequence of + // code points that are not U+003B (;) from input, given + // position. + let subtype = collectASequenceOfCodePointsFast( + ';', + input, + position + ) + + // 8. Remove any trailing HTTP whitespace from subtype. + subtype = removeHTTPWhitespace(subtype, false, true) + + // 9. If subtype is the empty string or does not solely + // contain HTTP token code points, then return failure. + if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { + return 'failure' + } + + const typeLowercase = type.toLowerCase() + const subtypeLowercase = subtype.toLowerCase() + + // 10. Let mimeType be a new MIME type record whose type + // is type, in ASCII lowercase, and subtype is subtype, + // in ASCII lowercase. + // https://mimesniff.spec.whatwg.org/#mime-type + const mimeType = { + type: typeLowercase, + subtype: subtypeLowercase, + /** @type {Map} */ + parameters: new Map(), + // https://mimesniff.spec.whatwg.org/#mime-type-essence + essence: `${typeLowercase}/${subtypeLowercase}` + } + + // 11. While position is not past the end of input: + while (position.position < input.length) { + // 1. Advance position by 1. (This skips past U+003B (;).) + position.position++ + + // 2. Collect a sequence of code points that are HTTP + // whitespace from input given position. + collectASequenceOfCodePoints( + // https://fetch.spec.whatwg.org/#http-whitespace + char => HTTP_WHITESPACE_REGEX.test(char), + input, + position + ) + + // 3. Let parameterName be the result of collecting a + // sequence of code points that are not U+003B (;) + // or U+003D (=) from input, given position. + let parameterName = collectASequenceOfCodePoints( + (char) => char !== ';' && char !== '=', + input, + position + ) + + // 4. Set parameterName to parameterName, in ASCII + // lowercase. + parameterName = parameterName.toLowerCase() + + // 5. If position is not past the end of input, then: + if (position.position < input.length) { + // 1. If the code point at position within input is + // U+003B (;), then continue. + if (input[position.position] === ';') { + continue + } + + // 2. Advance position by 1. (This skips past U+003D (=).) + position.position++ + } + + // 6. If position is past the end of input, then break. + if (position.position > input.length) { + break + } + + // 7. Let parameterValue be null. + let parameterValue = null + + // 8. If the code point at position within input is + // U+0022 ("), then: + if (input[position.position] === '"') { + // 1. Set parameterValue to the result of collecting + // an HTTP quoted string from input, given position + // and the extract-value flag. + parameterValue = collectAnHTTPQuotedString(input, position, true) + + // 2. Collect a sequence of code points that are not + // U+003B (;) from input, given position. + collectASequenceOfCodePointsFast( + ';', + input, + position + ) + + // 9. Otherwise: + } else { + // 1. Set parameterValue to the result of collecting + // a sequence of code points that are not U+003B (;) + // from input, given position. + parameterValue = collectASequenceOfCodePointsFast( + ';', + input, + position + ) + + // 2. Remove any trailing HTTP whitespace from parameterValue. + parameterValue = removeHTTPWhitespace(parameterValue, false, true) + + // 3. If parameterValue is the empty string, then continue. + if (parameterValue.length === 0) { + continue + } + } + + // 10. If all of the following are true + // - parameterName is not the empty string + // - parameterName solely contains HTTP token code points + // - parameterValue solely contains HTTP quoted-string token code points + // - mimeType’s parameters[parameterName] does not exist + // then set mimeType’s parameters[parameterName] to parameterValue. + if ( + parameterName.length !== 0 && + HTTP_TOKEN_CODEPOINTS.test(parameterName) && + (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && + !mimeType.parameters.has(parameterName) + ) { + mimeType.parameters.set(parameterName, parameterValue) + } + } + + // 12. Return mimeType. + return mimeType +} + +// https://infra.spec.whatwg.org/#forgiving-base64-decode +/** @param {string} data */ +function forgivingBase64 (data) { + // 1. Remove all ASCII whitespace from data. + data = data.replace(/[\u0009\u000A\u000C\u000D\u0020]/g, '') // eslint-disable-line + + // 2. If data’s code point length divides by 4 leaving + // no remainder, then: + if (data.length % 4 === 0) { + // 1. If data ends with one or two U+003D (=) code points, + // then remove them from data. + data = data.replace(/=?=$/, '') + } + + // 3. If data’s code point length divides by 4 leaving + // a remainder of 1, then return failure. + if (data.length % 4 === 1) { + return 'failure' + } + + // 4. If data contains a code point that is not one of + // U+002B (+) + // U+002F (/) + // ASCII alphanumeric + // then return failure. + if (/[^+/0-9A-Za-z]/.test(data)) { + return 'failure' + } + + const binary = atob(data) + const bytes = new Uint8Array(binary.length) + + for (let byte = 0; byte < binary.length; byte++) { + bytes[byte] = binary.charCodeAt(byte) + } + + return bytes +} + +// https://fetch.spec.whatwg.org/#collect-an-http-quoted-string +// tests: https://fetch.spec.whatwg.org/#example-http-quoted-string +/** + * @param {string} input + * @param {{ position: number }} position + * @param {boolean?} extractValue + */ +function collectAnHTTPQuotedString (input, position, extractValue) { + // 1. Let positionStart be position. + const positionStart = position.position + + // 2. Let value be the empty string. + let value = '' + + // 3. Assert: the code point at position within input + // is U+0022 ("). + assert(input[position.position] === '"') + + // 4. Advance position by 1. + position.position++ + + // 5. While true: + while (true) { + // 1. Append the result of collecting a sequence of code points + // that are not U+0022 (") or U+005C (\) from input, given + // position, to value. + value += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== '\\', + input, + position + ) + + // 2. If position is past the end of input, then break. + if (position.position >= input.length) { + break + } + + // 3. Let quoteOrBackslash be the code point at position within + // input. + const quoteOrBackslash = input[position.position] + + // 4. Advance position by 1. + position.position++ + + // 5. If quoteOrBackslash is U+005C (\), then: + if (quoteOrBackslash === '\\') { + // 1. If position is past the end of input, then append + // U+005C (\) to value and break. + if (position.position >= input.length) { + value += '\\' + break + } + + // 2. Append the code point at position within input to value. + value += input[position.position] + + // 3. Advance position by 1. + position.position++ + + // 6. Otherwise: + } else { + // 1. Assert: quoteOrBackslash is U+0022 ("). + assert(quoteOrBackslash === '"') + + // 2. Break. + break + } + } + + // 6. If the extract-value flag is set, then return value. + if (extractValue) { + return value + } + + // 7. Return the code points from positionStart to position, + // inclusive, within input. + return input.slice(positionStart, position.position) +} + +/** + * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type + */ +function serializeAMimeType (mimeType) { + assert(mimeType !== 'failure') + const { parameters, essence } = mimeType + + // 1. Let serialization be the concatenation of mimeType’s + // type, U+002F (/), and mimeType’s subtype. + let serialization = essence + + // 2. For each name → value of mimeType’s parameters: + for (let [name, value] of parameters.entries()) { + // 1. Append U+003B (;) to serialization. + serialization += ';' + + // 2. Append name to serialization. + serialization += name + + // 3. Append U+003D (=) to serialization. + serialization += '=' + + // 4. If value does not solely contain HTTP token code + // points or value is the empty string, then: + if (!HTTP_TOKEN_CODEPOINTS.test(value)) { + // 1. Precede each occurence of U+0022 (") or + // U+005C (\) in value with U+005C (\). + value = value.replace(/(\\|")/g, '\\$1') + + // 2. Prepend U+0022 (") to value. + value = '"' + value + + // 3. Append U+0022 (") to value. + value += '"' + } + + // 5. Append value to serialization. + serialization += value + } + + // 3. Return serialization. + return serialization +} + +/** + * @see https://fetch.spec.whatwg.org/#http-whitespace + * @param {string} char + */ +function isHTTPWhiteSpace (char) { + return char === '\r' || char === '\n' || char === '\t' || char === ' ' +} + +/** + * @see https://fetch.spec.whatwg.org/#http-whitespace + * @param {string} str + */ +function removeHTTPWhitespace (str, leading = true, trailing = true) { + let lead = 0 + let trail = str.length - 1 + + if (leading) { + for (; lead < str.length && isHTTPWhiteSpace(str[lead]); lead++); + } + + if (trailing) { + for (; trail > 0 && isHTTPWhiteSpace(str[trail]); trail--); + } + + return str.slice(lead, trail + 1) +} + +/** + * @see https://infra.spec.whatwg.org/#ascii-whitespace + * @param {string} char + */ +function isASCIIWhitespace (char) { + return char === '\r' || char === '\n' || char === '\t' || char === '\f' || char === ' ' +} + +/** + * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace + */ +function removeASCIIWhitespace (str, leading = true, trailing = true) { + let lead = 0 + let trail = str.length - 1 + + if (leading) { + for (; lead < str.length && isASCIIWhitespace(str[lead]); lead++); + } + + if (trailing) { + for (; trail > 0 && isASCIIWhitespace(str[trail]); trail--); + } + + return str.slice(lead, trail + 1) +} + +module.exports = { + dataURLProcessor, + URLSerializer, + collectASequenceOfCodePoints, + collectASequenceOfCodePointsFast, + stringPercentDecode, + parseMIMEType, + collectAnHTTPQuotedString, + serializeAMimeType +} + + +/***/ }), + +/***/ 3041: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { Blob, File: NativeFile } = __nccwpck_require__(181) +const { types } = __nccwpck_require__(9023) +const { kState } = __nccwpck_require__(9710) +const { isBlobLike } = __nccwpck_require__(5523) +const { webidl } = __nccwpck_require__(4222) +const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(4322) +const { kEnumerableProperty } = __nccwpck_require__(3440) +const encoder = new TextEncoder() + +class File extends Blob { + constructor (fileBits, fileName, options = {}) { + // The File constructor is invoked with two or three parameters, depending + // on whether the optional dictionary parameter is used. When the File() + // constructor is invoked, user agents must run the following steps: + webidl.argumentLengthCheck(arguments, 2, { header: 'File constructor' }) + + fileBits = webidl.converters['sequence'](fileBits) + fileName = webidl.converters.USVString(fileName) + options = webidl.converters.FilePropertyBag(options) + + // 1. Let bytes be the result of processing blob parts given fileBits and + // options. + // Note: Blob handles this for us + + // 2. Let n be the fileName argument to the constructor. + const n = fileName + + // 3. Process FilePropertyBag dictionary argument by running the following + // substeps: + + // 1. If the type member is provided and is not the empty string, let t + // be set to the type dictionary member. If t contains any characters + // outside the range U+0020 to U+007E, then set t to the empty string + // and return from these substeps. + // 2. Convert every character in t to ASCII lowercase. + let t = options.type + let d + + // eslint-disable-next-line no-labels + substep: { + if (t) { + t = parseMIMEType(t) + + if (t === 'failure') { + t = '' + // eslint-disable-next-line no-labels + break substep + } + + t = serializeAMimeType(t).toLowerCase() + } + + // 3. If the lastModified member is provided, let d be set to the + // lastModified dictionary member. If it is not provided, set d to the + // current date and time represented as the number of milliseconds since + // the Unix Epoch (which is the equivalent of Date.now() [ECMA-262]). + d = options.lastModified + } + + // 4. Return a new File object F such that: + // F refers to the bytes byte sequence. + // F.size is set to the number of total bytes in bytes. + // F.name is set to n. + // F.type is set to t. + // F.lastModified is set to d. + + super(processBlobParts(fileBits, options), { type: t }) + this[kState] = { + name: n, + lastModified: d, + type: t + } + } + + get name () { + webidl.brandCheck(this, File) + + return this[kState].name + } + + get lastModified () { + webidl.brandCheck(this, File) + + return this[kState].lastModified + } + + get type () { + webidl.brandCheck(this, File) + + return this[kState].type + } +} + +class FileLike { + constructor (blobLike, fileName, options = {}) { + // TODO: argument idl type check + + // The File constructor is invoked with two or three parameters, depending + // on whether the optional dictionary parameter is used. When the File() + // constructor is invoked, user agents must run the following steps: + + // 1. Let bytes be the result of processing blob parts given fileBits and + // options. + + // 2. Let n be the fileName argument to the constructor. + const n = fileName + + // 3. Process FilePropertyBag dictionary argument by running the following + // substeps: + + // 1. If the type member is provided and is not the empty string, let t + // be set to the type dictionary member. If t contains any characters + // outside the range U+0020 to U+007E, then set t to the empty string + // and return from these substeps. + // TODO + const t = options.type + + // 2. Convert every character in t to ASCII lowercase. + // TODO + + // 3. If the lastModified member is provided, let d be set to the + // lastModified dictionary member. If it is not provided, set d to the + // current date and time represented as the number of milliseconds since + // the Unix Epoch (which is the equivalent of Date.now() [ECMA-262]). + const d = options.lastModified ?? Date.now() + + // 4. Return a new File object F such that: + // F refers to the bytes byte sequence. + // F.size is set to the number of total bytes in bytes. + // F.name is set to n. + // F.type is set to t. + // F.lastModified is set to d. + + this[kState] = { + blobLike, + name: n, + type: t, + lastModified: d + } + } + + stream (...args) { + webidl.brandCheck(this, FileLike) + + return this[kState].blobLike.stream(...args) + } + + arrayBuffer (...args) { + webidl.brandCheck(this, FileLike) + + return this[kState].blobLike.arrayBuffer(...args) + } + + slice (...args) { + webidl.brandCheck(this, FileLike) + + return this[kState].blobLike.slice(...args) + } + + text (...args) { + webidl.brandCheck(this, FileLike) + + return this[kState].blobLike.text(...args) + } + + get size () { + webidl.brandCheck(this, FileLike) + + return this[kState].blobLike.size + } + + get type () { + webidl.brandCheck(this, FileLike) + + return this[kState].blobLike.type + } + + get name () { + webidl.brandCheck(this, FileLike) + + return this[kState].name + } + + get lastModified () { + webidl.brandCheck(this, FileLike) + + return this[kState].lastModified + } + + get [Symbol.toStringTag] () { + return 'File' + } +} + +Object.defineProperties(File.prototype, { + [Symbol.toStringTag]: { + value: 'File', + configurable: true + }, + name: kEnumerableProperty, + lastModified: kEnumerableProperty +}) + +webidl.converters.Blob = webidl.interfaceConverter(Blob) + +webidl.converters.BlobPart = function (V, opts) { + if (webidl.util.Type(V) === 'Object') { + if (isBlobLike(V)) { + return webidl.converters.Blob(V, { strict: false }) + } + + if ( + ArrayBuffer.isView(V) || + types.isAnyArrayBuffer(V) + ) { + return webidl.converters.BufferSource(V, opts) + } + } + + return webidl.converters.USVString(V, opts) +} + +webidl.converters['sequence'] = webidl.sequenceConverter( + webidl.converters.BlobPart +) + +// https://www.w3.org/TR/FileAPI/#dfn-FilePropertyBag +webidl.converters.FilePropertyBag = webidl.dictionaryConverter([ + { + key: 'lastModified', + converter: webidl.converters['long long'], + get defaultValue () { + return Date.now() + } + }, + { + key: 'type', + converter: webidl.converters.DOMString, + defaultValue: '' + }, + { + key: 'endings', + converter: (value) => { + value = webidl.converters.DOMString(value) + value = value.toLowerCase() + + if (value !== 'native') { + value = 'transparent' + } + + return value + }, + defaultValue: 'transparent' + } +]) + +/** + * @see https://www.w3.org/TR/FileAPI/#process-blob-parts + * @param {(NodeJS.TypedArray|Blob|string)[]} parts + * @param {{ type: string, endings: string }} options + */ +function processBlobParts (parts, options) { + // 1. Let bytes be an empty sequence of bytes. + /** @type {NodeJS.TypedArray[]} */ + const bytes = [] + + // 2. For each element in parts: + for (const element of parts) { + // 1. If element is a USVString, run the following substeps: + if (typeof element === 'string') { + // 1. Let s be element. + let s = element + + // 2. If the endings member of options is "native", set s + // to the result of converting line endings to native + // of element. + if (options.endings === 'native') { + s = convertLineEndingsNative(s) + } + + // 3. Append the result of UTF-8 encoding s to bytes. + bytes.push(encoder.encode(s)) + } else if ( + types.isAnyArrayBuffer(element) || + types.isTypedArray(element) + ) { + // 2. If element is a BufferSource, get a copy of the + // bytes held by the buffer source, and append those + // bytes to bytes. + if (!element.buffer) { // ArrayBuffer + bytes.push(new Uint8Array(element)) + } else { + bytes.push( + new Uint8Array(element.buffer, element.byteOffset, element.byteLength) + ) + } + } else if (isBlobLike(element)) { + // 3. If element is a Blob, append the bytes it represents + // to bytes. + bytes.push(element) + } + } + + // 3. Return bytes. + return bytes +} + +/** + * @see https://www.w3.org/TR/FileAPI/#convert-line-endings-to-native + * @param {string} s + */ +function convertLineEndingsNative (s) { + // 1. Let native line ending be be the code point U+000A LF. + let nativeLineEnding = '\n' + + // 2. If the underlying platform’s conventions are to + // represent newlines as a carriage return and line feed + // sequence, set native line ending to the code point + // U+000D CR followed by the code point U+000A LF. + if (process.platform === 'win32') { + nativeLineEnding = '\r\n' + } + + return s.replace(/\r?\n/g, nativeLineEnding) +} + +// If this function is moved to ./util.js, some tools (such as +// rollup) will warn about circular dependencies. See: +// https://github.com/nodejs/undici/issues/1629 +function isFileLike (object) { + return ( + (NativeFile && object instanceof NativeFile) || + object instanceof File || ( + object && + (typeof object.stream === 'function' || + typeof object.arrayBuffer === 'function') && + object[Symbol.toStringTag] === 'File' + ) + ) +} + +module.exports = { File, FileLike, isFileLike } + + +/***/ }), + +/***/ 3073: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { isBlobLike, toUSVString, makeIterator } = __nccwpck_require__(5523) +const { kState } = __nccwpck_require__(9710) +const { File: UndiciFile, FileLike, isFileLike } = __nccwpck_require__(3041) +const { webidl } = __nccwpck_require__(4222) +const { Blob, File: NativeFile } = __nccwpck_require__(181) + +/** @type {globalThis['File']} */ +const File = NativeFile ?? UndiciFile + +// https://xhr.spec.whatwg.org/#formdata +class FormData { + constructor (form) { + if (form !== undefined) { + throw webidl.errors.conversionFailed({ + prefix: 'FormData constructor', + argument: 'Argument 1', + types: ['undefined'] + }) + } + + this[kState] = [] + } + + append (name, value, filename = undefined) { + webidl.brandCheck(this, FormData) + + webidl.argumentLengthCheck(arguments, 2, { header: 'FormData.append' }) + + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" + ) + } + + // 1. Let value be value if given; otherwise blobValue. + + name = webidl.converters.USVString(name) + value = isBlobLike(value) + ? webidl.converters.Blob(value, { strict: false }) + : webidl.converters.USVString(value) + filename = arguments.length === 3 + ? webidl.converters.USVString(filename) + : undefined + + // 2. Let entry be the result of creating an entry with + // name, value, and filename if given. + const entry = makeEntry(name, value, filename) + + // 3. Append entry to this’s entry list. + this[kState].push(entry) + } + + delete (name) { + webidl.brandCheck(this, FormData) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.delete' }) + + name = webidl.converters.USVString(name) + + // The delete(name) method steps are to remove all entries whose name + // is name from this’s entry list. + this[kState] = this[kState].filter(entry => entry.name !== name) + } + + get (name) { + webidl.brandCheck(this, FormData) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.get' }) + + name = webidl.converters.USVString(name) + + // 1. If there is no entry whose name is name in this’s entry list, + // then return null. + const idx = this[kState].findIndex((entry) => entry.name === name) + if (idx === -1) { + return null + } + + // 2. Return the value of the first entry whose name is name from + // this’s entry list. + return this[kState][idx].value + } + + getAll (name) { + webidl.brandCheck(this, FormData) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.getAll' }) + + name = webidl.converters.USVString(name) + + // 1. If there is no entry whose name is name in this’s entry list, + // then return the empty list. + // 2. Return the values of all entries whose name is name, in order, + // from this’s entry list. + return this[kState] + .filter((entry) => entry.name === name) + .map((entry) => entry.value) + } + + has (name) { + webidl.brandCheck(this, FormData) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.has' }) + + name = webidl.converters.USVString(name) + + // The has(name) method steps are to return true if there is an entry + // whose name is name in this’s entry list; otherwise false. + return this[kState].findIndex((entry) => entry.name === name) !== -1 + } + + set (name, value, filename = undefined) { + webidl.brandCheck(this, FormData) + + webidl.argumentLengthCheck(arguments, 2, { header: 'FormData.set' }) + + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" + ) + } + + // The set(name, value) and set(name, blobValue, filename) method steps + // are: + + // 1. Let value be value if given; otherwise blobValue. + + name = webidl.converters.USVString(name) + value = isBlobLike(value) + ? webidl.converters.Blob(value, { strict: false }) + : webidl.converters.USVString(value) + filename = arguments.length === 3 + ? toUSVString(filename) + : undefined + + // 2. Let entry be the result of creating an entry with name, value, and + // filename if given. + const entry = makeEntry(name, value, filename) + + // 3. If there are entries in this’s entry list whose name is name, then + // replace the first such entry with entry and remove the others. + const idx = this[kState].findIndex((entry) => entry.name === name) + if (idx !== -1) { + this[kState] = [ + ...this[kState].slice(0, idx), + entry, + ...this[kState].slice(idx + 1).filter((entry) => entry.name !== name) + ] + } else { + // 4. Otherwise, append entry to this’s entry list. + this[kState].push(entry) + } + } + + entries () { + webidl.brandCheck(this, FormData) + + return makeIterator( + () => this[kState].map(pair => [pair.name, pair.value]), + 'FormData', + 'key+value' + ) + } + + keys () { + webidl.brandCheck(this, FormData) + + return makeIterator( + () => this[kState].map(pair => [pair.name, pair.value]), + 'FormData', + 'key' + ) + } + + values () { + webidl.brandCheck(this, FormData) + + return makeIterator( + () => this[kState].map(pair => [pair.name, pair.value]), + 'FormData', + 'value' + ) + } + + /** + * @param {(value: string, key: string, self: FormData) => void} callbackFn + * @param {unknown} thisArg + */ + forEach (callbackFn, thisArg = globalThis) { + webidl.brandCheck(this, FormData) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.forEach' }) + + if (typeof callbackFn !== 'function') { + throw new TypeError( + "Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'." + ) + } + + for (const [key, value] of this) { + callbackFn.apply(thisArg, [value, key, this]) + } + } +} + +FormData.prototype[Symbol.iterator] = FormData.prototype.entries + +Object.defineProperties(FormData.prototype, { + [Symbol.toStringTag]: { + value: 'FormData', + configurable: true + } +}) + +/** + * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry + * @param {string} name + * @param {string|Blob} value + * @param {?string} filename + * @returns + */ +function makeEntry (name, value, filename) { + // 1. Set name to the result of converting name into a scalar value string. + // "To convert a string into a scalar value string, replace any surrogates + // with U+FFFD." + // see: https://nodejs.org/dist/latest-v18.x/docs/api/buffer.html#buftostringencoding-start-end + name = Buffer.from(name).toString('utf8') + + // 2. If value is a string, then set value to the result of converting + // value into a scalar value string. + if (typeof value === 'string') { + value = Buffer.from(value).toString('utf8') + } else { + // 3. Otherwise: + + // 1. If value is not a File object, then set value to a new File object, + // representing the same bytes, whose name attribute value is "blob" + if (!isFileLike(value)) { + value = value instanceof Blob + ? new File([value], 'blob', { type: value.type }) + : new FileLike(value, 'blob', { type: value.type }) + } + + // 2. If filename is given, then set value to a new File object, + // representing the same bytes, whose name attribute is filename. + if (filename !== undefined) { + /** @type {FilePropertyBag} */ + const options = { + type: value.type, + lastModified: value.lastModified + } + + value = (NativeFile && value instanceof NativeFile) || value instanceof UndiciFile + ? new File([value], filename, options) + : new FileLike(value, filename, options) + } + } + + // 4. Return an entry whose name is name and whose value is value. + return { name, value } +} + +module.exports = { FormData } + + +/***/ }), + +/***/ 5628: +/***/ ((module) => { + +"use strict"; + + +// In case of breaking changes, increase the version +// number to avoid conflicts. +const globalOrigin = Symbol.for('undici.globalOrigin.1') + +function getGlobalOrigin () { + return globalThis[globalOrigin] +} + +function setGlobalOrigin (newOrigin) { + if (newOrigin === undefined) { + Object.defineProperty(globalThis, globalOrigin, { + value: undefined, + writable: true, + enumerable: false, + configurable: false + }) + + return + } + + const parsedURL = new URL(newOrigin) + + if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') { + throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`) + } + + Object.defineProperty(globalThis, globalOrigin, { + value: parsedURL, + writable: true, + enumerable: false, + configurable: false + }) +} + +module.exports = { + getGlobalOrigin, + setGlobalOrigin +} + + +/***/ }), + +/***/ 6349: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// https://github.com/Ethan-Arrowood/undici-fetch + + + +const { kHeadersList, kConstruct } = __nccwpck_require__(6443) +const { kGuard } = __nccwpck_require__(9710) +const { kEnumerableProperty } = __nccwpck_require__(3440) +const { + makeIterator, + isValidHeaderName, + isValidHeaderValue +} = __nccwpck_require__(5523) +const { webidl } = __nccwpck_require__(4222) +const assert = __nccwpck_require__(2613) + +const kHeadersMap = Symbol('headers map') +const kHeadersSortedMap = Symbol('headers map sorted') + +/** + * @param {number} code + */ +function isHTTPWhiteSpaceCharCode (code) { + return code === 0x00a || code === 0x00d || code === 0x009 || code === 0x020 +} + +/** + * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize + * @param {string} potentialValue + */ +function headerValueNormalize (potentialValue) { + // To normalize a byte sequence potentialValue, remove + // any leading and trailing HTTP whitespace bytes from + // potentialValue. + let i = 0; let j = potentialValue.length + + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i + + return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j) +} + +function fill (headers, object) { + // To fill a Headers object headers with a given object object, run these steps: + + // 1. If object is a sequence, then for each header in object: + // Note: webidl conversion to array has already been done. + if (Array.isArray(object)) { + for (let i = 0; i < object.length; ++i) { + const header = object[i] + // 1. If header does not contain exactly two items, then throw a TypeError. + if (header.length !== 2) { + throw webidl.errors.exception({ + header: 'Headers constructor', + message: `expected name/value pair to be length 2, found ${header.length}.` + }) + } + + // 2. Append (header’s first item, header’s second item) to headers. + appendHeader(headers, header[0], header[1]) + } + } else if (typeof object === 'object' && object !== null) { + // Note: null should throw + + // 2. Otherwise, object is a record, then for each key → value in object, + // append (key, value) to headers + const keys = Object.keys(object) + for (let i = 0; i < keys.length; ++i) { + appendHeader(headers, keys[i], object[keys[i]]) + } + } else { + throw webidl.errors.conversionFailed({ + prefix: 'Headers constructor', + argument: 'Argument 1', + types: ['sequence>', 'record'] + }) + } +} + +/** + * @see https://fetch.spec.whatwg.org/#concept-headers-append + */ +function appendHeader (headers, name, value) { + // 1. Normalize value. + value = headerValueNormalize(value) + + // 2. If name is not a header name or value is not a + // header value, then throw a TypeError. + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: 'Headers.append', + value: name, + type: 'header name' + }) + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix: 'Headers.append', + value, + type: 'header value' + }) + } + + // 3. If headers’s guard is "immutable", then throw a TypeError. + // 4. Otherwise, if headers’s guard is "request" and name is a + // forbidden header name, return. + // Note: undici does not implement forbidden header names + if (headers[kGuard] === 'immutable') { + throw new TypeError('immutable') + } else if (headers[kGuard] === 'request-no-cors') { + // 5. Otherwise, if headers’s guard is "request-no-cors": + // TODO + } + + // 6. Otherwise, if headers’s guard is "response" and name is a + // forbidden response-header name, return. + + // 7. Append (name, value) to headers’s header list. + return headers[kHeadersList].append(name, value) + + // 8. If headers’s guard is "request-no-cors", then remove + // privileged no-CORS request headers from headers +} + +class HeadersList { + /** @type {[string, string][]|null} */ + cookies = null + + constructor (init) { + if (init instanceof HeadersList) { + this[kHeadersMap] = new Map(init[kHeadersMap]) + this[kHeadersSortedMap] = init[kHeadersSortedMap] + this.cookies = init.cookies === null ? null : [...init.cookies] + } else { + this[kHeadersMap] = new Map(init) + this[kHeadersSortedMap] = null + } + } + + // https://fetch.spec.whatwg.org/#header-list-contains + contains (name) { + // A header list list contains a header name name if list + // contains a header whose name is a byte-case-insensitive + // match for name. + name = name.toLowerCase() + + return this[kHeadersMap].has(name) + } + + clear () { + this[kHeadersMap].clear() + this[kHeadersSortedMap] = null + this.cookies = null + } + + // https://fetch.spec.whatwg.org/#concept-header-list-append + append (name, value) { + this[kHeadersSortedMap] = null + + // 1. If list contains name, then set name to the first such + // header’s name. + const lowercaseName = name.toLowerCase() + const exists = this[kHeadersMap].get(lowercaseName) + + // 2. Append (name, value) to list. + if (exists) { + const delimiter = lowercaseName === 'cookie' ? '; ' : ', ' + this[kHeadersMap].set(lowercaseName, { + name: exists.name, + value: `${exists.value}${delimiter}${value}` + }) + } else { + this[kHeadersMap].set(lowercaseName, { name, value }) + } + + if (lowercaseName === 'set-cookie') { + this.cookies ??= [] + this.cookies.push(value) + } + } + + // https://fetch.spec.whatwg.org/#concept-header-list-set + set (name, value) { + this[kHeadersSortedMap] = null + const lowercaseName = name.toLowerCase() + + if (lowercaseName === 'set-cookie') { + this.cookies = [value] + } + + // 1. If list contains name, then set the value of + // the first such header to value and remove the + // others. + // 2. Otherwise, append header (name, value) to list. + this[kHeadersMap].set(lowercaseName, { name, value }) + } + + // https://fetch.spec.whatwg.org/#concept-header-list-delete + delete (name) { + this[kHeadersSortedMap] = null + + name = name.toLowerCase() + + if (name === 'set-cookie') { + this.cookies = null + } + + this[kHeadersMap].delete(name) + } + + // https://fetch.spec.whatwg.org/#concept-header-list-get + get (name) { + const value = this[kHeadersMap].get(name.toLowerCase()) + + // 1. If list does not contain name, then return null. + // 2. Return the values of all headers in list whose name + // is a byte-case-insensitive match for name, + // separated from each other by 0x2C 0x20, in order. + return value === undefined ? null : value.value + } + + * [Symbol.iterator] () { + // use the lowercased name + for (const [name, { value }] of this[kHeadersMap]) { + yield [name, value] + } + } + + get entries () { + const headers = {} + + if (this[kHeadersMap].size) { + for (const { name, value } of this[kHeadersMap].values()) { + headers[name] = value + } + } + + return headers + } +} + +// https://fetch.spec.whatwg.org/#headers-class +class Headers { + constructor (init = undefined) { + if (init === kConstruct) { + return + } + this[kHeadersList] = new HeadersList() + + // The new Headers(init) constructor steps are: + + // 1. Set this’s guard to "none". + this[kGuard] = 'none' + + // 2. If init is given, then fill this with init. + if (init !== undefined) { + init = webidl.converters.HeadersInit(init) + fill(this, init) + } + } + + // https://fetch.spec.whatwg.org/#dom-headers-append + append (name, value) { + webidl.brandCheck(this, Headers) + + webidl.argumentLengthCheck(arguments, 2, { header: 'Headers.append' }) + + name = webidl.converters.ByteString(name) + value = webidl.converters.ByteString(value) + + return appendHeader(this, name, value) + } + + // https://fetch.spec.whatwg.org/#dom-headers-delete + delete (name) { + webidl.brandCheck(this, Headers) + + webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.delete' }) + + name = webidl.converters.ByteString(name) + + // 1. If name is not a header name, then throw a TypeError. + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: 'Headers.delete', + value: name, + type: 'header name' + }) + } + + // 2. If this’s guard is "immutable", then throw a TypeError. + // 3. Otherwise, if this’s guard is "request" and name is a + // forbidden header name, return. + // 4. Otherwise, if this’s guard is "request-no-cors", name + // is not a no-CORS-safelisted request-header name, and + // name is not a privileged no-CORS request-header name, + // return. + // 5. Otherwise, if this’s guard is "response" and name is + // a forbidden response-header name, return. + // Note: undici does not implement forbidden header names + if (this[kGuard] === 'immutable') { + throw new TypeError('immutable') + } else if (this[kGuard] === 'request-no-cors') { + // TODO + } + + // 6. If this’s header list does not contain name, then + // return. + if (!this[kHeadersList].contains(name)) { + return + } + + // 7. Delete name from this’s header list. + // 8. If this’s guard is "request-no-cors", then remove + // privileged no-CORS request headers from this. + this[kHeadersList].delete(name) + } + + // https://fetch.spec.whatwg.org/#dom-headers-get + get (name) { + webidl.brandCheck(this, Headers) + + webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.get' }) + + name = webidl.converters.ByteString(name) + + // 1. If name is not a header name, then throw a TypeError. + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: 'Headers.get', + value: name, + type: 'header name' + }) + } + + // 2. Return the result of getting name from this’s header + // list. + return this[kHeadersList].get(name) + } + + // https://fetch.spec.whatwg.org/#dom-headers-has + has (name) { + webidl.brandCheck(this, Headers) + + webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.has' }) + + name = webidl.converters.ByteString(name) + + // 1. If name is not a header name, then throw a TypeError. + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: 'Headers.has', + value: name, + type: 'header name' + }) + } + + // 2. Return true if this’s header list contains name; + // otherwise false. + return this[kHeadersList].contains(name) + } + + // https://fetch.spec.whatwg.org/#dom-headers-set + set (name, value) { + webidl.brandCheck(this, Headers) + + webidl.argumentLengthCheck(arguments, 2, { header: 'Headers.set' }) + + name = webidl.converters.ByteString(name) + value = webidl.converters.ByteString(value) + + // 1. Normalize value. + value = headerValueNormalize(value) + + // 2. If name is not a header name or value is not a + // header value, then throw a TypeError. + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: 'Headers.set', + value: name, + type: 'header name' + }) + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix: 'Headers.set', + value, + type: 'header value' + }) + } + + // 3. If this’s guard is "immutable", then throw a TypeError. + // 4. Otherwise, if this’s guard is "request" and name is a + // forbidden header name, return. + // 5. Otherwise, if this’s guard is "request-no-cors" and + // name/value is not a no-CORS-safelisted request-header, + // return. + // 6. Otherwise, if this’s guard is "response" and name is a + // forbidden response-header name, return. + // Note: undici does not implement forbidden header names + if (this[kGuard] === 'immutable') { + throw new TypeError('immutable') + } else if (this[kGuard] === 'request-no-cors') { + // TODO + } + + // 7. Set (name, value) in this’s header list. + // 8. If this’s guard is "request-no-cors", then remove + // privileged no-CORS request headers from this + this[kHeadersList].set(name, value) + } + + // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie + getSetCookie () { + webidl.brandCheck(this, Headers) + + // 1. If this’s header list does not contain `Set-Cookie`, then return « ». + // 2. Return the values of all headers in this’s header list whose name is + // a byte-case-insensitive match for `Set-Cookie`, in order. + + const list = this[kHeadersList].cookies + + if (list) { + return [...list] + } + + return [] + } + + // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine + get [kHeadersSortedMap] () { + if (this[kHeadersList][kHeadersSortedMap]) { + return this[kHeadersList][kHeadersSortedMap] + } + + // 1. Let headers be an empty list of headers with the key being the name + // and value the value. + const headers = [] + + // 2. Let names be the result of convert header names to a sorted-lowercase + // set with all the names of the headers in list. + const names = [...this[kHeadersList]].sort((a, b) => a[0] < b[0] ? -1 : 1) + const cookies = this[kHeadersList].cookies + + // 3. For each name of names: + for (let i = 0; i < names.length; ++i) { + const [name, value] = names[i] + // 1. If name is `set-cookie`, then: + if (name === 'set-cookie') { + // 1. Let values be a list of all values of headers in list whose name + // is a byte-case-insensitive match for name, in order. + + // 2. For each value of values: + // 1. Append (name, value) to headers. + for (let j = 0; j < cookies.length; ++j) { + headers.push([name, cookies[j]]) + } + } else { + // 2. Otherwise: + + // 1. Let value be the result of getting name from list. + + // 2. Assert: value is non-null. + assert(value !== null) + + // 3. Append (name, value) to headers. + headers.push([name, value]) + } + } + + this[kHeadersList][kHeadersSortedMap] = headers + + // 4. Return headers. + return headers + } + + keys () { + webidl.brandCheck(this, Headers) + + if (this[kGuard] === 'immutable') { + const value = this[kHeadersSortedMap] + return makeIterator(() => value, 'Headers', + 'key') + } + + return makeIterator( + () => [...this[kHeadersSortedMap].values()], + 'Headers', + 'key' + ) + } + + values () { + webidl.brandCheck(this, Headers) + + if (this[kGuard] === 'immutable') { + const value = this[kHeadersSortedMap] + return makeIterator(() => value, 'Headers', + 'value') + } + + return makeIterator( + () => [...this[kHeadersSortedMap].values()], + 'Headers', + 'value' + ) + } + + entries () { + webidl.brandCheck(this, Headers) + + if (this[kGuard] === 'immutable') { + const value = this[kHeadersSortedMap] + return makeIterator(() => value, 'Headers', + 'key+value') + } + + return makeIterator( + () => [...this[kHeadersSortedMap].values()], + 'Headers', + 'key+value' + ) + } + + /** + * @param {(value: string, key: string, self: Headers) => void} callbackFn + * @param {unknown} thisArg + */ + forEach (callbackFn, thisArg = globalThis) { + webidl.brandCheck(this, Headers) + + webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.forEach' }) + + if (typeof callbackFn !== 'function') { + throw new TypeError( + "Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'." + ) + } + + for (const [key, value] of this) { + callbackFn.apply(thisArg, [value, key, this]) + } + } + + [Symbol.for('nodejs.util.inspect.custom')] () { + webidl.brandCheck(this, Headers) + + return this[kHeadersList] + } +} + +Headers.prototype[Symbol.iterator] = Headers.prototype.entries + +Object.defineProperties(Headers.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + getSetCookie: kEnumerableProperty, + keys: kEnumerableProperty, + values: kEnumerableProperty, + entries: kEnumerableProperty, + forEach: kEnumerableProperty, + [Symbol.iterator]: { enumerable: false }, + [Symbol.toStringTag]: { + value: 'Headers', + configurable: true + } +}) + +webidl.converters.HeadersInit = function (V) { + if (webidl.util.Type(V) === 'Object') { + if (V[Symbol.iterator]) { + return webidl.converters['sequence>'](V) + } + + return webidl.converters['record'](V) + } + + throw webidl.errors.conversionFailed({ + prefix: 'Headers constructor', + argument: 'Argument 1', + types: ['sequence>', 'record'] + }) +} + +module.exports = { + fill, + Headers, + HeadersList +} + + +/***/ }), + +/***/ 2315: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// https://github.com/Ethan-Arrowood/undici-fetch + + + +const { + Response, + makeNetworkError, + makeAppropriateNetworkError, + filterResponse, + makeResponse +} = __nccwpck_require__(8676) +const { Headers } = __nccwpck_require__(6349) +const { Request, makeRequest } = __nccwpck_require__(5194) +const zlib = __nccwpck_require__(3106) +const { + bytesMatch, + makePolicyContainer, + clonePolicyContainer, + requestBadPort, + TAOCheck, + appendRequestOriginHeader, + responseLocationURL, + requestCurrentURL, + setRequestReferrerPolicyOnRedirect, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + createOpaqueTimingInfo, + appendFetchMetadata, + corsCheck, + crossOriginResourcePolicyCheck, + determineRequestsReferrer, + coarsenedSharedCurrentTime, + createDeferredPromise, + isBlobLike, + sameOrigin, + isCancelled, + isAborted, + isErrorLike, + fullyReadBody, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlIsHttpHttpsScheme, + urlHasHttpsScheme +} = __nccwpck_require__(5523) +const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(9710) +const assert = __nccwpck_require__(2613) +const { safelyExtractBody } = __nccwpck_require__(8923) +const { + redirectStatusSet, + nullBodyStatus, + safeMethodsSet, + requestBodyHeader, + subresourceSet, + DOMException +} = __nccwpck_require__(7326) +const { kHeadersList } = __nccwpck_require__(6443) +const EE = __nccwpck_require__(4434) +const { Readable, pipeline } = __nccwpck_require__(2203) +const { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor } = __nccwpck_require__(3440) +const { dataURLProcessor, serializeAMimeType } = __nccwpck_require__(4322) +const { TransformStream } = __nccwpck_require__(3774) +const { getGlobalDispatcher } = __nccwpck_require__(2581) +const { webidl } = __nccwpck_require__(4222) +const { STATUS_CODES } = __nccwpck_require__(8611) +const GET_OR_HEAD = ['GET', 'HEAD'] + +/** @type {import('buffer').resolveObjectURL} */ +let resolveObjectURL +let ReadableStream = globalThis.ReadableStream + +class Fetch extends EE { + constructor (dispatcher) { + super() + + this.dispatcher = dispatcher + this.connection = null + this.dump = false + this.state = 'ongoing' + // 2 terminated listeners get added per request, + // but only 1 gets removed. If there are 20 redirects, + // 21 listeners will be added. + // See https://github.com/nodejs/undici/issues/1711 + // TODO (fix): Find and fix root cause for leaked listener. + this.setMaxListeners(21) + } + + terminate (reason) { + if (this.state !== 'ongoing') { + return + } + + this.state = 'terminated' + this.connection?.destroy(reason) + this.emit('terminated', reason) + } + + // https://fetch.spec.whatwg.org/#fetch-controller-abort + abort (error) { + if (this.state !== 'ongoing') { + return + } + + // 1. Set controller’s state to "aborted". + this.state = 'aborted' + + // 2. Let fallbackError be an "AbortError" DOMException. + // 3. Set error to fallbackError if it is not given. + if (!error) { + error = new DOMException('The operation was aborted.', 'AbortError') + } + + // 4. Let serializedError be StructuredSerialize(error). + // If that threw an exception, catch it, and let + // serializedError be StructuredSerialize(fallbackError). + + // 5. Set controller’s serialized abort reason to serializedError. + this.serializedAbortReason = error + + this.connection?.destroy(error) + this.emit('terminated', error) + } +} + +// https://fetch.spec.whatwg.org/#fetch-method +function fetch (input, init = {}) { + webidl.argumentLengthCheck(arguments, 1, { header: 'globalThis.fetch' }) + + // 1. Let p be a new promise. + const p = createDeferredPromise() + + // 2. Let requestObject be the result of invoking the initial value of + // Request as constructor with input and init as arguments. If this throws + // an exception, reject p with it and return p. + let requestObject + + try { + requestObject = new Request(input, init) + } catch (e) { + p.reject(e) + return p.promise + } + + // 3. Let request be requestObject’s request. + const request = requestObject[kState] + + // 4. If requestObject’s signal’s aborted flag is set, then: + if (requestObject.signal.aborted) { + // 1. Abort the fetch() call with p, request, null, and + // requestObject’s signal’s abort reason. + abortFetch(p, request, null, requestObject.signal.reason) + + // 2. Return p. + return p.promise + } + + // 5. Let globalObject be request’s client’s global object. + const globalObject = request.client.globalObject + + // 6. If globalObject is a ServiceWorkerGlobalScope object, then set + // request’s service-workers mode to "none". + if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') { + request.serviceWorkers = 'none' + } + + // 7. Let responseObject be null. + let responseObject = null + + // 8. Let relevantRealm be this’s relevant Realm. + const relevantRealm = null + + // 9. Let locallyAborted be false. + let locallyAborted = false + + // 10. Let controller be null. + let controller = null + + // 11. Add the following abort steps to requestObject’s signal: + addAbortListener( + requestObject.signal, + () => { + // 1. Set locallyAborted to true. + locallyAborted = true + + // 2. Assert: controller is non-null. + assert(controller != null) + + // 3. Abort controller with requestObject’s signal’s abort reason. + controller.abort(requestObject.signal.reason) + + // 4. Abort the fetch() call with p, request, responseObject, + // and requestObject’s signal’s abort reason. + abortFetch(p, request, responseObject, requestObject.signal.reason) + } + ) + + // 12. Let handleFetchDone given response response be to finalize and + // report timing with response, globalObject, and "fetch". + const handleFetchDone = (response) => + finalizeAndReportTiming(response, 'fetch') + + // 13. Set controller to the result of calling fetch given request, + // with processResponseEndOfBody set to handleFetchDone, and processResponse + // given response being these substeps: + + const processResponse = (response) => { + // 1. If locallyAborted is true, terminate these substeps. + if (locallyAborted) { + return Promise.resolve() + } + + // 2. If response’s aborted flag is set, then: + if (response.aborted) { + // 1. Let deserializedError be the result of deserialize a serialized + // abort reason given controller’s serialized abort reason and + // relevantRealm. + + // 2. Abort the fetch() call with p, request, responseObject, and + // deserializedError. + + abortFetch(p, request, responseObject, controller.serializedAbortReason) + return Promise.resolve() + } + + // 3. If response is a network error, then reject p with a TypeError + // and terminate these substeps. + if (response.type === 'error') { + p.reject( + Object.assign(new TypeError('fetch failed'), { cause: response.error }) + ) + return Promise.resolve() + } + + // 4. Set responseObject to the result of creating a Response object, + // given response, "immutable", and relevantRealm. + responseObject = new Response() + responseObject[kState] = response + responseObject[kRealm] = relevantRealm + responseObject[kHeaders][kHeadersList] = response.headersList + responseObject[kHeaders][kGuard] = 'immutable' + responseObject[kHeaders][kRealm] = relevantRealm + + // 5. Resolve p with responseObject. + p.resolve(responseObject) + } + + controller = fetching({ + request, + processResponseEndOfBody: handleFetchDone, + processResponse, + dispatcher: init.dispatcher ?? getGlobalDispatcher() // undici + }) + + // 14. Return p. + return p.promise +} + +// https://fetch.spec.whatwg.org/#finalize-and-report-timing +function finalizeAndReportTiming (response, initiatorType = 'other') { + // 1. If response is an aborted network error, then return. + if (response.type === 'error' && response.aborted) { + return + } + + // 2. If response’s URL list is null or empty, then return. + if (!response.urlList?.length) { + return + } + + // 3. Let originalURL be response’s URL list[0]. + const originalURL = response.urlList[0] + + // 4. Let timingInfo be response’s timing info. + let timingInfo = response.timingInfo + + // 5. Let cacheState be response’s cache state. + let cacheState = response.cacheState + + // 6. If originalURL’s scheme is not an HTTP(S) scheme, then return. + if (!urlIsHttpHttpsScheme(originalURL)) { + return + } + + // 7. If timingInfo is null, then return. + if (timingInfo === null) { + return + } + + // 8. If response’s timing allow passed flag is not set, then: + if (!response.timingAllowPassed) { + // 1. Set timingInfo to a the result of creating an opaque timing info for timingInfo. + timingInfo = createOpaqueTimingInfo({ + startTime: timingInfo.startTime + }) + + // 2. Set cacheState to the empty string. + cacheState = '' + } + + // 9. Set timingInfo’s end time to the coarsened shared current time + // given global’s relevant settings object’s cross-origin isolated + // capability. + // TODO: given global’s relevant settings object’s cross-origin isolated + // capability? + timingInfo.endTime = coarsenedSharedCurrentTime() + + // 10. Set response’s timing info to timingInfo. + response.timingInfo = timingInfo + + // 11. Mark resource timing for timingInfo, originalURL, initiatorType, + // global, and cacheState. + markResourceTiming( + timingInfo, + originalURL, + initiatorType, + globalThis, + cacheState + ) +} + +// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing +function markResourceTiming (timingInfo, originalURL, initiatorType, globalThis, cacheState) { + if (nodeMajor > 18 || (nodeMajor === 18 && nodeMinor >= 2)) { + performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis, cacheState) + } +} + +// https://fetch.spec.whatwg.org/#abort-fetch +function abortFetch (p, request, responseObject, error) { + // Note: AbortSignal.reason was added in node v17.2.0 + // which would give us an undefined error to reject with. + // Remove this once node v16 is no longer supported. + if (!error) { + error = new DOMException('The operation was aborted.', 'AbortError') + } + + // 1. Reject promise with error. + p.reject(error) + + // 2. If request’s body is not null and is readable, then cancel request’s + // body with error. + if (request.body != null && isReadable(request.body?.stream)) { + request.body.stream.cancel(error).catch((err) => { + if (err.code === 'ERR_INVALID_STATE') { + // Node bug? + return + } + throw err + }) + } + + // 3. If responseObject is null, then return. + if (responseObject == null) { + return + } + + // 4. Let response be responseObject’s response. + const response = responseObject[kState] + + // 5. If response’s body is not null and is readable, then error response’s + // body with error. + if (response.body != null && isReadable(response.body?.stream)) { + response.body.stream.cancel(error).catch((err) => { + if (err.code === 'ERR_INVALID_STATE') { + // Node bug? + return + } + throw err + }) + } +} + +// https://fetch.spec.whatwg.org/#fetching +function fetching ({ + request, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseEndOfBody, + processResponseConsumeBody, + useParallelQueue = false, + dispatcher // undici +}) { + // 1. Let taskDestination be null. + let taskDestination = null + + // 2. Let crossOriginIsolatedCapability be false. + let crossOriginIsolatedCapability = false + + // 3. If request’s client is non-null, then: + if (request.client != null) { + // 1. Set taskDestination to request’s client’s global object. + taskDestination = request.client.globalObject + + // 2. Set crossOriginIsolatedCapability to request’s client’s cross-origin + // isolated capability. + crossOriginIsolatedCapability = + request.client.crossOriginIsolatedCapability + } + + // 4. If useParallelQueue is true, then set taskDestination to the result of + // starting a new parallel queue. + // TODO + + // 5. Let timingInfo be a new fetch timing info whose start time and + // post-redirect start time are the coarsened shared current time given + // crossOriginIsolatedCapability. + const currenTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability) + const timingInfo = createOpaqueTimingInfo({ + startTime: currenTime + }) + + // 6. Let fetchParams be a new fetch params whose + // request is request, + // timing info is timingInfo, + // process request body chunk length is processRequestBodyChunkLength, + // process request end-of-body is processRequestEndOfBody, + // process response is processResponse, + // process response consume body is processResponseConsumeBody, + // process response end-of-body is processResponseEndOfBody, + // task destination is taskDestination, + // and cross-origin isolated capability is crossOriginIsolatedCapability. + const fetchParams = { + controller: new Fetch(dispatcher), + request, + timingInfo, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseConsumeBody, + processResponseEndOfBody, + taskDestination, + crossOriginIsolatedCapability + } + + // 7. If request’s body is a byte sequence, then set request’s body to + // request’s body as a body. + // NOTE: Since fetching is only called from fetch, body should already be + // extracted. + assert(!request.body || request.body.stream) + + // 8. If request’s window is "client", then set request’s window to request’s + // client, if request’s client’s global object is a Window object; otherwise + // "no-window". + if (request.window === 'client') { + // TODO: What if request.client is null? + request.window = + request.client?.globalObject?.constructor?.name === 'Window' + ? request.client + : 'no-window' + } + + // 9. If request’s origin is "client", then set request’s origin to request’s + // client’s origin. + if (request.origin === 'client') { + // TODO: What if request.client is null? + request.origin = request.client?.origin + } + + // 10. If all of the following conditions are true: + // TODO + + // 11. If request’s policy container is "client", then: + if (request.policyContainer === 'client') { + // 1. If request’s client is non-null, then set request’s policy + // container to a clone of request’s client’s policy container. [HTML] + if (request.client != null) { + request.policyContainer = clonePolicyContainer( + request.client.policyContainer + ) + } else { + // 2. Otherwise, set request’s policy container to a new policy + // container. + request.policyContainer = makePolicyContainer() + } + } + + // 12. If request’s header list does not contain `Accept`, then: + if (!request.headersList.contains('accept')) { + // 1. Let value be `*/*`. + const value = '*/*' + + // 2. A user agent should set value to the first matching statement, if + // any, switching on request’s destination: + // "document" + // "frame" + // "iframe" + // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8` + // "image" + // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5` + // "style" + // `text/css,*/*;q=0.1` + // TODO + + // 3. Append `Accept`/value to request’s header list. + request.headersList.append('accept', value) + } + + // 13. If request’s header list does not contain `Accept-Language`, then + // user agents should append `Accept-Language`/an appropriate value to + // request’s header list. + if (!request.headersList.contains('accept-language')) { + request.headersList.append('accept-language', '*') + } + + // 14. If request’s priority is null, then use request’s initiator and + // destination appropriately in setting request’s priority to a + // user-agent-defined object. + if (request.priority === null) { + // TODO + } + + // 15. If request is a subresource request, then: + if (subresourceSet.has(request.destination)) { + // TODO + } + + // 16. Run main fetch given fetchParams. + mainFetch(fetchParams) + .catch(err => { + fetchParams.controller.terminate(err) + }) + + // 17. Return fetchParam's controller + return fetchParams.controller +} + +// https://fetch.spec.whatwg.org/#concept-main-fetch +async function mainFetch (fetchParams, recursive = false) { + // 1. Let request be fetchParams’s request. + const request = fetchParams.request + + // 2. Let response be null. + let response = null + + // 3. If request’s local-URLs-only flag is set and request’s current URL is + // not local, then set response to a network error. + if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { + response = makeNetworkError('local URLs only') + } + + // 4. Run report Content Security Policy violations for request. + // TODO + + // 5. Upgrade request to a potentially trustworthy URL, if appropriate. + tryUpgradeRequestToAPotentiallyTrustworthyURL(request) + + // 6. If should request be blocked due to a bad port, should fetching request + // be blocked as mixed content, or should request be blocked by Content + // Security Policy returns blocked, then set response to a network error. + if (requestBadPort(request) === 'blocked') { + response = makeNetworkError('bad port') + } + // TODO: should fetching request be blocked as mixed content? + // TODO: should request be blocked by Content Security Policy? + + // 7. If request’s referrer policy is the empty string, then set request’s + // referrer policy to request’s policy container’s referrer policy. + if (request.referrerPolicy === '') { + request.referrerPolicy = request.policyContainer.referrerPolicy + } + + // 8. If request’s referrer is not "no-referrer", then set request’s + // referrer to the result of invoking determine request’s referrer. + if (request.referrer !== 'no-referrer') { + request.referrer = determineRequestsReferrer(request) + } + + // 9. Set request’s current URL’s scheme to "https" if all of the following + // conditions are true: + // - request’s current URL’s scheme is "http" + // - request’s current URL’s host is a domain + // - Matching request’s current URL’s host per Known HSTS Host Domain Name + // Matching results in either a superdomain match with an asserted + // includeSubDomains directive or a congruent match (with or without an + // asserted includeSubDomains directive). [HSTS] + // TODO + + // 10. If recursive is false, then run the remaining steps in parallel. + // TODO + + // 11. If response is null, then set response to the result of running + // the steps corresponding to the first matching statement: + if (response === null) { + response = await (async () => { + const currentURL = requestCurrentURL(request) + + if ( + // - request’s current URL’s origin is same origin with request’s origin, + // and request’s response tainting is "basic" + (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') || + // request’s current URL’s scheme is "data" + (currentURL.protocol === 'data:') || + // - request’s mode is "navigate" or "websocket" + (request.mode === 'navigate' || request.mode === 'websocket') + ) { + // 1. Set request’s response tainting to "basic". + request.responseTainting = 'basic' + + // 2. Return the result of running scheme fetch given fetchParams. + return await schemeFetch(fetchParams) + } + + // request’s mode is "same-origin" + if (request.mode === 'same-origin') { + // 1. Return a network error. + return makeNetworkError('request mode cannot be "same-origin"') + } + + // request’s mode is "no-cors" + if (request.mode === 'no-cors') { + // 1. If request’s redirect mode is not "follow", then return a network + // error. + if (request.redirect !== 'follow') { + return makeNetworkError( + 'redirect mode cannot be "follow" for "no-cors" request' + ) + } + + // 2. Set request’s response tainting to "opaque". + request.responseTainting = 'opaque' + + // 3. Return the result of running scheme fetch given fetchParams. + return await schemeFetch(fetchParams) + } + + // request’s current URL’s scheme is not an HTTP(S) scheme + if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { + // Return a network error. + return makeNetworkError('URL scheme must be a HTTP(S) scheme') + } + + // - request’s use-CORS-preflight flag is set + // - request’s unsafe-request flag is set and either request’s method is + // not a CORS-safelisted method or CORS-unsafe request-header names with + // request’s header list is not empty + // 1. Set request’s response tainting to "cors". + // 2. Let corsWithPreflightResponse be the result of running HTTP fetch + // given fetchParams and true. + // 3. If corsWithPreflightResponse is a network error, then clear cache + // entries using request. + // 4. Return corsWithPreflightResponse. + // TODO + + // Otherwise + // 1. Set request’s response tainting to "cors". + request.responseTainting = 'cors' + + // 2. Return the result of running HTTP fetch given fetchParams. + return await httpFetch(fetchParams) + })() + } + + // 12. If recursive is true, then return response. + if (recursive) { + return response + } + + // 13. If response is not a network error and response is not a filtered + // response, then: + if (response.status !== 0 && !response.internalResponse) { + // If request’s response tainting is "cors", then: + if (request.responseTainting === 'cors') { + // 1. Let headerNames be the result of extracting header list values + // given `Access-Control-Expose-Headers` and response’s header list. + // TODO + // 2. If request’s credentials mode is not "include" and headerNames + // contains `*`, then set response’s CORS-exposed header-name list to + // all unique header names in response’s header list. + // TODO + // 3. Otherwise, if headerNames is not null or failure, then set + // response’s CORS-exposed header-name list to headerNames. + // TODO + } + + // Set response to the following filtered response with response as its + // internal response, depending on request’s response tainting: + if (request.responseTainting === 'basic') { + response = filterResponse(response, 'basic') + } else if (request.responseTainting === 'cors') { + response = filterResponse(response, 'cors') + } else if (request.responseTainting === 'opaque') { + response = filterResponse(response, 'opaque') + } else { + assert(false) + } + } + + // 14. Let internalResponse be response, if response is a network error, + // and response’s internal response otherwise. + let internalResponse = + response.status === 0 ? response : response.internalResponse + + // 15. If internalResponse’s URL list is empty, then set it to a clone of + // request’s URL list. + if (internalResponse.urlList.length === 0) { + internalResponse.urlList.push(...request.urlList) + } + + // 16. If request’s timing allow failed flag is unset, then set + // internalResponse’s timing allow passed flag. + if (!request.timingAllowFailed) { + response.timingAllowPassed = true + } + + // 17. If response is not a network error and any of the following returns + // blocked + // - should internalResponse to request be blocked as mixed content + // - should internalResponse to request be blocked by Content Security Policy + // - should internalResponse to request be blocked due to its MIME type + // - should internalResponse to request be blocked due to nosniff + // TODO + + // 18. If response’s type is "opaque", internalResponse’s status is 206, + // internalResponse’s range-requested flag is set, and request’s header + // list does not contain `Range`, then set response and internalResponse + // to a network error. + if ( + response.type === 'opaque' && + internalResponse.status === 206 && + internalResponse.rangeRequested && + !request.headers.contains('range') + ) { + response = internalResponse = makeNetworkError() + } + + // 19. If response is not a network error and either request’s method is + // `HEAD` or `CONNECT`, or internalResponse’s status is a null body status, + // set internalResponse’s body to null and disregard any enqueuing toward + // it (if any). + if ( + response.status !== 0 && + (request.method === 'HEAD' || + request.method === 'CONNECT' || + nullBodyStatus.includes(internalResponse.status)) + ) { + internalResponse.body = null + fetchParams.controller.dump = true + } + + // 20. If request’s integrity metadata is not the empty string, then: + if (request.integrity) { + // 1. Let processBodyError be this step: run fetch finale given fetchParams + // and a network error. + const processBodyError = (reason) => + fetchFinale(fetchParams, makeNetworkError(reason)) + + // 2. If request’s response tainting is "opaque", or response’s body is null, + // then run processBodyError and abort these steps. + if (request.responseTainting === 'opaque' || response.body == null) { + processBodyError(response.error) + return + } + + // 3. Let processBody given bytes be these steps: + const processBody = (bytes) => { + // 1. If bytes do not match request’s integrity metadata, + // then run processBodyError and abort these steps. [SRI] + if (!bytesMatch(bytes, request.integrity)) { + processBodyError('integrity mismatch') + return + } + + // 2. Set response’s body to bytes as a body. + response.body = safelyExtractBody(bytes)[0] + + // 3. Run fetch finale given fetchParams and response. + fetchFinale(fetchParams, response) + } + + // 4. Fully read response’s body given processBody and processBodyError. + await fullyReadBody(response.body, processBody, processBodyError) + } else { + // 21. Otherwise, run fetch finale given fetchParams and response. + fetchFinale(fetchParams, response) + } +} + +// https://fetch.spec.whatwg.org/#concept-scheme-fetch +// given a fetch params fetchParams +function schemeFetch (fetchParams) { + // Note: since the connection is destroyed on redirect, which sets fetchParams to a + // cancelled state, we do not want this condition to trigger *unless* there have been + // no redirects. See https://github.com/nodejs/undici/issues/1776 + // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams. + if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { + return Promise.resolve(makeAppropriateNetworkError(fetchParams)) + } + + // 2. Let request be fetchParams’s request. + const { request } = fetchParams + + const { protocol: scheme } = requestCurrentURL(request) + + // 3. Switch on request’s current URL’s scheme and run the associated steps: + switch (scheme) { + case 'about:': { + // If request’s current URL’s path is the string "blank", then return a new response + // whose status message is `OK`, header list is « (`Content-Type`, `text/html;charset=utf-8`) », + // and body is the empty byte sequence as a body. + + // Otherwise, return a network error. + return Promise.resolve(makeNetworkError('about scheme is not supported')) + } + case 'blob:': { + if (!resolveObjectURL) { + resolveObjectURL = (__nccwpck_require__(181).resolveObjectURL) + } + + // 1. Let blobURLEntry be request’s current URL’s blob URL entry. + const blobURLEntry = requestCurrentURL(request) + + // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56 + // Buffer.resolveObjectURL does not ignore URL queries. + if (blobURLEntry.search.length !== 0) { + return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.')) + } + + const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString()) + + // 2. If request’s method is not `GET`, blobURLEntry is null, or blobURLEntry’s + // object is not a Blob object, then return a network error. + if (request.method !== 'GET' || !isBlobLike(blobURLEntryObject)) { + return Promise.resolve(makeNetworkError('invalid method')) + } + + // 3. Let bodyWithType be the result of safely extracting blobURLEntry’s object. + const bodyWithType = safelyExtractBody(blobURLEntryObject) + + // 4. Let body be bodyWithType’s body. + const body = bodyWithType[0] + + // 5. Let length be body’s length, serialized and isomorphic encoded. + const length = isomorphicEncode(`${body.length}`) + + // 6. Let type be bodyWithType’s type if it is non-null; otherwise the empty byte sequence. + const type = bodyWithType[1] ?? '' + + // 7. Return a new response whose status message is `OK`, header list is + // « (`Content-Length`, length), (`Content-Type`, type) », and body is body. + const response = makeResponse({ + statusText: 'OK', + headersList: [ + ['content-length', { name: 'Content-Length', value: length }], + ['content-type', { name: 'Content-Type', value: type }] + ] + }) + + response.body = body + + return Promise.resolve(response) + } + case 'data:': { + // 1. Let dataURLStruct be the result of running the + // data: URL processor on request’s current URL. + const currentURL = requestCurrentURL(request) + const dataURLStruct = dataURLProcessor(currentURL) + + // 2. If dataURLStruct is failure, then return a + // network error. + if (dataURLStruct === 'failure') { + return Promise.resolve(makeNetworkError('failed to fetch the data URL')) + } + + // 3. Let mimeType be dataURLStruct’s MIME type, serialized. + const mimeType = serializeAMimeType(dataURLStruct.mimeType) + + // 4. Return a response whose status message is `OK`, + // header list is « (`Content-Type`, mimeType) », + // and body is dataURLStruct’s body as a body. + return Promise.resolve(makeResponse({ + statusText: 'OK', + headersList: [ + ['content-type', { name: 'Content-Type', value: mimeType }] + ], + body: safelyExtractBody(dataURLStruct.body)[0] + })) + } + case 'file:': { + // For now, unfortunate as it is, file URLs are left as an exercise for the reader. + // When in doubt, return a network error. + return Promise.resolve(makeNetworkError('not implemented... yet...')) + } + case 'http:': + case 'https:': { + // Return the result of running HTTP fetch given fetchParams. + + return httpFetch(fetchParams) + .catch((err) => makeNetworkError(err)) + } + default: { + return Promise.resolve(makeNetworkError('unknown scheme')) + } + } +} + +// https://fetch.spec.whatwg.org/#finalize-response +function finalizeResponse (fetchParams, response) { + // 1. Set fetchParams’s request’s done flag. + fetchParams.request.done = true + + // 2, If fetchParams’s process response done is not null, then queue a fetch + // task to run fetchParams’s process response done given response, with + // fetchParams’s task destination. + if (fetchParams.processResponseDone != null) { + queueMicrotask(() => fetchParams.processResponseDone(response)) + } +} + +// https://fetch.spec.whatwg.org/#fetch-finale +function fetchFinale (fetchParams, response) { + // 1. If response is a network error, then: + if (response.type === 'error') { + // 1. Set response’s URL list to « fetchParams’s request’s URL list[0] ». + response.urlList = [fetchParams.request.urlList[0]] + + // 2. Set response’s timing info to the result of creating an opaque timing + // info for fetchParams’s timing info. + response.timingInfo = createOpaqueTimingInfo({ + startTime: fetchParams.timingInfo.startTime + }) + } + + // 2. Let processResponseEndOfBody be the following steps: + const processResponseEndOfBody = () => { + // 1. Set fetchParams’s request’s done flag. + fetchParams.request.done = true + + // If fetchParams’s process response end-of-body is not null, + // then queue a fetch task to run fetchParams’s process response + // end-of-body given response with fetchParams’s task destination. + if (fetchParams.processResponseEndOfBody != null) { + queueMicrotask(() => fetchParams.processResponseEndOfBody(response)) + } + } + + // 3. If fetchParams’s process response is non-null, then queue a fetch task + // to run fetchParams’s process response given response, with fetchParams’s + // task destination. + if (fetchParams.processResponse != null) { + queueMicrotask(() => fetchParams.processResponse(response)) + } + + // 4. If response’s body is null, then run processResponseEndOfBody. + if (response.body == null) { + processResponseEndOfBody() + } else { + // 5. Otherwise: + + // 1. Let transformStream be a new a TransformStream. + + // 2. Let identityTransformAlgorithm be an algorithm which, given chunk, + // enqueues chunk in transformStream. + const identityTransformAlgorithm = (chunk, controller) => { + controller.enqueue(chunk) + } + + // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm + // and flushAlgorithm set to processResponseEndOfBody. + const transformStream = new TransformStream({ + start () {}, + transform: identityTransformAlgorithm, + flush: processResponseEndOfBody + }, { + size () { + return 1 + } + }, { + size () { + return 1 + } + }) + + // 4. Set response’s body to the result of piping response’s body through transformStream. + response.body = { stream: response.body.stream.pipeThrough(transformStream) } + } + + // 6. If fetchParams’s process response consume body is non-null, then: + if (fetchParams.processResponseConsumeBody != null) { + // 1. Let processBody given nullOrBytes be this step: run fetchParams’s + // process response consume body given response and nullOrBytes. + const processBody = (nullOrBytes) => fetchParams.processResponseConsumeBody(response, nullOrBytes) + + // 2. Let processBodyError be this step: run fetchParams’s process + // response consume body given response and failure. + const processBodyError = (failure) => fetchParams.processResponseConsumeBody(response, failure) + + // 3. If response’s body is null, then queue a fetch task to run processBody + // given null, with fetchParams’s task destination. + if (response.body == null) { + queueMicrotask(() => processBody(null)) + } else { + // 4. Otherwise, fully read response’s body given processBody, processBodyError, + // and fetchParams’s task destination. + return fullyReadBody(response.body, processBody, processBodyError) + } + return Promise.resolve() + } +} + +// https://fetch.spec.whatwg.org/#http-fetch +async function httpFetch (fetchParams) { + // 1. Let request be fetchParams’s request. + const request = fetchParams.request + + // 2. Let response be null. + let response = null + + // 3. Let actualResponse be null. + let actualResponse = null + + // 4. Let timingInfo be fetchParams’s timing info. + const timingInfo = fetchParams.timingInfo + + // 5. If request’s service-workers mode is "all", then: + if (request.serviceWorkers === 'all') { + // TODO + } + + // 6. If response is null, then: + if (response === null) { + // 1. If makeCORSPreflight is true and one of these conditions is true: + // TODO + + // 2. If request’s redirect mode is "follow", then set request’s + // service-workers mode to "none". + if (request.redirect === 'follow') { + request.serviceWorkers = 'none' + } + + // 3. Set response and actualResponse to the result of running + // HTTP-network-or-cache fetch given fetchParams. + actualResponse = response = await httpNetworkOrCacheFetch(fetchParams) + + // 4. If request’s response tainting is "cors" and a CORS check + // for request and response returns failure, then return a network error. + if ( + request.responseTainting === 'cors' && + corsCheck(request, response) === 'failure' + ) { + return makeNetworkError('cors failure') + } + + // 5. If the TAO check for request and response returns failure, then set + // request’s timing allow failed flag. + if (TAOCheck(request, response) === 'failure') { + request.timingAllowFailed = true + } + } + + // 7. If either request’s response tainting or response’s type + // is "opaque", and the cross-origin resource policy check with + // request’s origin, request’s client, request’s destination, + // and actualResponse returns blocked, then return a network error. + if ( + (request.responseTainting === 'opaque' || response.type === 'opaque') && + crossOriginResourcePolicyCheck( + request.origin, + request.client, + request.destination, + actualResponse + ) === 'blocked' + ) { + return makeNetworkError('blocked') + } + + // 8. If actualResponse’s status is a redirect status, then: + if (redirectStatusSet.has(actualResponse.status)) { + // 1. If actualResponse’s status is not 303, request’s body is not null, + // and the connection uses HTTP/2, then user agents may, and are even + // encouraged to, transmit an RST_STREAM frame. + // See, https://github.com/whatwg/fetch/issues/1288 + if (request.redirect !== 'manual') { + fetchParams.controller.connection.destroy() + } + + // 2. Switch on request’s redirect mode: + if (request.redirect === 'error') { + // Set response to a network error. + response = makeNetworkError('unexpected redirect') + } else if (request.redirect === 'manual') { + // Set response to an opaque-redirect filtered response whose internal + // response is actualResponse. + // NOTE(spec): On the web this would return an `opaqueredirect` response, + // but that doesn't make sense server side. + // See https://github.com/nodejs/undici/issues/1193. + response = actualResponse + } else if (request.redirect === 'follow') { + // Set response to the result of running HTTP-redirect fetch given + // fetchParams and response. + response = await httpRedirectFetch(fetchParams, response) + } else { + assert(false) + } + } + + // 9. Set response’s timing info to timingInfo. + response.timingInfo = timingInfo + + // 10. Return response. + return response +} + +// https://fetch.spec.whatwg.org/#http-redirect-fetch +function httpRedirectFetch (fetchParams, response) { + // 1. Let request be fetchParams’s request. + const request = fetchParams.request + + // 2. Let actualResponse be response, if response is not a filtered response, + // and response’s internal response otherwise. + const actualResponse = response.internalResponse + ? response.internalResponse + : response + + // 3. Let locationURL be actualResponse’s location URL given request’s current + // URL’s fragment. + let locationURL + + try { + locationURL = responseLocationURL( + actualResponse, + requestCurrentURL(request).hash + ) + + // 4. If locationURL is null, then return response. + if (locationURL == null) { + return response + } + } catch (err) { + // 5. If locationURL is failure, then return a network error. + return Promise.resolve(makeNetworkError(err)) + } + + // 6. If locationURL’s scheme is not an HTTP(S) scheme, then return a network + // error. + if (!urlIsHttpHttpsScheme(locationURL)) { + return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme')) + } + + // 7. If request’s redirect count is 20, then return a network error. + if (request.redirectCount === 20) { + return Promise.resolve(makeNetworkError('redirect count exceeded')) + } + + // 8. Increase request’s redirect count by 1. + request.redirectCount += 1 + + // 9. If request’s mode is "cors", locationURL includes credentials, and + // request’s origin is not same origin with locationURL’s origin, then return + // a network error. + if ( + request.mode === 'cors' && + (locationURL.username || locationURL.password) && + !sameOrigin(request, locationURL) + ) { + return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')) + } + + // 10. If request’s response tainting is "cors" and locationURL includes + // credentials, then return a network error. + if ( + request.responseTainting === 'cors' && + (locationURL.username || locationURL.password) + ) { + return Promise.resolve(makeNetworkError( + 'URL cannot contain credentials for request mode "cors"' + )) + } + + // 11. If actualResponse’s status is not 303, request’s body is non-null, + // and request’s body’s source is null, then return a network error. + if ( + actualResponse.status !== 303 && + request.body != null && + request.body.source == null + ) { + return Promise.resolve(makeNetworkError()) + } + + // 12. If one of the following is true + // - actualResponse’s status is 301 or 302 and request’s method is `POST` + // - actualResponse’s status is 303 and request’s method is not `GET` or `HEAD` + if ( + ([301, 302].includes(actualResponse.status) && request.method === 'POST') || + (actualResponse.status === 303 && + !GET_OR_HEAD.includes(request.method)) + ) { + // then: + // 1. Set request’s method to `GET` and request’s body to null. + request.method = 'GET' + request.body = null + + // 2. For each headerName of request-body-header name, delete headerName from + // request’s header list. + for (const headerName of requestBodyHeader) { + request.headersList.delete(headerName) + } + } + + // 13. If request’s current URL’s origin is not same origin with locationURL’s + // origin, then for each headerName of CORS non-wildcard request-header name, + // delete headerName from request’s header list. + if (!sameOrigin(requestCurrentURL(request), locationURL)) { + // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name + request.headersList.delete('authorization') + + // https://fetch.spec.whatwg.org/#authentication-entries + request.headersList.delete('proxy-authorization', true) + + // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement. + request.headersList.delete('cookie') + request.headersList.delete('host') + } + + // 14. If request’s body is non-null, then set request’s body to the first return + // value of safely extracting request’s body’s source. + if (request.body != null) { + assert(request.body.source != null) + request.body = safelyExtractBody(request.body.source)[0] + } + + // 15. Let timingInfo be fetchParams’s timing info. + const timingInfo = fetchParams.timingInfo + + // 16. Set timingInfo’s redirect end time and post-redirect start time to the + // coarsened shared current time given fetchParams’s cross-origin isolated + // capability. + timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = + coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability) + + // 17. If timingInfo’s redirect start time is 0, then set timingInfo’s + // redirect start time to timingInfo’s start time. + if (timingInfo.redirectStartTime === 0) { + timingInfo.redirectStartTime = timingInfo.startTime + } + + // 18. Append locationURL to request’s URL list. + request.urlList.push(locationURL) + + // 19. Invoke set request’s referrer policy on redirect on request and + // actualResponse. + setRequestReferrerPolicyOnRedirect(request, actualResponse) + + // 20. Return the result of running main fetch given fetchParams and true. + return mainFetch(fetchParams, true) +} + +// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch +async function httpNetworkOrCacheFetch ( + fetchParams, + isAuthenticationFetch = false, + isNewConnectionFetch = false +) { + // 1. Let request be fetchParams’s request. + const request = fetchParams.request + + // 2. Let httpFetchParams be null. + let httpFetchParams = null + + // 3. Let httpRequest be null. + let httpRequest = null + + // 4. Let response be null. + let response = null + + // 5. Let storedResponse be null. + // TODO: cache + + // 6. Let httpCache be null. + const httpCache = null + + // 7. Let the revalidatingFlag be unset. + const revalidatingFlag = false + + // 8. Run these steps, but abort when the ongoing fetch is terminated: + + // 1. If request’s window is "no-window" and request’s redirect mode is + // "error", then set httpFetchParams to fetchParams and httpRequest to + // request. + if (request.window === 'no-window' && request.redirect === 'error') { + httpFetchParams = fetchParams + httpRequest = request + } else { + // Otherwise: + + // 1. Set httpRequest to a clone of request. + httpRequest = makeRequest(request) + + // 2. Set httpFetchParams to a copy of fetchParams. + httpFetchParams = { ...fetchParams } + + // 3. Set httpFetchParams’s request to httpRequest. + httpFetchParams.request = httpRequest + } + + // 3. Let includeCredentials be true if one of + const includeCredentials = + request.credentials === 'include' || + (request.credentials === 'same-origin' && + request.responseTainting === 'basic') + + // 4. Let contentLength be httpRequest’s body’s length, if httpRequest’s + // body is non-null; otherwise null. + const contentLength = httpRequest.body ? httpRequest.body.length : null + + // 5. Let contentLengthHeaderValue be null. + let contentLengthHeaderValue = null + + // 6. If httpRequest’s body is null and httpRequest’s method is `POST` or + // `PUT`, then set contentLengthHeaderValue to `0`. + if ( + httpRequest.body == null && + ['POST', 'PUT'].includes(httpRequest.method) + ) { + contentLengthHeaderValue = '0' + } + + // 7. If contentLength is non-null, then set contentLengthHeaderValue to + // contentLength, serialized and isomorphic encoded. + if (contentLength != null) { + contentLengthHeaderValue = isomorphicEncode(`${contentLength}`) + } + + // 8. If contentLengthHeaderValue is non-null, then append + // `Content-Length`/contentLengthHeaderValue to httpRequest’s header + // list. + if (contentLengthHeaderValue != null) { + httpRequest.headersList.append('content-length', contentLengthHeaderValue) + } + + // 9. If contentLengthHeaderValue is non-null, then append (`Content-Length`, + // contentLengthHeaderValue) to httpRequest’s header list. + + // 10. If contentLength is non-null and httpRequest’s keepalive is true, + // then: + if (contentLength != null && httpRequest.keepalive) { + // NOTE: keepalive is a noop outside of browser context. + } + + // 11. If httpRequest’s referrer is a URL, then append + // `Referer`/httpRequest’s referrer, serialized and isomorphic encoded, + // to httpRequest’s header list. + if (httpRequest.referrer instanceof URL) { + httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href)) + } + + // 12. Append a request `Origin` header for httpRequest. + appendRequestOriginHeader(httpRequest) + + // 13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA] + appendFetchMetadata(httpRequest) + + // 14. If httpRequest’s header list does not contain `User-Agent`, then + // user agents should append `User-Agent`/default `User-Agent` value to + // httpRequest’s header list. + if (!httpRequest.headersList.contains('user-agent')) { + httpRequest.headersList.append('user-agent', typeof esbuildDetection === 'undefined' ? 'undici' : 'node') + } + + // 15. If httpRequest’s cache mode is "default" and httpRequest’s header + // list contains `If-Modified-Since`, `If-None-Match`, + // `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set + // httpRequest’s cache mode to "no-store". + if ( + httpRequest.cache === 'default' && + (httpRequest.headersList.contains('if-modified-since') || + httpRequest.headersList.contains('if-none-match') || + httpRequest.headersList.contains('if-unmodified-since') || + httpRequest.headersList.contains('if-match') || + httpRequest.headersList.contains('if-range')) + ) { + httpRequest.cache = 'no-store' + } + + // 16. If httpRequest’s cache mode is "no-cache", httpRequest’s prevent + // no-cache cache-control header modification flag is unset, and + // httpRequest’s header list does not contain `Cache-Control`, then append + // `Cache-Control`/`max-age=0` to httpRequest’s header list. + if ( + httpRequest.cache === 'no-cache' && + !httpRequest.preventNoCacheCacheControlHeaderModification && + !httpRequest.headersList.contains('cache-control') + ) { + httpRequest.headersList.append('cache-control', 'max-age=0') + } + + // 17. If httpRequest’s cache mode is "no-store" or "reload", then: + if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') { + // 1. If httpRequest’s header list does not contain `Pragma`, then append + // `Pragma`/`no-cache` to httpRequest’s header list. + if (!httpRequest.headersList.contains('pragma')) { + httpRequest.headersList.append('pragma', 'no-cache') + } + + // 2. If httpRequest’s header list does not contain `Cache-Control`, + // then append `Cache-Control`/`no-cache` to httpRequest’s header list. + if (!httpRequest.headersList.contains('cache-control')) { + httpRequest.headersList.append('cache-control', 'no-cache') + } + } + + // 18. If httpRequest’s header list contains `Range`, then append + // `Accept-Encoding`/`identity` to httpRequest’s header list. + if (httpRequest.headersList.contains('range')) { + httpRequest.headersList.append('accept-encoding', 'identity') + } + + // 19. Modify httpRequest’s header list per HTTP. Do not append a given + // header if httpRequest’s header list contains that header’s name. + // TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129 + if (!httpRequest.headersList.contains('accept-encoding')) { + if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { + httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate') + } else { + httpRequest.headersList.append('accept-encoding', 'gzip, deflate') + } + } + + httpRequest.headersList.delete('host') + + // 20. If includeCredentials is true, then: + if (includeCredentials) { + // 1. If the user agent is not configured to block cookies for httpRequest + // (see section 7 of [COOKIES]), then: + // TODO: credentials + // 2. If httpRequest’s header list does not contain `Authorization`, then: + // TODO: credentials + } + + // 21. If there’s a proxy-authentication entry, use it as appropriate. + // TODO: proxy-authentication + + // 22. Set httpCache to the result of determining the HTTP cache + // partition, given httpRequest. + // TODO: cache + + // 23. If httpCache is null, then set httpRequest’s cache mode to + // "no-store". + if (httpCache == null) { + httpRequest.cache = 'no-store' + } + + // 24. If httpRequest’s cache mode is neither "no-store" nor "reload", + // then: + if (httpRequest.mode !== 'no-store' && httpRequest.mode !== 'reload') { + // TODO: cache + } + + // 9. If aborted, then return the appropriate network error for fetchParams. + // TODO + + // 10. If response is null, then: + if (response == null) { + // 1. If httpRequest’s cache mode is "only-if-cached", then return a + // network error. + if (httpRequest.mode === 'only-if-cached') { + return makeNetworkError('only if cached') + } + + // 2. Let forwardResponse be the result of running HTTP-network fetch + // given httpFetchParams, includeCredentials, and isNewConnectionFetch. + const forwardResponse = await httpNetworkFetch( + httpFetchParams, + includeCredentials, + isNewConnectionFetch + ) + + // 3. If httpRequest’s method is unsafe and forwardResponse’s status is + // in the range 200 to 399, inclusive, invalidate appropriate stored + // responses in httpCache, as per the "Invalidation" chapter of HTTP + // Caching, and set storedResponse to null. [HTTP-CACHING] + if ( + !safeMethodsSet.has(httpRequest.method) && + forwardResponse.status >= 200 && + forwardResponse.status <= 399 + ) { + // TODO: cache + } + + // 4. If the revalidatingFlag is set and forwardResponse’s status is 304, + // then: + if (revalidatingFlag && forwardResponse.status === 304) { + // TODO: cache + } + + // 5. If response is null, then: + if (response == null) { + // 1. Set response to forwardResponse. + response = forwardResponse + + // 2. Store httpRequest and forwardResponse in httpCache, as per the + // "Storing Responses in Caches" chapter of HTTP Caching. [HTTP-CACHING] + // TODO: cache + } + } + + // 11. Set response’s URL list to a clone of httpRequest’s URL list. + response.urlList = [...httpRequest.urlList] + + // 12. If httpRequest’s header list contains `Range`, then set response’s + // range-requested flag. + if (httpRequest.headersList.contains('range')) { + response.rangeRequested = true + } + + // 13. Set response’s request-includes-credentials to includeCredentials. + response.requestIncludesCredentials = includeCredentials + + // 14. If response’s status is 401, httpRequest’s response tainting is not + // "cors", includeCredentials is true, and request’s window is an environment + // settings object, then: + // TODO + + // 15. If response’s status is 407, then: + if (response.status === 407) { + // 1. If request’s window is "no-window", then return a network error. + if (request.window === 'no-window') { + return makeNetworkError() + } + + // 2. ??? + + // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams. + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams) + } + + // 4. Prompt the end user as appropriate in request’s window and store + // the result as a proxy-authentication entry. [HTTP-AUTH] + // TODO: Invoke some kind of callback? + + // 5. Set response to the result of running HTTP-network-or-cache fetch given + // fetchParams. + // TODO + return makeNetworkError('proxy authentication required') + } + + // 16. If all of the following are true + if ( + // response’s status is 421 + response.status === 421 && + // isNewConnectionFetch is false + !isNewConnectionFetch && + // request’s body is null, or request’s body is non-null and request’s body’s source is non-null + (request.body == null || request.body.source != null) + ) { + // then: + + // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams. + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams) + } + + // 2. Set response to the result of running HTTP-network-or-cache + // fetch given fetchParams, isAuthenticationFetch, and true. + + // TODO (spec): The spec doesn't specify this but we need to cancel + // the active response before we can start a new one. + // https://github.com/whatwg/fetch/issues/1293 + fetchParams.controller.connection.destroy() + + response = await httpNetworkOrCacheFetch( + fetchParams, + isAuthenticationFetch, + true + ) + } + + // 17. If isAuthenticationFetch is true, then create an authentication entry + if (isAuthenticationFetch) { + // TODO + } + + // 18. Return response. + return response +} + +// https://fetch.spec.whatwg.org/#http-network-fetch +async function httpNetworkFetch ( + fetchParams, + includeCredentials = false, + forceNewConnection = false +) { + assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed) + + fetchParams.controller.connection = { + abort: null, + destroyed: false, + destroy (err) { + if (!this.destroyed) { + this.destroyed = true + this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError')) + } + } + } + + // 1. Let request be fetchParams’s request. + const request = fetchParams.request + + // 2. Let response be null. + let response = null + + // 3. Let timingInfo be fetchParams’s timing info. + const timingInfo = fetchParams.timingInfo + + // 4. Let httpCache be the result of determining the HTTP cache partition, + // given request. + // TODO: cache + const httpCache = null + + // 5. If httpCache is null, then set request’s cache mode to "no-store". + if (httpCache == null) { + request.cache = 'no-store' + } + + // 6. Let networkPartitionKey be the result of determining the network + // partition key given request. + // TODO + + // 7. Let newConnection be "yes" if forceNewConnection is true; otherwise + // "no". + const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars + + // 8. Switch on request’s mode: + if (request.mode === 'websocket') { + // Let connection be the result of obtaining a WebSocket connection, + // given request’s current URL. + // TODO + } else { + // Let connection be the result of obtaining a connection, given + // networkPartitionKey, request’s current URL’s origin, + // includeCredentials, and forceNewConnection. + // TODO + } + + // 9. Run these steps, but abort when the ongoing fetch is terminated: + + // 1. If connection is failure, then return a network error. + + // 2. Set timingInfo’s final connection timing info to the result of + // calling clamp and coarsen connection timing info with connection’s + // timing info, timingInfo’s post-redirect start time, and fetchParams’s + // cross-origin isolated capability. + + // 3. If connection is not an HTTP/2 connection, request’s body is non-null, + // and request’s body’s source is null, then append (`Transfer-Encoding`, + // `chunked`) to request’s header list. + + // 4. Set timingInfo’s final network-request start time to the coarsened + // shared current time given fetchParams’s cross-origin isolated + // capability. + + // 5. Set response to the result of making an HTTP request over connection + // using request with the following caveats: + + // - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS] + // [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH] + + // - If request’s body is non-null, and request’s body’s source is null, + // then the user agent may have a buffer of up to 64 kibibytes and store + // a part of request’s body in that buffer. If the user agent reads from + // request’s body beyond that buffer’s size and the user agent needs to + // resend request, then instead return a network error. + + // - Set timingInfo’s final network-response start time to the coarsened + // shared current time given fetchParams’s cross-origin isolated capability, + // immediately after the user agent’s HTTP parser receives the first byte + // of the response (e.g., frame header bytes for HTTP/2 or response status + // line for HTTP/1.x). + + // - Wait until all the headers are transmitted. + + // - Any responses whose status is in the range 100 to 199, inclusive, + // and is not 101, are to be ignored, except for the purposes of setting + // timingInfo’s final network-response start time above. + + // - If request’s header list contains `Transfer-Encoding`/`chunked` and + // response is transferred via HTTP/1.0 or older, then return a network + // error. + + // - If the HTTP request results in a TLS client certificate dialog, then: + + // 1. If request’s window is an environment settings object, make the + // dialog available in request’s window. + + // 2. Otherwise, return a network error. + + // To transmit request’s body body, run these steps: + let requestBody = null + // 1. If body is null and fetchParams’s process request end-of-body is + // non-null, then queue a fetch task given fetchParams’s process request + // end-of-body and fetchParams’s task destination. + if (request.body == null && fetchParams.processRequestEndOfBody) { + queueMicrotask(() => fetchParams.processRequestEndOfBody()) + } else if (request.body != null) { + // 2. Otherwise, if body is non-null: + + // 1. Let processBodyChunk given bytes be these steps: + const processBodyChunk = async function * (bytes) { + // 1. If the ongoing fetch is terminated, then abort these steps. + if (isCancelled(fetchParams)) { + return + } + + // 2. Run this step in parallel: transmit bytes. + yield bytes + + // 3. If fetchParams’s process request body is non-null, then run + // fetchParams’s process request body given bytes’s length. + fetchParams.processRequestBodyChunkLength?.(bytes.byteLength) + } + + // 2. Let processEndOfBody be these steps: + const processEndOfBody = () => { + // 1. If fetchParams is canceled, then abort these steps. + if (isCancelled(fetchParams)) { + return + } + + // 2. If fetchParams’s process request end-of-body is non-null, + // then run fetchParams’s process request end-of-body. + if (fetchParams.processRequestEndOfBody) { + fetchParams.processRequestEndOfBody() + } + } + + // 3. Let processBodyError given e be these steps: + const processBodyError = (e) => { + // 1. If fetchParams is canceled, then abort these steps. + if (isCancelled(fetchParams)) { + return + } + + // 2. If e is an "AbortError" DOMException, then abort fetchParams’s controller. + if (e.name === 'AbortError') { + fetchParams.controller.abort() + } else { + fetchParams.controller.terminate(e) + } + } + + // 4. Incrementally read request’s body given processBodyChunk, processEndOfBody, + // processBodyError, and fetchParams’s task destination. + requestBody = (async function * () { + try { + for await (const bytes of request.body.stream) { + yield * processBodyChunk(bytes) + } + processEndOfBody() + } catch (err) { + processBodyError(err) + } + })() + } + + try { + // socket is only provided for websockets + const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody }) + + if (socket) { + response = makeResponse({ status, statusText, headersList, socket }) + } else { + const iterator = body[Symbol.asyncIterator]() + fetchParams.controller.next = () => iterator.next() + + response = makeResponse({ status, statusText, headersList }) + } + } catch (err) { + // 10. If aborted, then: + if (err.name === 'AbortError') { + // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame. + fetchParams.controller.connection.destroy() + + // 2. Return the appropriate network error for fetchParams. + return makeAppropriateNetworkError(fetchParams, err) + } + + return makeNetworkError(err) + } + + // 11. Let pullAlgorithm be an action that resumes the ongoing fetch + // if it is suspended. + const pullAlgorithm = () => { + fetchParams.controller.resume() + } + + // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams’s + // controller with reason, given reason. + const cancelAlgorithm = (reason) => { + fetchParams.controller.abort(reason) + } + + // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by + // the user agent. + // TODO + + // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object + // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent. + // TODO + + // 15. Let stream be a new ReadableStream. + // 16. Set up stream with pullAlgorithm set to pullAlgorithm, + // cancelAlgorithm set to cancelAlgorithm, highWaterMark set to + // highWaterMark, and sizeAlgorithm set to sizeAlgorithm. + if (!ReadableStream) { + ReadableStream = (__nccwpck_require__(3774).ReadableStream) + } + + const stream = new ReadableStream( + { + async start (controller) { + fetchParams.controller.controller = controller + }, + async pull (controller) { + await pullAlgorithm(controller) + }, + async cancel (reason) { + await cancelAlgorithm(reason) + } + }, + { + highWaterMark: 0, + size () { + return 1 + } + } + ) + + // 17. Run these steps, but abort when the ongoing fetch is terminated: + + // 1. Set response’s body to a new body whose stream is stream. + response.body = { stream } + + // 2. If response is not a network error and request’s cache mode is + // not "no-store", then update response in httpCache for request. + // TODO + + // 3. If includeCredentials is true and the user agent is not configured + // to block cookies for request (see section 7 of [COOKIES]), then run the + // "set-cookie-string" parsing algorithm (see section 5.2 of [COOKIES]) on + // the value of each header whose name is a byte-case-insensitive match for + // `Set-Cookie` in response’s header list, if any, and request’s current URL. + // TODO + + // 18. If aborted, then: + // TODO + + // 19. Run these steps in parallel: + + // 1. Run these steps, but abort when fetchParams is canceled: + fetchParams.controller.on('terminated', onAborted) + fetchParams.controller.resume = async () => { + // 1. While true + while (true) { + // 1-3. See onData... + + // 4. Set bytes to the result of handling content codings given + // codings and bytes. + let bytes + let isFailure + try { + const { done, value } = await fetchParams.controller.next() + + if (isAborted(fetchParams)) { + break + } + + bytes = done ? undefined : value + } catch (err) { + if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { + // zlib doesn't like empty streams. + bytes = undefined + } else { + bytes = err + + // err may be propagated from the result of calling readablestream.cancel, + // which might not be an error. https://github.com/nodejs/undici/issues/2009 + isFailure = true + } + } + + if (bytes === undefined) { + // 2. Otherwise, if the bytes transmission for response’s message + // body is done normally and stream is readable, then close + // stream, finalize response for fetchParams and response, and + // abort these in-parallel steps. + readableStreamClose(fetchParams.controller.controller) + + finalizeResponse(fetchParams, response) + + return + } + + // 5. Increase timingInfo’s decoded body size by bytes’s length. + timingInfo.decodedBodySize += bytes?.byteLength ?? 0 + + // 6. If bytes is failure, then terminate fetchParams’s controller. + if (isFailure) { + fetchParams.controller.terminate(bytes) + return + } + + // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes + // into stream. + fetchParams.controller.controller.enqueue(new Uint8Array(bytes)) + + // 8. If stream is errored, then terminate the ongoing fetch. + if (isErrored(stream)) { + fetchParams.controller.terminate() + return + } + + // 9. If stream doesn’t need more data ask the user agent to suspend + // the ongoing fetch. + if (!fetchParams.controller.controller.desiredSize) { + return + } + } + } + + // 2. If aborted, then: + function onAborted (reason) { + // 2. If fetchParams is aborted, then: + if (isAborted(fetchParams)) { + // 1. Set response’s aborted flag. + response.aborted = true + + // 2. If stream is readable, then error stream with the result of + // deserialize a serialized abort reason given fetchParams’s + // controller’s serialized abort reason and an + // implementation-defined realm. + if (isReadable(stream)) { + fetchParams.controller.controller.error( + fetchParams.controller.serializedAbortReason + ) + } + } else { + // 3. Otherwise, if stream is readable, error stream with a TypeError. + if (isReadable(stream)) { + fetchParams.controller.controller.error(new TypeError('terminated', { + cause: isErrorLike(reason) ? reason : undefined + })) + } + } + + // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame. + // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so. + fetchParams.controller.connection.destroy() + } + + // 20. Return response. + return response + + async function dispatch ({ body }) { + const url = requestCurrentURL(request) + /** @type {import('../..').Agent} */ + const agent = fetchParams.controller.dispatcher + + return new Promise((resolve, reject) => agent.dispatch( + { + path: url.pathname + url.search, + origin: url.origin, + method: request.method, + body: fetchParams.controller.dispatcher.isMockActive ? request.body && (request.body.source || request.body.stream) : body, + headers: request.headersList.entries, + maxRedirections: 0, + upgrade: request.mode === 'websocket' ? 'websocket' : undefined + }, + { + body: null, + abort: null, + + onConnect (abort) { + // TODO (fix): Do we need connection here? + const { connection } = fetchParams.controller + + if (connection.destroyed) { + abort(new DOMException('The operation was aborted.', 'AbortError')) + } else { + fetchParams.controller.on('terminated', abort) + this.abort = connection.abort = abort + } + }, + + onHeaders (status, headersList, resume, statusText) { + if (status < 200) { + return + } + + let codings = [] + let location = '' + + const headers = new Headers() + + // For H2, the headers are a plain JS object + // We distinguish between them and iterate accordingly + if (Array.isArray(headersList)) { + for (let n = 0; n < headersList.length; n += 2) { + const key = headersList[n + 0].toString('latin1') + const val = headersList[n + 1].toString('latin1') + if (key.toLowerCase() === 'content-encoding') { + // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1 + // "All content-coding values are case-insensitive..." + codings = val.toLowerCase().split(',').map((x) => x.trim()) + } else if (key.toLowerCase() === 'location') { + location = val + } + + headers[kHeadersList].append(key, val) + } + } else { + const keys = Object.keys(headersList) + for (const key of keys) { + const val = headersList[key] + if (key.toLowerCase() === 'content-encoding') { + // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1 + // "All content-coding values are case-insensitive..." + codings = val.toLowerCase().split(',').map((x) => x.trim()).reverse() + } else if (key.toLowerCase() === 'location') { + location = val + } + + headers[kHeadersList].append(key, val) + } + } + + this.body = new Readable({ read: resume }) + + const decoders = [] + + const willFollow = request.redirect === 'follow' && + location && + redirectStatusSet.has(status) + + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding + if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) { + for (const coding of codings) { + // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2 + if (coding === 'x-gzip' || coding === 'gzip') { + decoders.push(zlib.createGunzip({ + // 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. + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })) + } else if (coding === 'deflate') { + decoders.push(zlib.createInflate()) + } else if (coding === 'br') { + decoders.push(zlib.createBrotliDecompress()) + } else { + decoders.length = 0 + break + } + } + } + + resolve({ + status, + statusText, + headersList: headers[kHeadersList], + body: decoders.length + ? pipeline(this.body, ...decoders, () => { }) + : this.body.on('error', () => {}) + }) + + return true + }, + + onData (chunk) { + if (fetchParams.controller.dump) { + return + } + + // 1. If one or more bytes have been transmitted from response’s + // message body, then: + + // 1. Let bytes be the transmitted bytes. + const bytes = chunk + + // 2. Let codings be the result of extracting header list values + // given `Content-Encoding` and response’s header list. + // See pullAlgorithm. + + // 3. Increase timingInfo’s encoded body size by bytes’s length. + timingInfo.encodedBodySize += bytes.byteLength + + // 4. See pullAlgorithm... + + return this.body.push(bytes) + }, + + onComplete () { + if (this.abort) { + fetchParams.controller.off('terminated', this.abort) + } + + fetchParams.controller.ended = true + + this.body.push(null) + }, + + onError (error) { + if (this.abort) { + fetchParams.controller.off('terminated', this.abort) + } + + this.body?.destroy(error) + + fetchParams.controller.terminate(error) + + reject(error) + }, + + onUpgrade (status, headersList, socket) { + if (status !== 101) { + return + } + + const headers = new Headers() + + for (let n = 0; n < headersList.length; n += 2) { + const key = headersList[n + 0].toString('latin1') + const val = headersList[n + 1].toString('latin1') + + headers[kHeadersList].append(key, val) + } + + resolve({ + status, + statusText: STATUS_CODES[status], + headersList: headers[kHeadersList], + socket + }) + + return true + } + } + )) + } +} + +module.exports = { + fetch, + Fetch, + fetching, + finalizeAndReportTiming +} + + +/***/ }), + +/***/ 5194: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +/* globals AbortController */ + + + +const { extractBody, mixinBody, cloneBody } = __nccwpck_require__(8923) +const { Headers, fill: fillHeaders, HeadersList } = __nccwpck_require__(6349) +const { FinalizationRegistry } = __nccwpck_require__(3194)() +const util = __nccwpck_require__(3440) +const { + isValidHTTPToken, + sameOrigin, + normalizeMethod, + makePolicyContainer, + normalizeMethodRecord +} = __nccwpck_require__(5523) +const { + forbiddenMethodsSet, + corsSafeListedMethodsSet, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + requestDuplex +} = __nccwpck_require__(7326) +const { kEnumerableProperty } = util +const { kHeaders, kSignal, kState, kGuard, kRealm } = __nccwpck_require__(9710) +const { webidl } = __nccwpck_require__(4222) +const { getGlobalOrigin } = __nccwpck_require__(5628) +const { URLSerializer } = __nccwpck_require__(4322) +const { kHeadersList, kConstruct } = __nccwpck_require__(6443) +const assert = __nccwpck_require__(2613) +const { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __nccwpck_require__(4434) + +let TransformStream = globalThis.TransformStream + +const kAbortController = Symbol('abortController') + +const requestFinalizer = new FinalizationRegistry(({ signal, abort }) => { + signal.removeEventListener('abort', abort) +}) + +// https://fetch.spec.whatwg.org/#request-class +class Request { + // https://fetch.spec.whatwg.org/#dom-request + constructor (input, init = {}) { + if (input === kConstruct) { + return + } + + webidl.argumentLengthCheck(arguments, 1, { header: 'Request constructor' }) + + input = webidl.converters.RequestInfo(input) + init = webidl.converters.RequestInit(init) + + // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object + this[kRealm] = { + settingsObject: { + baseUrl: getGlobalOrigin(), + get origin () { + return this.baseUrl?.origin + }, + policyContainer: makePolicyContainer() + } + } + + // 1. Let request be null. + let request = null + + // 2. Let fallbackMode be null. + let fallbackMode = null + + // 3. Let baseURL be this’s relevant settings object’s API base URL. + const baseUrl = this[kRealm].settingsObject.baseUrl + + // 4. Let signal be null. + let signal = null + + // 5. If input is a string, then: + if (typeof input === 'string') { + // 1. Let parsedURL be the result of parsing input with baseURL. + // 2. If parsedURL is failure, then throw a TypeError. + let parsedURL + try { + parsedURL = new URL(input, baseUrl) + } catch (err) { + throw new TypeError('Failed to parse URL from ' + input, { cause: err }) + } + + // 3. If parsedURL includes credentials, then throw a TypeError. + if (parsedURL.username || parsedURL.password) { + throw new TypeError( + 'Request cannot be constructed from a URL that includes credentials: ' + + input + ) + } + + // 4. Set request to a new request whose URL is parsedURL. + request = makeRequest({ urlList: [parsedURL] }) + + // 5. Set fallbackMode to "cors". + fallbackMode = 'cors' + } else { + // 6. Otherwise: + + // 7. Assert: input is a Request object. + assert(input instanceof Request) + + // 8. Set request to input’s request. + request = input[kState] + + // 9. Set signal to input’s signal. + signal = input[kSignal] + } + + // 7. Let origin be this’s relevant settings object’s origin. + const origin = this[kRealm].settingsObject.origin + + // 8. Let window be "client". + let window = 'client' + + // 9. If request’s window is an environment settings object and its origin + // is same origin with origin, then set window to request’s window. + if ( + request.window?.constructor?.name === 'EnvironmentSettingsObject' && + sameOrigin(request.window, origin) + ) { + window = request.window + } + + // 10. If init["window"] exists and is non-null, then throw a TypeError. + if (init.window != null) { + throw new TypeError(`'window' option '${window}' must be null`) + } + + // 11. If init["window"] exists, then set window to "no-window". + if ('window' in init) { + window = 'no-window' + } + + // 12. Set request to a new request with the following properties: + request = makeRequest({ + // URL request’s URL. + // undici implementation note: this is set as the first item in request's urlList in makeRequest + // method request’s method. + method: request.method, + // header list A copy of request’s header list. + // undici implementation note: headersList is cloned in makeRequest + headersList: request.headersList, + // unsafe-request flag Set. + unsafeRequest: request.unsafeRequest, + // client This’s relevant settings object. + client: this[kRealm].settingsObject, + // window window. + window, + // priority request’s priority. + priority: request.priority, + // origin request’s origin. The propagation of the origin is only significant for navigation requests + // being handled by a service worker. In this scenario a request can have an origin that is different + // from the current client. + origin: request.origin, + // referrer request’s referrer. + referrer: request.referrer, + // referrer policy request’s referrer policy. + referrerPolicy: request.referrerPolicy, + // mode request’s mode. + mode: request.mode, + // credentials mode request’s credentials mode. + credentials: request.credentials, + // cache mode request’s cache mode. + cache: request.cache, + // redirect mode request’s redirect mode. + redirect: request.redirect, + // integrity metadata request’s integrity metadata. + integrity: request.integrity, + // keepalive request’s keepalive. + keepalive: request.keepalive, + // reload-navigation flag request’s reload-navigation flag. + reloadNavigation: request.reloadNavigation, + // history-navigation flag request’s history-navigation flag. + historyNavigation: request.historyNavigation, + // URL list A clone of request’s URL list. + urlList: [...request.urlList] + }) + + const initHasKey = Object.keys(init).length !== 0 + + // 13. If init is not empty, then: + if (initHasKey) { + // 1. If request’s mode is "navigate", then set it to "same-origin". + if (request.mode === 'navigate') { + request.mode = 'same-origin' + } + + // 2. Unset request’s reload-navigation flag. + request.reloadNavigation = false + + // 3. Unset request’s history-navigation flag. + request.historyNavigation = false + + // 4. Set request’s origin to "client". + request.origin = 'client' + + // 5. Set request’s referrer to "client" + request.referrer = 'client' + + // 6. Set request’s referrer policy to the empty string. + request.referrerPolicy = '' + + // 7. Set request’s URL to request’s current URL. + request.url = request.urlList[request.urlList.length - 1] + + // 8. Set request’s URL list to « request’s URL ». + request.urlList = [request.url] + } + + // 14. If init["referrer"] exists, then: + if (init.referrer !== undefined) { + // 1. Let referrer be init["referrer"]. + const referrer = init.referrer + + // 2. If referrer is the empty string, then set request’s referrer to "no-referrer". + if (referrer === '') { + request.referrer = 'no-referrer' + } else { + // 1. Let parsedReferrer be the result of parsing referrer with + // baseURL. + // 2. If parsedReferrer is failure, then throw a TypeError. + let parsedReferrer + try { + parsedReferrer = new URL(referrer, baseUrl) + } catch (err) { + throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }) + } + + // 3. If one of the following is true + // - parsedReferrer’s scheme is "about" and path is the string "client" + // - parsedReferrer’s origin is not same origin with origin + // then set request’s referrer to "client". + if ( + (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') || + (origin && !sameOrigin(parsedReferrer, this[kRealm].settingsObject.baseUrl)) + ) { + request.referrer = 'client' + } else { + // 4. Otherwise, set request’s referrer to parsedReferrer. + request.referrer = parsedReferrer + } + } + } + + // 15. If init["referrerPolicy"] exists, then set request’s referrer policy + // to it. + if (init.referrerPolicy !== undefined) { + request.referrerPolicy = init.referrerPolicy + } + + // 16. Let mode be init["mode"] if it exists, and fallbackMode otherwise. + let mode + if (init.mode !== undefined) { + mode = init.mode + } else { + mode = fallbackMode + } + + // 17. If mode is "navigate", then throw a TypeError. + if (mode === 'navigate') { + throw webidl.errors.exception({ + header: 'Request constructor', + message: 'invalid request mode navigate.' + }) + } + + // 18. If mode is non-null, set request’s mode to mode. + if (mode != null) { + request.mode = mode + } + + // 19. If init["credentials"] exists, then set request’s credentials mode + // to it. + if (init.credentials !== undefined) { + request.credentials = init.credentials + } + + // 18. If init["cache"] exists, then set request’s cache mode to it. + if (init.cache !== undefined) { + request.cache = init.cache + } + + // 21. If request’s cache mode is "only-if-cached" and request’s mode is + // not "same-origin", then throw a TypeError. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + throw new TypeError( + "'only-if-cached' can be set only with 'same-origin' mode" + ) + } + + // 22. If init["redirect"] exists, then set request’s redirect mode to it. + if (init.redirect !== undefined) { + request.redirect = init.redirect + } + + // 23. If init["integrity"] exists, then set request’s integrity metadata to it. + if (init.integrity != null) { + request.integrity = String(init.integrity) + } + + // 24. If init["keepalive"] exists, then set request’s keepalive to it. + if (init.keepalive !== undefined) { + request.keepalive = Boolean(init.keepalive) + } + + // 25. If init["method"] exists, then: + if (init.method !== undefined) { + // 1. Let method be init["method"]. + let method = init.method + + // 2. If method is not a method or method is a forbidden method, then + // throw a TypeError. + if (!isValidHTTPToken(method)) { + throw new TypeError(`'${method}' is not a valid HTTP method.`) + } + + if (forbiddenMethodsSet.has(method.toUpperCase())) { + throw new TypeError(`'${method}' HTTP method is unsupported.`) + } + + // 3. Normalize method. + method = normalizeMethodRecord[method] ?? normalizeMethod(method) + + // 4. Set request’s method to method. + request.method = method + } + + // 26. If init["signal"] exists, then set signal to it. + if (init.signal !== undefined) { + signal = init.signal + } + + // 27. Set this’s request to request. + this[kState] = request + + // 28. Set this’s signal to a new AbortSignal object with this’s relevant + // Realm. + // TODO: could this be simplified with AbortSignal.any + // (https://dom.spec.whatwg.org/#dom-abortsignal-any) + const ac = new AbortController() + this[kSignal] = ac.signal + this[kSignal][kRealm] = this[kRealm] + + // 29. If signal is not null, then make this’s signal follow signal. + if (signal != null) { + if ( + !signal || + typeof signal.aborted !== 'boolean' || + typeof signal.addEventListener !== 'function' + ) { + throw new TypeError( + "Failed to construct 'Request': member signal is not of type AbortSignal." + ) + } + + if (signal.aborted) { + ac.abort(signal.reason) + } else { + // Keep a strong ref to ac while request object + // is alive. This is needed to prevent AbortController + // from being prematurely garbage collected. + // See, https://github.com/nodejs/undici/issues/1926. + this[kAbortController] = ac + + const acRef = new WeakRef(ac) + const abort = function () { + const ac = acRef.deref() + if (ac !== undefined) { + ac.abort(this.reason) + } + } + + // Third-party AbortControllers may not work with these. + // See, https://github.com/nodejs/undici/pull/1910#issuecomment-1464495619. + try { + // If the max amount of listeners is equal to the default, increase it + // This is only available in node >= v19.9.0 + if (typeof getMaxListeners === 'function' && getMaxListeners(signal) === defaultMaxListeners) { + setMaxListeners(100, signal) + } else if (getEventListeners(signal, 'abort').length >= defaultMaxListeners) { + setMaxListeners(100, signal) + } + } catch {} + + util.addAbortListener(signal, abort) + requestFinalizer.register(ac, { signal, abort }) + } + } + + // 30. Set this’s headers to a new Headers object with this’s relevant + // Realm, whose header list is request’s header list and guard is + // "request". + this[kHeaders] = new Headers(kConstruct) + this[kHeaders][kHeadersList] = request.headersList + this[kHeaders][kGuard] = 'request' + this[kHeaders][kRealm] = this[kRealm] + + // 31. If this’s request’s mode is "no-cors", then: + if (mode === 'no-cors') { + // 1. If this’s request’s method is not a CORS-safelisted method, + // then throw a TypeError. + if (!corsSafeListedMethodsSet.has(request.method)) { + throw new TypeError( + `'${request.method} is unsupported in no-cors mode.` + ) + } + + // 2. Set this’s headers’s guard to "request-no-cors". + this[kHeaders][kGuard] = 'request-no-cors' + } + + // 32. If init is not empty, then: + if (initHasKey) { + /** @type {HeadersList} */ + const headersList = this[kHeaders][kHeadersList] + // 1. Let headers be a copy of this’s headers and its associated header + // list. + // 2. If init["headers"] exists, then set headers to init["headers"]. + const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList) + + // 3. Empty this’s headers’s header list. + headersList.clear() + + // 4. If headers is a Headers object, then for each header in its header + // list, append header’s name/header’s value to this’s headers. + if (headers instanceof HeadersList) { + for (const [key, val] of headers) { + headersList.append(key, val) + } + // Note: Copy the `set-cookie` meta-data. + headersList.cookies = headers.cookies + } else { + // 5. Otherwise, fill this’s headers with headers. + fillHeaders(this[kHeaders], headers) + } + } + + // 33. Let inputBody be input’s request’s body if input is a Request + // object; otherwise null. + const inputBody = input instanceof Request ? input[kState].body : null + + // 34. If either init["body"] exists and is non-null or inputBody is + // non-null, and request’s method is `GET` or `HEAD`, then throw a + // TypeError. + if ( + (init.body != null || inputBody != null) && + (request.method === 'GET' || request.method === 'HEAD') + ) { + throw new TypeError('Request with GET/HEAD method cannot have body.') + } + + // 35. Let initBody be null. + let initBody = null + + // 36. If init["body"] exists and is non-null, then: + if (init.body != null) { + // 1. Let Content-Type be null. + // 2. Set initBody and Content-Type to the result of extracting + // init["body"], with keepalive set to request’s keepalive. + const [extractedBody, contentType] = extractBody( + init.body, + request.keepalive + ) + initBody = extractedBody + + // 3, If Content-Type is non-null and this’s headers’s header list does + // not contain `Content-Type`, then append `Content-Type`/Content-Type to + // this’s headers. + if (contentType && !this[kHeaders][kHeadersList].contains('content-type')) { + this[kHeaders].append('content-type', contentType) + } + } + + // 37. Let inputOrInitBody be initBody if it is non-null; otherwise + // inputBody. + const inputOrInitBody = initBody ?? inputBody + + // 38. If inputOrInitBody is non-null and inputOrInitBody’s source is + // null, then: + if (inputOrInitBody != null && inputOrInitBody.source == null) { + // 1. If initBody is non-null and init["duplex"] does not exist, + // then throw a TypeError. + if (initBody != null && init.duplex == null) { + throw new TypeError('RequestInit: duplex option is required when sending a body.') + } + + // 2. If this’s request’s mode is neither "same-origin" nor "cors", + // then throw a TypeError. + if (request.mode !== 'same-origin' && request.mode !== 'cors') { + throw new TypeError( + 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' + ) + } + + // 3. Set this’s request’s use-CORS-preflight flag. + request.useCORSPreflightFlag = true + } + + // 39. Let finalBody be inputOrInitBody. + let finalBody = inputOrInitBody + + // 40. If initBody is null and inputBody is non-null, then: + if (initBody == null && inputBody != null) { + // 1. If input is unusable, then throw a TypeError. + if (util.isDisturbed(inputBody.stream) || inputBody.stream.locked) { + throw new TypeError( + 'Cannot construct a Request with a Request object that has already been used.' + ) + } + + // 2. Set finalBody to the result of creating a proxy for inputBody. + if (!TransformStream) { + TransformStream = (__nccwpck_require__(3774).TransformStream) + } + + // https://streams.spec.whatwg.org/#readablestream-create-a-proxy + const identityTransform = new TransformStream() + inputBody.stream.pipeThrough(identityTransform) + finalBody = { + source: inputBody.source, + length: inputBody.length, + stream: identityTransform.readable + } + } + + // 41. Set this’s request’s body to finalBody. + this[kState].body = finalBody + } + + // Returns request’s HTTP method, which is "GET" by default. + get method () { + webidl.brandCheck(this, Request) + + // The method getter steps are to return this’s request’s method. + return this[kState].method + } + + // Returns the URL of request as a string. + get url () { + webidl.brandCheck(this, Request) + + // The url getter steps are to return this’s request’s URL, serialized. + return URLSerializer(this[kState].url) + } + + // Returns a Headers object consisting of the headers associated with request. + // Note that headers added in the network layer by the user agent will not + // be accounted for in this object, e.g., the "Host" header. + get headers () { + webidl.brandCheck(this, Request) + + // The headers getter steps are to return this’s headers. + return this[kHeaders] + } + + // Returns the kind of resource requested by request, e.g., "document" + // or "script". + get destination () { + webidl.brandCheck(this, Request) + + // The destination getter are to return this’s request’s destination. + return this[kState].destination + } + + // Returns the referrer of request. Its value can be a same-origin URL if + // explicitly set in init, the empty string to indicate no referrer, and + // "about:client" when defaulting to the global’s default. This is used + // during fetching to determine the value of the `Referer` header of the + // request being made. + get referrer () { + webidl.brandCheck(this, Request) + + // 1. If this’s request’s referrer is "no-referrer", then return the + // empty string. + if (this[kState].referrer === 'no-referrer') { + return '' + } + + // 2. If this’s request’s referrer is "client", then return + // "about:client". + if (this[kState].referrer === 'client') { + return 'about:client' + } + + // Return this’s request’s referrer, serialized. + return this[kState].referrer.toString() + } + + // Returns the referrer policy associated with request. + // This is used during fetching to compute the value of the request’s + // referrer. + get referrerPolicy () { + webidl.brandCheck(this, Request) + + // The referrerPolicy getter steps are to return this’s request’s referrer policy. + return this[kState].referrerPolicy + } + + // Returns the mode associated with request, which is a string indicating + // whether the request will use CORS, or will be restricted to same-origin + // URLs. + get mode () { + webidl.brandCheck(this, Request) + + // The mode getter steps are to return this’s request’s mode. + return this[kState].mode + } + + // Returns the credentials mode associated with request, + // which is a string indicating whether credentials will be sent with the + // request always, never, or only when sent to a same-origin URL. + get credentials () { + // The credentials getter steps are to return this’s request’s credentials mode. + return this[kState].credentials + } + + // Returns the cache mode associated with request, + // which is a string indicating how the request will + // interact with the browser’s cache when fetching. + get cache () { + webidl.brandCheck(this, Request) + + // The cache getter steps are to return this’s request’s cache mode. + return this[kState].cache + } + + // Returns the redirect mode associated with request, + // which is a string indicating how redirects for the + // request will be handled during fetching. A request + // will follow redirects by default. + get redirect () { + webidl.brandCheck(this, Request) + + // The redirect getter steps are to return this’s request’s redirect mode. + return this[kState].redirect + } + + // Returns request’s subresource integrity metadata, which is a + // cryptographic hash of the resource being fetched. Its value + // consists of multiple hashes separated by whitespace. [SRI] + get integrity () { + webidl.brandCheck(this, Request) + + // The integrity getter steps are to return this’s request’s integrity + // metadata. + return this[kState].integrity + } + + // Returns a boolean indicating whether or not request can outlive the + // global in which it was created. + get keepalive () { + webidl.brandCheck(this, Request) + + // The keepalive getter steps are to return this’s request’s keepalive. + return this[kState].keepalive + } + + // Returns a boolean indicating whether or not request is for a reload + // navigation. + get isReloadNavigation () { + webidl.brandCheck(this, Request) + + // The isReloadNavigation getter steps are to return true if this’s + // request’s reload-navigation flag is set; otherwise false. + return this[kState].reloadNavigation + } + + // Returns a boolean indicating whether or not request is for a history + // navigation (a.k.a. back-foward navigation). + get isHistoryNavigation () { + webidl.brandCheck(this, Request) + + // The isHistoryNavigation getter steps are to return true if this’s request’s + // history-navigation flag is set; otherwise false. + return this[kState].historyNavigation + } + + // Returns the signal associated with request, which is an AbortSignal + // object indicating whether or not request has been aborted, and its + // abort event handler. + get signal () { + webidl.brandCheck(this, Request) + + // The signal getter steps are to return this’s signal. + return this[kSignal] + } + + get body () { + webidl.brandCheck(this, Request) + + return this[kState].body ? this[kState].body.stream : null + } + + get bodyUsed () { + webidl.brandCheck(this, Request) + + return !!this[kState].body && util.isDisturbed(this[kState].body.stream) + } + + get duplex () { + webidl.brandCheck(this, Request) + + return 'half' + } + + // Returns a clone of request. + clone () { + webidl.brandCheck(this, Request) + + // 1. If this is unusable, then throw a TypeError. + if (this.bodyUsed || this.body?.locked) { + throw new TypeError('unusable') + } + + // 2. Let clonedRequest be the result of cloning this’s request. + const clonedRequest = cloneRequest(this[kState]) + + // 3. Let clonedRequestObject be the result of creating a Request object, + // given clonedRequest, this’s headers’s guard, and this’s relevant Realm. + const clonedRequestObject = new Request(kConstruct) + clonedRequestObject[kState] = clonedRequest + clonedRequestObject[kRealm] = this[kRealm] + clonedRequestObject[kHeaders] = new Headers(kConstruct) + clonedRequestObject[kHeaders][kHeadersList] = clonedRequest.headersList + clonedRequestObject[kHeaders][kGuard] = this[kHeaders][kGuard] + clonedRequestObject[kHeaders][kRealm] = this[kHeaders][kRealm] + + // 4. Make clonedRequestObject’s signal follow this’s signal. + const ac = new AbortController() + if (this.signal.aborted) { + ac.abort(this.signal.reason) + } else { + util.addAbortListener( + this.signal, + () => { + ac.abort(this.signal.reason) + } + ) + } + clonedRequestObject[kSignal] = ac.signal + + // 4. Return clonedRequestObject. + return clonedRequestObject + } +} + +mixinBody(Request) + +function makeRequest (init) { + // https://fetch.spec.whatwg.org/#requests + const request = { + method: 'GET', + localURLsOnly: false, + unsafeRequest: false, + body: null, + client: null, + reservedClient: null, + replacesClientId: '', + window: 'client', + keepalive: false, + serviceWorkers: 'all', + initiator: '', + destination: '', + priority: null, + origin: 'client', + policyContainer: 'client', + referrer: 'client', + referrerPolicy: '', + mode: 'no-cors', + useCORSPreflightFlag: false, + credentials: 'same-origin', + useCredentials: false, + cache: 'default', + redirect: 'follow', + integrity: '', + cryptoGraphicsNonceMetadata: '', + parserMetadata: '', + reloadNavigation: false, + historyNavigation: false, + userActivation: false, + taintedOrigin: false, + redirectCount: 0, + responseTainting: 'basic', + preventNoCacheCacheControlHeaderModification: false, + done: false, + timingAllowFailed: false, + ...init, + headersList: init.headersList + ? new HeadersList(init.headersList) + : new HeadersList() + } + request.url = request.urlList[0] + return request +} + +// https://fetch.spec.whatwg.org/#concept-request-clone +function cloneRequest (request) { + // To clone a request request, run these steps: + + // 1. Let newRequest be a copy of request, except for its body. + const newRequest = makeRequest({ ...request, body: null }) + + // 2. If request’s body is non-null, set newRequest’s body to the + // result of cloning request’s body. + if (request.body != null) { + newRequest.body = cloneBody(request.body) + } + + // 3. Return newRequest. + return newRequest +} + +Object.defineProperties(Request.prototype, { + method: kEnumerableProperty, + url: kEnumerableProperty, + headers: kEnumerableProperty, + redirect: kEnumerableProperty, + clone: kEnumerableProperty, + signal: kEnumerableProperty, + duplex: kEnumerableProperty, + destination: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + isHistoryNavigation: kEnumerableProperty, + isReloadNavigation: kEnumerableProperty, + keepalive: kEnumerableProperty, + integrity: kEnumerableProperty, + cache: kEnumerableProperty, + credentials: kEnumerableProperty, + attribute: kEnumerableProperty, + referrerPolicy: kEnumerableProperty, + referrer: kEnumerableProperty, + mode: kEnumerableProperty, + [Symbol.toStringTag]: { + value: 'Request', + configurable: true + } +}) + +webidl.converters.Request = webidl.interfaceConverter( + Request +) + +// https://fetch.spec.whatwg.org/#requestinfo +webidl.converters.RequestInfo = function (V) { + if (typeof V === 'string') { + return webidl.converters.USVString(V) + } + + if (V instanceof Request) { + return webidl.converters.Request(V) + } + + return webidl.converters.USVString(V) +} + +webidl.converters.AbortSignal = webidl.interfaceConverter( + AbortSignal +) + +// https://fetch.spec.whatwg.org/#requestinit +webidl.converters.RequestInit = webidl.dictionaryConverter([ + { + key: 'method', + converter: webidl.converters.ByteString + }, + { + key: 'headers', + converter: webidl.converters.HeadersInit + }, + { + key: 'body', + converter: webidl.nullableConverter( + webidl.converters.BodyInit + ) + }, + { + key: 'referrer', + converter: webidl.converters.USVString + }, + { + key: 'referrerPolicy', + converter: webidl.converters.DOMString, + // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy + allowedValues: referrerPolicy + }, + { + key: 'mode', + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#concept-request-mode + allowedValues: requestMode + }, + { + key: 'credentials', + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcredentials + allowedValues: requestCredentials + }, + { + key: 'cache', + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcache + allowedValues: requestCache + }, + { + key: 'redirect', + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestredirect + allowedValues: requestRedirect + }, + { + key: 'integrity', + converter: webidl.converters.DOMString + }, + { + key: 'keepalive', + converter: webidl.converters.boolean + }, + { + key: 'signal', + converter: webidl.nullableConverter( + (signal) => webidl.converters.AbortSignal( + signal, + { strict: false } + ) + ) + }, + { + key: 'window', + converter: webidl.converters.any + }, + { + key: 'duplex', + converter: webidl.converters.DOMString, + allowedValues: requestDuplex + } +]) + +module.exports = { Request, makeRequest } + + +/***/ }), + +/***/ 8676: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { Headers, HeadersList, fill } = __nccwpck_require__(6349) +const { extractBody, cloneBody, mixinBody } = __nccwpck_require__(8923) +const util = __nccwpck_require__(3440) +const { kEnumerableProperty } = util +const { + isValidReasonPhrase, + isCancelled, + isAborted, + isBlobLike, + serializeJavascriptValueToJSONString, + isErrorLike, + isomorphicEncode +} = __nccwpck_require__(5523) +const { + redirectStatusSet, + nullBodyStatus, + DOMException +} = __nccwpck_require__(7326) +const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(9710) +const { webidl } = __nccwpck_require__(4222) +const { FormData } = __nccwpck_require__(3073) +const { getGlobalOrigin } = __nccwpck_require__(5628) +const { URLSerializer } = __nccwpck_require__(4322) +const { kHeadersList, kConstruct } = __nccwpck_require__(6443) +const assert = __nccwpck_require__(2613) +const { types } = __nccwpck_require__(9023) + +const ReadableStream = globalThis.ReadableStream || (__nccwpck_require__(3774).ReadableStream) +const textEncoder = new TextEncoder('utf-8') + +// https://fetch.spec.whatwg.org/#response-class +class Response { + // Creates network error Response. + static error () { + // TODO + const relevantRealm = { settingsObject: {} } + + // The static error() method steps are to return the result of creating a + // Response object, given a new network error, "immutable", and this’s + // relevant Realm. + const responseObject = new Response() + responseObject[kState] = makeNetworkError() + responseObject[kRealm] = relevantRealm + responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList + responseObject[kHeaders][kGuard] = 'immutable' + responseObject[kHeaders][kRealm] = relevantRealm + return responseObject + } + + // https://fetch.spec.whatwg.org/#dom-response-json + static json (data, init = {}) { + webidl.argumentLengthCheck(arguments, 1, { header: 'Response.json' }) + + if (init !== null) { + init = webidl.converters.ResponseInit(init) + } + + // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data. + const bytes = textEncoder.encode( + serializeJavascriptValueToJSONString(data) + ) + + // 2. Let body be the result of extracting bytes. + const body = extractBody(bytes) + + // 3. Let responseObject be the result of creating a Response object, given a new response, + // "response", and this’s relevant Realm. + const relevantRealm = { settingsObject: {} } + const responseObject = new Response() + responseObject[kRealm] = relevantRealm + responseObject[kHeaders][kGuard] = 'response' + responseObject[kHeaders][kRealm] = relevantRealm + + // 4. Perform initialize a response given responseObject, init, and (body, "application/json"). + initializeResponse(responseObject, init, { body: body[0], type: 'application/json' }) + + // 5. Return responseObject. + return responseObject + } + + // Creates a redirect Response that redirects to url with status status. + static redirect (url, status = 302) { + const relevantRealm = { settingsObject: {} } + + webidl.argumentLengthCheck(arguments, 1, { header: 'Response.redirect' }) + + url = webidl.converters.USVString(url) + status = webidl.converters['unsigned short'](status) + + // 1. Let parsedURL be the result of parsing url with current settings + // object’s API base URL. + // 2. If parsedURL is failure, then throw a TypeError. + // TODO: base-URL? + let parsedURL + try { + parsedURL = new URL(url, getGlobalOrigin()) + } catch (err) { + throw Object.assign(new TypeError('Failed to parse URL from ' + url), { + cause: err + }) + } + + // 3. If status is not a redirect status, then throw a RangeError. + if (!redirectStatusSet.has(status)) { + throw new RangeError('Invalid status code ' + status) + } + + // 4. Let responseObject be the result of creating a Response object, + // given a new response, "immutable", and this’s relevant Realm. + const responseObject = new Response() + responseObject[kRealm] = relevantRealm + responseObject[kHeaders][kGuard] = 'immutable' + responseObject[kHeaders][kRealm] = relevantRealm + + // 5. Set responseObject’s response’s status to status. + responseObject[kState].status = status + + // 6. Let value be parsedURL, serialized and isomorphic encoded. + const value = isomorphicEncode(URLSerializer(parsedURL)) + + // 7. Append `Location`/value to responseObject’s response’s header list. + responseObject[kState].headersList.append('location', value) + + // 8. Return responseObject. + return responseObject + } + + // https://fetch.spec.whatwg.org/#dom-response + constructor (body = null, init = {}) { + if (body !== null) { + body = webidl.converters.BodyInit(body) + } + + init = webidl.converters.ResponseInit(init) + + // TODO + this[kRealm] = { settingsObject: {} } + + // 1. Set this’s response to a new response. + this[kState] = makeResponse({}) + + // 2. Set this’s headers to a new Headers object with this’s relevant + // Realm, whose header list is this’s response’s header list and guard + // is "response". + this[kHeaders] = new Headers(kConstruct) + this[kHeaders][kGuard] = 'response' + this[kHeaders][kHeadersList] = this[kState].headersList + this[kHeaders][kRealm] = this[kRealm] + + // 3. Let bodyWithType be null. + let bodyWithType = null + + // 4. If body is non-null, then set bodyWithType to the result of extracting body. + if (body != null) { + const [extractedBody, type] = extractBody(body) + bodyWithType = { body: extractedBody, type } + } + + // 5. Perform initialize a response given this, init, and bodyWithType. + initializeResponse(this, init, bodyWithType) + } + + // Returns response’s type, e.g., "cors". + get type () { + webidl.brandCheck(this, Response) + + // The type getter steps are to return this’s response’s type. + return this[kState].type + } + + // Returns response’s URL, if it has one; otherwise the empty string. + get url () { + webidl.brandCheck(this, Response) + + const urlList = this[kState].urlList + + // The url getter steps are to return the empty string if this’s + // response’s URL is null; otherwise this’s response’s URL, + // serialized with exclude fragment set to true. + const url = urlList[urlList.length - 1] ?? null + + if (url === null) { + return '' + } + + return URLSerializer(url, true) + } + + // Returns whether response was obtained through a redirect. + get redirected () { + webidl.brandCheck(this, Response) + + // The redirected getter steps are to return true if this’s response’s URL + // list has more than one item; otherwise false. + return this[kState].urlList.length > 1 + } + + // Returns response’s status. + get status () { + webidl.brandCheck(this, Response) + + // The status getter steps are to return this’s response’s status. + return this[kState].status + } + + // Returns whether response’s status is an ok status. + get ok () { + webidl.brandCheck(this, Response) + + // The ok getter steps are to return true if this’s response’s status is an + // ok status; otherwise false. + return this[kState].status >= 200 && this[kState].status <= 299 + } + + // Returns response’s status message. + get statusText () { + webidl.brandCheck(this, Response) + + // The statusText getter steps are to return this’s response’s status + // message. + return this[kState].statusText + } + + // Returns response’s headers as Headers. + get headers () { + webidl.brandCheck(this, Response) + + // The headers getter steps are to return this’s headers. + return this[kHeaders] + } + + get body () { + webidl.brandCheck(this, Response) + + return this[kState].body ? this[kState].body.stream : null + } + + get bodyUsed () { + webidl.brandCheck(this, Response) + + return !!this[kState].body && util.isDisturbed(this[kState].body.stream) + } + + // Returns a clone of response. + clone () { + webidl.brandCheck(this, Response) + + // 1. If this is unusable, then throw a TypeError. + if (this.bodyUsed || (this.body && this.body.locked)) { + throw webidl.errors.exception({ + header: 'Response.clone', + message: 'Body has already been consumed.' + }) + } + + // 2. Let clonedResponse be the result of cloning this’s response. + const clonedResponse = cloneResponse(this[kState]) + + // 3. Return the result of creating a Response object, given + // clonedResponse, this’s headers’s guard, and this’s relevant Realm. + const clonedResponseObject = new Response() + clonedResponseObject[kState] = clonedResponse + clonedResponseObject[kRealm] = this[kRealm] + clonedResponseObject[kHeaders][kHeadersList] = clonedResponse.headersList + clonedResponseObject[kHeaders][kGuard] = this[kHeaders][kGuard] + clonedResponseObject[kHeaders][kRealm] = this[kHeaders][kRealm] + + return clonedResponseObject + } +} + +mixinBody(Response) + +Object.defineProperties(Response.prototype, { + type: kEnumerableProperty, + url: kEnumerableProperty, + status: kEnumerableProperty, + ok: kEnumerableProperty, + redirected: kEnumerableProperty, + statusText: kEnumerableProperty, + headers: kEnumerableProperty, + clone: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + [Symbol.toStringTag]: { + value: 'Response', + configurable: true + } +}) + +Object.defineProperties(Response, { + json: kEnumerableProperty, + redirect: kEnumerableProperty, + error: kEnumerableProperty +}) + +// https://fetch.spec.whatwg.org/#concept-response-clone +function cloneResponse (response) { + // To clone a response response, run these steps: + + // 1. If response is a filtered response, then return a new identical + // filtered response whose internal response is a clone of response’s + // internal response. + if (response.internalResponse) { + return filterResponse( + cloneResponse(response.internalResponse), + response.type + ) + } + + // 2. Let newResponse be a copy of response, except for its body. + const newResponse = makeResponse({ ...response, body: null }) + + // 3. If response’s body is non-null, then set newResponse’s body to the + // result of cloning response’s body. + if (response.body != null) { + newResponse.body = cloneBody(response.body) + } + + // 4. Return newResponse. + return newResponse +} + +function makeResponse (init) { + return { + aborted: false, + rangeRequested: false, + timingAllowPassed: false, + requestIncludesCredentials: false, + type: 'default', + status: 200, + timingInfo: null, + cacheState: '', + statusText: '', + ...init, + headersList: init.headersList + ? new HeadersList(init.headersList) + : new HeadersList(), + urlList: init.urlList ? [...init.urlList] : [] + } +} + +function makeNetworkError (reason) { + const isError = isErrorLike(reason) + return makeResponse({ + type: 'error', + status: 0, + error: isError + ? reason + : new Error(reason ? String(reason) : reason), + aborted: reason && reason.name === 'AbortError' + }) +} + +function makeFilteredResponse (response, state) { + state = { + internalResponse: response, + ...state + } + + return new Proxy(response, { + get (target, p) { + return p in state ? state[p] : target[p] + }, + set (target, p, value) { + assert(!(p in state)) + target[p] = value + return true + } + }) +} + +// https://fetch.spec.whatwg.org/#concept-filtered-response +function filterResponse (response, type) { + // Set response to the following filtered response with response as its + // internal response, depending on request’s response tainting: + if (type === 'basic') { + // A basic filtered response is a filtered response whose type is "basic" + // and header list excludes any headers in internal response’s header list + // whose name is a forbidden response-header name. + + // Note: undici does not implement forbidden response-header names + return makeFilteredResponse(response, { + type: 'basic', + headersList: response.headersList + }) + } else if (type === 'cors') { + // A CORS filtered response is a filtered response whose type is "cors" + // and header list excludes any headers in internal response’s header + // list whose name is not a CORS-safelisted response-header name, given + // internal response’s CORS-exposed header-name list. + + // Note: undici does not implement CORS-safelisted response-header names + return makeFilteredResponse(response, { + type: 'cors', + headersList: response.headersList + }) + } else if (type === 'opaque') { + // An opaque filtered response is a filtered response whose type is + // "opaque", URL list is the empty list, status is 0, status message + // is the empty byte sequence, header list is empty, and body is null. + + return makeFilteredResponse(response, { + type: 'opaque', + urlList: Object.freeze([]), + status: 0, + statusText: '', + body: null + }) + } else if (type === 'opaqueredirect') { + // An opaque-redirect filtered response is a filtered response whose type + // is "opaqueredirect", status is 0, status message is the empty byte + // sequence, header list is empty, and body is null. + + return makeFilteredResponse(response, { + type: 'opaqueredirect', + status: 0, + statusText: '', + headersList: [], + body: null + }) + } else { + assert(false) + } +} + +// https://fetch.spec.whatwg.org/#appropriate-network-error +function makeAppropriateNetworkError (fetchParams, err = null) { + // 1. Assert: fetchParams is canceled. + assert(isCancelled(fetchParams)) + + // 2. Return an aborted network error if fetchParams is aborted; + // otherwise return a network error. + return isAborted(fetchParams) + ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err })) + : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err })) +} + +// https://whatpr.org/fetch/1392.html#initialize-a-response +function initializeResponse (response, init, body) { + // 1. If init["status"] is not in the range 200 to 599, inclusive, then + // throw a RangeError. + if (init.status !== null && (init.status < 200 || init.status > 599)) { + throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.') + } + + // 2. If init["statusText"] does not match the reason-phrase token production, + // then throw a TypeError. + if ('statusText' in init && init.statusText != null) { + // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2: + // reason-phrase = *( HTAB / SP / VCHAR / obs-text ) + if (!isValidReasonPhrase(String(init.statusText))) { + throw new TypeError('Invalid statusText') + } + } + + // 3. Set response’s response’s status to init["status"]. + if ('status' in init && init.status != null) { + response[kState].status = init.status + } + + // 4. Set response’s response’s status message to init["statusText"]. + if ('statusText' in init && init.statusText != null) { + response[kState].statusText = init.statusText + } + + // 5. If init["headers"] exists, then fill response’s headers with init["headers"]. + if ('headers' in init && init.headers != null) { + fill(response[kHeaders], init.headers) + } + + // 6. If body was given, then: + if (body) { + // 1. If response's status is a null body status, then throw a TypeError. + if (nullBodyStatus.includes(response.status)) { + throw webidl.errors.exception({ + header: 'Response constructor', + message: 'Invalid response status code ' + response.status + }) + } + + // 2. Set response's body to body's body. + response[kState].body = body.body + + // 3. If body's type is non-null and response's header list does not contain + // `Content-Type`, then append (`Content-Type`, body's type) to response's header list. + if (body.type != null && !response[kState].headersList.contains('Content-Type')) { + response[kState].headersList.append('content-type', body.type) + } + } +} + +webidl.converters.ReadableStream = webidl.interfaceConverter( + ReadableStream +) + +webidl.converters.FormData = webidl.interfaceConverter( + FormData +) + +webidl.converters.URLSearchParams = webidl.interfaceConverter( + URLSearchParams +) + +// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit +webidl.converters.XMLHttpRequestBodyInit = function (V) { + if (typeof V === 'string') { + return webidl.converters.USVString(V) + } + + if (isBlobLike(V)) { + return webidl.converters.Blob(V, { strict: false }) + } + + if (types.isArrayBuffer(V) || types.isTypedArray(V) || types.isDataView(V)) { + return webidl.converters.BufferSource(V) + } + + if (util.isFormDataLike(V)) { + return webidl.converters.FormData(V, { strict: false }) + } + + if (V instanceof URLSearchParams) { + return webidl.converters.URLSearchParams(V) + } + + return webidl.converters.DOMString(V) +} + +// https://fetch.spec.whatwg.org/#bodyinit +webidl.converters.BodyInit = function (V) { + if (V instanceof ReadableStream) { + return webidl.converters.ReadableStream(V) + } + + // Note: the spec doesn't include async iterables, + // this is an undici extension. + if (V?.[Symbol.asyncIterator]) { + return V + } + + return webidl.converters.XMLHttpRequestBodyInit(V) +} + +webidl.converters.ResponseInit = webidl.dictionaryConverter([ + { + key: 'status', + converter: webidl.converters['unsigned short'], + defaultValue: 200 + }, + { + key: 'statusText', + converter: webidl.converters.ByteString, + defaultValue: '' + }, + { + key: 'headers', + converter: webidl.converters.HeadersInit + } +]) + +module.exports = { + makeNetworkError, + makeResponse, + makeAppropriateNetworkError, + filterResponse, + Response, + cloneResponse +} + + +/***/ }), + +/***/ 9710: +/***/ ((module) => { + +"use strict"; + + +module.exports = { + kUrl: Symbol('url'), + kHeaders: Symbol('headers'), + kSignal: Symbol('signal'), + kState: Symbol('state'), + kGuard: Symbol('guard'), + kRealm: Symbol('realm') +} + + +/***/ }), + +/***/ 5523: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = __nccwpck_require__(7326) +const { getGlobalOrigin } = __nccwpck_require__(5628) +const { performance } = __nccwpck_require__(2987) +const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(3440) +const assert = __nccwpck_require__(2613) +const { isUint8Array } = __nccwpck_require__(8253) + +let supportedHashes = [] + +// https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable +/** @type {import('crypto')|undefined} */ +let crypto + +try { + crypto = __nccwpck_require__(6982) + const possibleRelevantHashes = ['sha256', 'sha384', 'sha512'] + supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)) +/* c8 ignore next 3 */ +} catch { +} + +function responseURL (response) { + // https://fetch.spec.whatwg.org/#responses + // A response has an associated URL. It is a pointer to the last URL + // in response’s URL list and null if response’s URL list is empty. + const urlList = response.urlList + const length = urlList.length + return length === 0 ? null : urlList[length - 1].toString() +} + +// https://fetch.spec.whatwg.org/#concept-response-location-url +function responseLocationURL (response, requestFragment) { + // 1. If response’s status is not a redirect status, then return null. + if (!redirectStatusSet.has(response.status)) { + return null + } + + // 2. Let location be the result of extracting header list values given + // `Location` and response’s header list. + let location = response.headersList.get('location') + + // 3. If location is a header value, then set location to the result of + // parsing location with response’s URL. + if (location !== null && isValidHeaderValue(location)) { + location = new URL(location, responseURL(response)) + } + + // 4. If location is a URL whose fragment is null, then set location’s + // fragment to requestFragment. + if (location && !location.hash) { + location.hash = requestFragment + } + + // 5. Return location. + return location +} + +/** @returns {URL} */ +function requestCurrentURL (request) { + return request.urlList[request.urlList.length - 1] +} + +function requestBadPort (request) { + // 1. Let url be request’s current URL. + const url = requestCurrentURL(request) + + // 2. If url’s scheme is an HTTP(S) scheme and url’s port is a bad port, + // then return blocked. + if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { + return 'blocked' + } + + // 3. Return allowed. + return 'allowed' +} + +function isErrorLike (object) { + return object instanceof Error || ( + object?.constructor?.name === 'Error' || + object?.constructor?.name === 'DOMException' + ) +} + +// Check whether |statusText| is a ByteString and +// matches the Reason-Phrase token production. +// RFC 2616: https://tools.ietf.org/html/rfc2616 +// RFC 7230: https://tools.ietf.org/html/rfc7230 +// "reason-phrase = *( HTAB / SP / VCHAR / obs-text )" +// https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116 +function isValidReasonPhrase (statusText) { + for (let i = 0; i < statusText.length; ++i) { + const c = statusText.charCodeAt(i) + if ( + !( + ( + c === 0x09 || // HTAB + (c >= 0x20 && c <= 0x7e) || // SP / VCHAR + (c >= 0x80 && c <= 0xff) + ) // obs-text + ) + ) { + return false + } + } + return true +} + +/** + * @see https://tools.ietf.org/html/rfc7230#section-3.2.6 + * @param {number} c + */ +function isTokenCharCode (c) { + switch (c) { + case 0x22: + case 0x28: + case 0x29: + case 0x2c: + case 0x2f: + case 0x3a: + case 0x3b: + case 0x3c: + case 0x3d: + case 0x3e: + case 0x3f: + case 0x40: + case 0x5b: + case 0x5c: + case 0x5d: + case 0x7b: + case 0x7d: + // DQUOTE and "(),/:;<=>?@[\]{}" + return false + default: + // VCHAR %x21-7E + return c >= 0x21 && c <= 0x7e + } +} + +/** + * @param {string} characters + */ +function isValidHTTPToken (characters) { + if (characters.length === 0) { + return false + } + for (let i = 0; i < characters.length; ++i) { + if (!isTokenCharCode(characters.charCodeAt(i))) { + return false + } + } + return true +} + +/** + * @see https://fetch.spec.whatwg.org/#header-name + * @param {string} potentialValue + */ +function isValidHeaderName (potentialValue) { + return isValidHTTPToken(potentialValue) +} + +/** + * @see https://fetch.spec.whatwg.org/#header-value + * @param {string} potentialValue + */ +function isValidHeaderValue (potentialValue) { + // - Has no leading or trailing HTTP tab or space bytes. + // - Contains no 0x00 (NUL) or HTTP newline bytes. + if ( + potentialValue.startsWith('\t') || + potentialValue.startsWith(' ') || + potentialValue.endsWith('\t') || + potentialValue.endsWith(' ') + ) { + return false + } + + if ( + potentialValue.includes('\0') || + potentialValue.includes('\r') || + potentialValue.includes('\n') + ) { + return false + } + + return true +} + +// https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect +function setRequestReferrerPolicyOnRedirect (request, actualResponse) { + // Given a request request and a response actualResponse, this algorithm + // updates request’s referrer policy according to the Referrer-Policy + // header (if any) in actualResponse. + + // 1. Let policy be the result of executing § 8.1 Parse a referrer policy + // from a Referrer-Policy header on actualResponse. + + // 8.1 Parse a referrer policy from a Referrer-Policy header + // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response’s header list. + const { headersList } = actualResponse + // 2. Let policy be the empty string. + // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token. + // 4. Return policy. + const policyHeader = (headersList.get('referrer-policy') ?? '').split(',') + + // Note: As the referrer-policy can contain multiple policies + // separated by comma, we need to loop through all of them + // and pick the first valid one. + // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy + let policy = '' + if (policyHeader.length > 0) { + // The right-most policy takes precedence. + // The left-most policy is the fallback. + for (let i = policyHeader.length; i !== 0; i--) { + const token = policyHeader[i - 1].trim() + if (referrerPolicyTokens.has(token)) { + policy = token + break + } + } + } + + // 2. If policy is not the empty string, then set request’s referrer policy to policy. + if (policy !== '') { + request.referrerPolicy = policy + } +} + +// https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check +function crossOriginResourcePolicyCheck () { + // TODO + return 'allowed' +} + +// https://fetch.spec.whatwg.org/#concept-cors-check +function corsCheck () { + // TODO + return 'success' +} + +// https://fetch.spec.whatwg.org/#concept-tao-check +function TAOCheck () { + // TODO + return 'success' +} + +function appendFetchMetadata (httpRequest) { + // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header + // TODO + + // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header + + // 1. Assert: r’s url is a potentially trustworthy URL. + // TODO + + // 2. Let header be a Structured Header whose value is a token. + let header = null + + // 3. Set header’s value to r’s mode. + header = httpRequest.mode + + // 4. Set a structured field value `Sec-Fetch-Mode`/header in r’s header list. + httpRequest.headersList.set('sec-fetch-mode', header) + + // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header + // TODO + + // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header + // TODO +} + +// https://fetch.spec.whatwg.org/#append-a-request-origin-header +function appendRequestOriginHeader (request) { + // 1. Let serializedOrigin be the result of byte-serializing a request origin with request. + let serializedOrigin = request.origin + + // 2. If request’s response tainting is "cors" or request’s mode is "websocket", then append (`Origin`, serializedOrigin) to request’s header list. + if (request.responseTainting === 'cors' || request.mode === 'websocket') { + if (serializedOrigin) { + request.headersList.append('origin', serializedOrigin) + } + + // 3. Otherwise, if request’s method is neither `GET` nor `HEAD`, then: + } else if (request.method !== 'GET' && request.method !== 'HEAD') { + // 1. Switch on request’s referrer policy: + switch (request.referrerPolicy) { + case 'no-referrer': + // Set serializedOrigin to `null`. + serializedOrigin = null + break + case 'no-referrer-when-downgrade': + case 'strict-origin': + case 'strict-origin-when-cross-origin': + // If request’s origin is a tuple origin, its scheme is "https", and request’s current URL’s scheme is not "https", then set serializedOrigin to `null`. + if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { + serializedOrigin = null + } + break + case 'same-origin': + // If request’s origin is not same origin with request’s current URL’s origin, then set serializedOrigin to `null`. + if (!sameOrigin(request, requestCurrentURL(request))) { + serializedOrigin = null + } + break + default: + // Do nothing. + } + + if (serializedOrigin) { + // 2. Append (`Origin`, serializedOrigin) to request’s header list. + request.headersList.append('origin', serializedOrigin) + } + } +} + +function coarsenedSharedCurrentTime (crossOriginIsolatedCapability) { + // TODO + return performance.now() +} + +// https://fetch.spec.whatwg.org/#create-an-opaque-timing-info +function createOpaqueTimingInfo (timingInfo) { + return { + startTime: timingInfo.startTime ?? 0, + redirectStartTime: 0, + redirectEndTime: 0, + postRedirectStartTime: timingInfo.startTime ?? 0, + finalServiceWorkerStartTime: 0, + finalNetworkResponseStartTime: 0, + finalNetworkRequestStartTime: 0, + endTime: 0, + encodedBodySize: 0, + decodedBodySize: 0, + finalConnectionTimingInfo: null + } +} + +// https://html.spec.whatwg.org/multipage/origin.html#policy-container +function makePolicyContainer () { + // Note: the fetch spec doesn't make use of embedder policy or CSP list + return { + referrerPolicy: 'strict-origin-when-cross-origin' + } +} + +// https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container +function clonePolicyContainer (policyContainer) { + return { + referrerPolicy: policyContainer.referrerPolicy + } +} + +// https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer +function determineRequestsReferrer (request) { + // 1. Let policy be request's referrer policy. + const policy = request.referrerPolicy + + // Note: policy cannot (shouldn't) be null or an empty string. + assert(policy) + + // 2. Let environment be request’s client. + + let referrerSource = null + + // 3. Switch on request’s referrer: + if (request.referrer === 'client') { + // Note: node isn't a browser and doesn't implement document/iframes, + // so we bypass this step and replace it with our own. + + const globalOrigin = getGlobalOrigin() + + if (!globalOrigin || globalOrigin.origin === 'null') { + return 'no-referrer' + } + + // note: we need to clone it as it's mutated + referrerSource = new URL(globalOrigin) + } else if (request.referrer instanceof URL) { + // Let referrerSource be request’s referrer. + referrerSource = request.referrer + } + + // 4. Let request’s referrerURL be the result of stripping referrerSource for + // use as a referrer. + let referrerURL = stripURLForReferrer(referrerSource) + + // 5. Let referrerOrigin be the result of stripping referrerSource for use as + // a referrer, with the origin-only flag set to true. + const referrerOrigin = stripURLForReferrer(referrerSource, true) + + // 6. If the result of serializing referrerURL is a string whose length is + // greater than 4096, set referrerURL to referrerOrigin. + if (referrerURL.toString().length > 4096) { + referrerURL = referrerOrigin + } + + const areSameOrigin = sameOrigin(request, referrerURL) + const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && + !isURLPotentiallyTrustworthy(request.url) + + // 8. Execute the switch statements corresponding to the value of policy: + switch (policy) { + case 'origin': return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true) + case 'unsafe-url': return referrerURL + case 'same-origin': + return areSameOrigin ? referrerOrigin : 'no-referrer' + case 'origin-when-cross-origin': + return areSameOrigin ? referrerURL : referrerOrigin + case 'strict-origin-when-cross-origin': { + const currentURL = requestCurrentURL(request) + + // 1. If the origin of referrerURL and the origin of request’s current + // URL are the same, then return referrerURL. + if (sameOrigin(referrerURL, currentURL)) { + return referrerURL + } + + // 2. If referrerURL is a potentially trustworthy URL and request’s + // current URL is not a potentially trustworthy URL, then return no + // referrer. + if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { + return 'no-referrer' + } + + // 3. Return referrerOrigin. + return referrerOrigin + } + case 'strict-origin': // eslint-disable-line + /** + * 1. If referrerURL is a potentially trustworthy URL and + * request’s current URL is not a potentially trustworthy URL, + * then return no referrer. + * 2. Return referrerOrigin + */ + case 'no-referrer-when-downgrade': // eslint-disable-line + /** + * 1. If referrerURL is a potentially trustworthy URL and + * request’s current URL is not a potentially trustworthy URL, + * then return no referrer. + * 2. Return referrerOrigin + */ + + default: // eslint-disable-line + return isNonPotentiallyTrustWorthy ? 'no-referrer' : referrerOrigin + } +} + +/** + * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url + * @param {URL} url + * @param {boolean|undefined} originOnly + */ +function stripURLForReferrer (url, originOnly) { + // 1. Assert: url is a URL. + assert(url instanceof URL) + + // 2. If url’s scheme is a local scheme, then return no referrer. + if (url.protocol === 'file:' || url.protocol === 'about:' || url.protocol === 'blank:') { + return 'no-referrer' + } + + // 3. Set url’s username to the empty string. + url.username = '' + + // 4. Set url’s password to the empty string. + url.password = '' + + // 5. Set url’s fragment to null. + url.hash = '' + + // 6. If the origin-only flag is true, then: + if (originOnly) { + // 1. Set url’s path to « the empty string ». + url.pathname = '' + + // 2. Set url’s query to null. + url.search = '' + } + + // 7. Return url. + return url +} + +function isURLPotentiallyTrustworthy (url) { + if (!(url instanceof URL)) { + return false + } + + // If child of about, return true + if (url.href === 'about:blank' || url.href === 'about:srcdoc') { + return true + } + + // If scheme is data, return true + if (url.protocol === 'data:') return true + + // If file, return true + if (url.protocol === 'file:') return true + + return isOriginPotentiallyTrustworthy(url.origin) + + function isOriginPotentiallyTrustworthy (origin) { + // If origin is explicitly null, return false + if (origin == null || origin === 'null') return false + + const originAsURL = new URL(origin) + + // If secure, return true + if (originAsURL.protocol === 'https:' || originAsURL.protocol === 'wss:') { + return true + } + + // If localhost or variants, return true + if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || + (originAsURL.hostname === 'localhost' || originAsURL.hostname.includes('localhost.')) || + (originAsURL.hostname.endsWith('.localhost'))) { + return true + } + + // If any other, return false + return false + } +} + +/** + * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist + * @param {Uint8Array} bytes + * @param {string} metadataList + */ +function bytesMatch (bytes, metadataList) { + // If node is not built with OpenSSL support, we cannot check + // a request's integrity, so allow it by default (the spec will + // allow requests if an invalid hash is given, as precedence). + /* istanbul ignore if: only if node is built with --without-ssl */ + if (crypto === undefined) { + return true + } + + // 1. Let parsedMetadata be the result of parsing metadataList. + const parsedMetadata = parseMetadata(metadataList) + + // 2. If parsedMetadata is no metadata, return true. + if (parsedMetadata === 'no metadata') { + return true + } + + // 3. If response is not eligible for integrity validation, return false. + // TODO + + // 4. If parsedMetadata is the empty set, return true. + if (parsedMetadata.length === 0) { + return true + } + + // 5. Let metadata be the result of getting the strongest + // metadata from parsedMetadata. + const strongest = getStrongestMetadata(parsedMetadata) + const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest) + + // 6. For each item in metadata: + for (const item of metadata) { + // 1. Let algorithm be the alg component of item. + const algorithm = item.algo + + // 2. Let expectedValue be the val component of item. + const expectedValue = item.hash + + // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e + // "be liberal with padding". This is annoying, and it's not even in the spec. + + // 3. Let actualValue be the result of applying algorithm to bytes. + let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64') + + if (actualValue[actualValue.length - 1] === '=') { + if (actualValue[actualValue.length - 2] === '=') { + actualValue = actualValue.slice(0, -2) + } else { + actualValue = actualValue.slice(0, -1) + } + } + + // 4. If actualValue is a case-sensitive match for expectedValue, + // return true. + if (compareBase64Mixed(actualValue, expectedValue)) { + return true + } + } + + // 7. Return false. + return false +} + +// https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options +// https://www.w3.org/TR/CSP2/#source-list-syntax +// https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1 +const parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i + +/** + * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata + * @param {string} metadata + */ +function parseMetadata (metadata) { + // 1. Let result be the empty set. + /** @type {{ algo: string, hash: string }[]} */ + const result = [] + + // 2. Let empty be equal to true. + let empty = true + + // 3. For each token returned by splitting metadata on spaces: + for (const token of metadata.split(' ')) { + // 1. Set empty to false. + empty = false + + // 2. Parse token as a hash-with-options. + const parsedToken = parseHashWithOptions.exec(token) + + // 3. If token does not parse, continue to the next token. + if ( + parsedToken === null || + parsedToken.groups === undefined || + parsedToken.groups.algo === undefined + ) { + // Note: Chromium blocks the request at this point, but Firefox + // gives a warning that an invalid integrity was given. The + // correct behavior is to ignore these, and subsequently not + // check the integrity of the resource. + continue + } + + // 4. Let algorithm be the hash-algo component of token. + const algorithm = parsedToken.groups.algo.toLowerCase() + + // 5. If algorithm is a hash function recognized by the user + // agent, add the parsed token to result. + if (supportedHashes.includes(algorithm)) { + result.push(parsedToken.groups) + } + } + + // 4. Return no metadata if empty is true, otherwise return result. + if (empty === true) { + return 'no metadata' + } + + return result +} + +/** + * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList + */ +function getStrongestMetadata (metadataList) { + // Let algorithm be the algo component of the first item in metadataList. + // Can be sha256 + let algorithm = metadataList[0].algo + // If the algorithm is sha512, then it is the strongest + // and we can return immediately + if (algorithm[3] === '5') { + return algorithm + } + + for (let i = 1; i < metadataList.length; ++i) { + const metadata = metadataList[i] + // If the algorithm is sha512, then it is the strongest + // and we can break the loop immediately + if (metadata.algo[3] === '5') { + algorithm = 'sha512' + break + // If the algorithm is sha384, then a potential sha256 or sha384 is ignored + } else if (algorithm[3] === '3') { + continue + // algorithm is sha256, check if algorithm is sha384 and if so, set it as + // the strongest + } else if (metadata.algo[3] === '3') { + algorithm = 'sha384' + } + } + return algorithm +} + +function filterMetadataListByAlgorithm (metadataList, algorithm) { + if (metadataList.length === 1) { + return metadataList + } + + let pos = 0 + for (let i = 0; i < metadataList.length; ++i) { + if (metadataList[i].algo === algorithm) { + metadataList[pos++] = metadataList[i] + } + } + + metadataList.length = pos + + return metadataList +} + +/** + * Compares two base64 strings, allowing for base64url + * in the second string. + * +* @param {string} actualValue always base64 + * @param {string} expectedValue base64 or base64url + * @returns {boolean} + */ +function compareBase64Mixed (actualValue, expectedValue) { + if (actualValue.length !== expectedValue.length) { + return false + } + for (let i = 0; i < actualValue.length; ++i) { + if (actualValue[i] !== expectedValue[i]) { + if ( + (actualValue[i] === '+' && expectedValue[i] === '-') || + (actualValue[i] === '/' && expectedValue[i] === '_') + ) { + continue + } + return false + } + } + + return true +} + +// https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request +function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) { + // TODO +} + +/** + * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin} + * @param {URL} A + * @param {URL} B + */ +function sameOrigin (A, B) { + // 1. If A and B are the same opaque origin, then return true. + if (A.origin === B.origin && A.origin === 'null') { + return true + } + + // 2. If A and B are both tuple origins and their schemes, + // hosts, and port are identical, then return true. + if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { + return true + } + + // 3. Return false. + return false +} + +function createDeferredPromise () { + let res + let rej + const promise = new Promise((resolve, reject) => { + res = resolve + rej = reject + }) + + return { promise, resolve: res, reject: rej } +} + +function isAborted (fetchParams) { + return fetchParams.controller.state === 'aborted' +} + +function isCancelled (fetchParams) { + return fetchParams.controller.state === 'aborted' || + fetchParams.controller.state === 'terminated' +} + +const normalizeMethodRecord = { + delete: 'DELETE', + DELETE: 'DELETE', + get: 'GET', + GET: 'GET', + head: 'HEAD', + HEAD: 'HEAD', + options: 'OPTIONS', + OPTIONS: 'OPTIONS', + post: 'POST', + POST: 'POST', + put: 'PUT', + PUT: 'PUT' +} + +// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. +Object.setPrototypeOf(normalizeMethodRecord, null) + +/** + * @see https://fetch.spec.whatwg.org/#concept-method-normalize + * @param {string} method + */ +function normalizeMethod (method) { + return normalizeMethodRecord[method.toLowerCase()] ?? method +} + +// https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string +function serializeJavascriptValueToJSONString (value) { + // 1. Let result be ? Call(%JSON.stringify%, undefined, « value »). + const result = JSON.stringify(value) + + // 2. If result is undefined, then throw a TypeError. + if (result === undefined) { + throw new TypeError('Value is not JSON serializable') + } + + // 3. Assert: result is a string. + assert(typeof result === 'string') + + // 4. Return result. + return result +} + +// https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object +const esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())) + +/** + * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object + * @param {() => unknown[]} iterator + * @param {string} name name of the instance + * @param {'key'|'value'|'key+value'} kind + */ +function makeIterator (iterator, name, kind) { + const object = { + index: 0, + kind, + target: iterator + } + + const i = { + next () { + // 1. Let interface be the interface for which the iterator prototype object exists. + + // 2. Let thisValue be the this value. + + // 3. Let object be ? ToObject(thisValue). + + // 4. If object is a platform object, then perform a security + // check, passing: + + // 5. If object is not a default iterator object for interface, + // then throw a TypeError. + if (Object.getPrototypeOf(this) !== i) { + throw new TypeError( + `'next' called on an object that does not implement interface ${name} Iterator.` + ) + } + + // 6. Let index be object’s index. + // 7. Let kind be object’s kind. + // 8. Let values be object’s target's value pairs to iterate over. + const { index, kind, target } = object + const values = target() + + // 9. Let len be the length of values. + const len = values.length + + // 10. If index is greater than or equal to len, then return + // CreateIterResultObject(undefined, true). + if (index >= len) { + return { value: undefined, done: true } + } + + // 11. Let pair be the entry in values at index index. + const pair = values[index] + + // 12. Set object’s index to index + 1. + object.index = index + 1 + + // 13. Return the iterator result for pair and kind. + return iteratorResult(pair, kind) + }, + // The class string of an iterator prototype object for a given interface is the + // result of concatenating the identifier of the interface and the string " Iterator". + [Symbol.toStringTag]: `${name} Iterator` + } + + // The [[Prototype]] internal slot of an iterator prototype object must be %IteratorPrototype%. + Object.setPrototypeOf(i, esIteratorPrototype) + // esIteratorPrototype needs to be the prototype of i + // which is the prototype of an empty object. Yes, it's confusing. + return Object.setPrototypeOf({}, i) +} + +// https://webidl.spec.whatwg.org/#iterator-result +function iteratorResult (pair, kind) { + let result + + // 1. Let result be a value determined by the value of kind: + switch (kind) { + case 'key': { + // 1. Let idlKey be pair’s key. + // 2. Let key be the result of converting idlKey to an + // ECMAScript value. + // 3. result is key. + result = pair[0] + break + } + case 'value': { + // 1. Let idlValue be pair’s value. + // 2. Let value be the result of converting idlValue to + // an ECMAScript value. + // 3. result is value. + result = pair[1] + break + } + case 'key+value': { + // 1. Let idlKey be pair’s key. + // 2. Let idlValue be pair’s value. + // 3. Let key be the result of converting idlKey to an + // ECMAScript value. + // 4. Let value be the result of converting idlValue to + // an ECMAScript value. + // 5. Let array be ! ArrayCreate(2). + // 6. Call ! CreateDataProperty(array, "0", key). + // 7. Call ! CreateDataProperty(array, "1", value). + // 8. result is array. + result = pair + break + } + } + + // 2. Return CreateIterResultObject(result, false). + return { value: result, done: false } +} + +/** + * @see https://fetch.spec.whatwg.org/#body-fully-read + */ +async function fullyReadBody (body, processBody, processBodyError) { + // 1. If taskDestination is null, then set taskDestination to + // the result of starting a new parallel queue. + + // 2. Let successSteps given a byte sequence bytes be to queue a + // fetch task to run processBody given bytes, with taskDestination. + const successSteps = processBody + + // 3. Let errorSteps be to queue a fetch task to run processBodyError, + // with taskDestination. + const errorSteps = processBodyError + + // 4. Let reader be the result of getting a reader for body’s stream. + // If that threw an exception, then run errorSteps with that + // exception and return. + let reader + + try { + reader = body.stream.getReader() + } catch (e) { + errorSteps(e) + return + } + + // 5. Read all bytes from reader, given successSteps and errorSteps. + try { + const result = await readAllBytes(reader) + successSteps(result) + } catch (e) { + errorSteps(e) + } +} + +/** @type {ReadableStream} */ +let ReadableStream = globalThis.ReadableStream + +function isReadableStreamLike (stream) { + if (!ReadableStream) { + ReadableStream = (__nccwpck_require__(3774).ReadableStream) + } + + return stream instanceof ReadableStream || ( + stream[Symbol.toStringTag] === 'ReadableStream' && + typeof stream.tee === 'function' + ) +} + +const MAXIMUM_ARGUMENT_LENGTH = 65535 + +/** + * @see https://infra.spec.whatwg.org/#isomorphic-decode + * @param {number[]|Uint8Array} input + */ +function isomorphicDecode (input) { + // 1. To isomorphic decode a byte sequence input, return a string whose code point + // length is equal to input’s length and whose code points have the same values + // as the values of input’s bytes, in the same order. + + if (input.length < MAXIMUM_ARGUMENT_LENGTH) { + return String.fromCharCode(...input) + } + + return input.reduce((previous, current) => previous + String.fromCharCode(current), '') +} + +/** + * @param {ReadableStreamController} controller + */ +function readableStreamClose (controller) { + try { + controller.close() + } catch (err) { + // TODO: add comment explaining why this error occurs. + if (!err.message.includes('Controller is already closed')) { + throw err + } + } +} + +/** + * @see https://infra.spec.whatwg.org/#isomorphic-encode + * @param {string} input + */ +function isomorphicEncode (input) { + // 1. Assert: input contains no code points greater than U+00FF. + for (let i = 0; i < input.length; i++) { + assert(input.charCodeAt(i) <= 0xFF) + } + + // 2. Return a byte sequence whose length is equal to input’s code + // point length and whose bytes have the same values as the + // values of input’s code points, in the same order + return input +} + +/** + * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes + * @see https://streams.spec.whatwg.org/#read-loop + * @param {ReadableStreamDefaultReader} reader + */ +async function readAllBytes (reader) { + const bytes = [] + let byteLength = 0 + + while (true) { + const { done, value: chunk } = await reader.read() + + if (done) { + // 1. Call successSteps with bytes. + return Buffer.concat(bytes, byteLength) + } + + // 1. If chunk is not a Uint8Array object, call failureSteps + // with a TypeError and abort these steps. + if (!isUint8Array(chunk)) { + throw new TypeError('Received non-Uint8Array chunk') + } + + // 2. Append the bytes represented by chunk to bytes. + bytes.push(chunk) + byteLength += chunk.length + + // 3. Read-loop given reader, bytes, successSteps, and failureSteps. + } +} + +/** + * @see https://fetch.spec.whatwg.org/#is-local + * @param {URL} url + */ +function urlIsLocal (url) { + assert('protocol' in url) // ensure it's a url object + + const protocol = url.protocol + + return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:' +} + +/** + * @param {string|URL} url + */ +function urlHasHttpsScheme (url) { + if (typeof url === 'string') { + return url.startsWith('https:') + } + + return url.protocol === 'https:' +} + +/** + * @see https://fetch.spec.whatwg.org/#http-scheme + * @param {URL} url + */ +function urlIsHttpHttpsScheme (url) { + assert('protocol' in url) // ensure it's a url object + + const protocol = url.protocol + + return protocol === 'http:' || protocol === 'https:' +} + +/** + * Fetch supports node >= 16.8.0, but Object.hasOwn was added in v16.9.0. + */ +const hasOwn = Object.hasOwn || ((dict, key) => Object.prototype.hasOwnProperty.call(dict, key)) + +module.exports = { + isAborted, + isCancelled, + createDeferredPromise, + ReadableStreamFrom, + toUSVString, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + coarsenedSharedCurrentTime, + determineRequestsReferrer, + makePolicyContainer, + clonePolicyContainer, + appendFetchMetadata, + appendRequestOriginHeader, + TAOCheck, + corsCheck, + crossOriginResourcePolicyCheck, + createOpaqueTimingInfo, + setRequestReferrerPolicyOnRedirect, + isValidHTTPToken, + requestBadPort, + requestCurrentURL, + responseURL, + responseLocationURL, + isBlobLike, + isURLPotentiallyTrustworthy, + isValidReasonPhrase, + sameOrigin, + normalizeMethod, + serializeJavascriptValueToJSONString, + makeIterator, + isValidHeaderName, + isValidHeaderValue, + hasOwn, + isErrorLike, + fullyReadBody, + bytesMatch, + isReadableStreamLike, + readableStreamClose, + isomorphicEncode, + isomorphicDecode, + urlIsLocal, + urlHasHttpsScheme, + urlIsHttpHttpsScheme, + readAllBytes, + normalizeMethodRecord, + parseMetadata +} + + +/***/ }), + +/***/ 4222: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { types } = __nccwpck_require__(9023) +const { hasOwn, toUSVString } = __nccwpck_require__(5523) + +/** @type {import('../../types/webidl').Webidl} */ +const webidl = {} +webidl.converters = {} +webidl.util = {} +webidl.errors = {} + +webidl.errors.exception = function (message) { + return new TypeError(`${message.header}: ${message.message}`) +} + +webidl.errors.conversionFailed = function (context) { + const plural = context.types.length === 1 ? '' : ' one of' + const message = + `${context.argument} could not be converted to` + + `${plural}: ${context.types.join(', ')}.` + + return webidl.errors.exception({ + header: context.prefix, + message + }) +} + +webidl.errors.invalidArgument = function (context) { + return webidl.errors.exception({ + header: context.prefix, + message: `"${context.value}" is an invalid ${context.type}.` + }) +} + +// https://webidl.spec.whatwg.org/#implements +webidl.brandCheck = function (V, I, opts = undefined) { + if (opts?.strict !== false && !(V instanceof I)) { + throw new TypeError('Illegal invocation') + } else { + return V?.[Symbol.toStringTag] === I.prototype[Symbol.toStringTag] + } +} + +webidl.argumentLengthCheck = function ({ length }, min, ctx) { + if (length < min) { + throw webidl.errors.exception({ + message: `${min} argument${min !== 1 ? 's' : ''} required, ` + + `but${length ? ' only' : ''} ${length} found.`, + ...ctx + }) + } +} + +webidl.illegalConstructor = function () { + throw webidl.errors.exception({ + header: 'TypeError', + message: 'Illegal constructor' + }) +} + +// https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values +webidl.util.Type = function (V) { + switch (typeof V) { + case 'undefined': return 'Undefined' + case 'boolean': return 'Boolean' + case 'string': return 'String' + case 'symbol': return 'Symbol' + case 'number': return 'Number' + case 'bigint': return 'BigInt' + case 'function': + case 'object': { + if (V === null) { + return 'Null' + } + + return 'Object' + } + } +} + +// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint +webidl.util.ConvertToInt = function (V, bitLength, signedness, opts = {}) { + let upperBound + let lowerBound + + // 1. If bitLength is 64, then: + if (bitLength === 64) { + // 1. Let upperBound be 2^53 − 1. + upperBound = Math.pow(2, 53) - 1 + + // 2. If signedness is "unsigned", then let lowerBound be 0. + if (signedness === 'unsigned') { + lowerBound = 0 + } else { + // 3. Otherwise let lowerBound be −2^53 + 1. + lowerBound = Math.pow(-2, 53) + 1 + } + } else if (signedness === 'unsigned') { + // 2. Otherwise, if signedness is "unsigned", then: + + // 1. Let lowerBound be 0. + lowerBound = 0 + + // 2. Let upperBound be 2^bitLength − 1. + upperBound = Math.pow(2, bitLength) - 1 + } else { + // 3. Otherwise: + + // 1. Let lowerBound be -2^bitLength − 1. + lowerBound = Math.pow(-2, bitLength) - 1 + + // 2. Let upperBound be 2^bitLength − 1 − 1. + upperBound = Math.pow(2, bitLength - 1) - 1 + } + + // 4. Let x be ? ToNumber(V). + let x = Number(V) + + // 5. If x is −0, then set x to +0. + if (x === 0) { + x = 0 + } + + // 6. If the conversion is to an IDL type associated + // with the [EnforceRange] extended attribute, then: + if (opts.enforceRange === true) { + // 1. If x is NaN, +∞, or −∞, then throw a TypeError. + if ( + Number.isNaN(x) || + x === Number.POSITIVE_INFINITY || + x === Number.NEGATIVE_INFINITY + ) { + throw webidl.errors.exception({ + header: 'Integer conversion', + message: `Could not convert ${V} to an integer.` + }) + } + + // 2. Set x to IntegerPart(x). + x = webidl.util.IntegerPart(x) + + // 3. If x < lowerBound or x > upperBound, then + // throw a TypeError. + if (x < lowerBound || x > upperBound) { + throw webidl.errors.exception({ + header: 'Integer conversion', + message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` + }) + } + + // 4. Return x. + return x + } + + // 7. If x is not NaN and the conversion is to an IDL + // type associated with the [Clamp] extended + // attribute, then: + if (!Number.isNaN(x) && opts.clamp === true) { + // 1. Set x to min(max(x, lowerBound), upperBound). + x = Math.min(Math.max(x, lowerBound), upperBound) + + // 2. Round x to the nearest integer, choosing the + // even integer if it lies halfway between two, + // and choosing +0 rather than −0. + if (Math.floor(x) % 2 === 0) { + x = Math.floor(x) + } else { + x = Math.ceil(x) + } + + // 3. Return x. + return x + } + + // 8. If x is NaN, +0, +∞, or −∞, then return +0. + if ( + Number.isNaN(x) || + (x === 0 && Object.is(0, x)) || + x === Number.POSITIVE_INFINITY || + x === Number.NEGATIVE_INFINITY + ) { + return 0 + } + + // 9. Set x to IntegerPart(x). + x = webidl.util.IntegerPart(x) + + // 10. Set x to x modulo 2^bitLength. + x = x % Math.pow(2, bitLength) + + // 11. If signedness is "signed" and x ≥ 2^bitLength − 1, + // then return x − 2^bitLength. + if (signedness === 'signed' && x >= Math.pow(2, bitLength) - 1) { + return x - Math.pow(2, bitLength) + } + + // 12. Otherwise, return x. + return x +} + +// https://webidl.spec.whatwg.org/#abstract-opdef-integerpart +webidl.util.IntegerPart = function (n) { + // 1. Let r be floor(abs(n)). + const r = Math.floor(Math.abs(n)) + + // 2. If n < 0, then return -1 × r. + if (n < 0) { + return -1 * r + } + + // 3. Otherwise, return r. + return r +} + +// https://webidl.spec.whatwg.org/#es-sequence +webidl.sequenceConverter = function (converter) { + return (V) => { + // 1. If Type(V) is not Object, throw a TypeError. + if (webidl.util.Type(V) !== 'Object') { + throw webidl.errors.exception({ + header: 'Sequence', + message: `Value of type ${webidl.util.Type(V)} is not an Object.` + }) + } + + // 2. Let method be ? GetMethod(V, @@iterator). + /** @type {Generator} */ + const method = V?.[Symbol.iterator]?.() + const seq = [] + + // 3. If method is undefined, throw a TypeError. + if ( + method === undefined || + typeof method.next !== 'function' + ) { + throw webidl.errors.exception({ + header: 'Sequence', + message: 'Object is not an iterator.' + }) + } + + // https://webidl.spec.whatwg.org/#create-sequence-from-iterable + while (true) { + const { done, value } = method.next() + + if (done) { + break + } + + seq.push(converter(value)) + } + + return seq + } +} + +// https://webidl.spec.whatwg.org/#es-to-record +webidl.recordConverter = function (keyConverter, valueConverter) { + return (O) => { + // 1. If Type(O) is not Object, throw a TypeError. + if (webidl.util.Type(O) !== 'Object') { + throw webidl.errors.exception({ + header: 'Record', + message: `Value of type ${webidl.util.Type(O)} is not an Object.` + }) + } + + // 2. Let result be a new empty instance of record. + const result = {} + + if (!types.isProxy(O)) { + // Object.keys only returns enumerable properties + const keys = Object.keys(O) + + for (const key of keys) { + // 1. Let typedKey be key converted to an IDL value of type K. + const typedKey = keyConverter(key) + + // 2. Let value be ? Get(O, key). + // 3. Let typedValue be value converted to an IDL value of type V. + const typedValue = valueConverter(O[key]) + + // 4. Set result[typedKey] to typedValue. + result[typedKey] = typedValue + } + + // 5. Return result. + return result + } + + // 3. Let keys be ? O.[[OwnPropertyKeys]](). + const keys = Reflect.ownKeys(O) + + // 4. For each key of keys. + for (const key of keys) { + // 1. Let desc be ? O.[[GetOwnProperty]](key). + const desc = Reflect.getOwnPropertyDescriptor(O, key) + + // 2. If desc is not undefined and desc.[[Enumerable]] is true: + if (desc?.enumerable) { + // 1. Let typedKey be key converted to an IDL value of type K. + const typedKey = keyConverter(key) + + // 2. Let value be ? Get(O, key). + // 3. Let typedValue be value converted to an IDL value of type V. + const typedValue = valueConverter(O[key]) + + // 4. Set result[typedKey] to typedValue. + result[typedKey] = typedValue + } + } + + // 5. Return result. + return result + } +} + +webidl.interfaceConverter = function (i) { + return (V, opts = {}) => { + if (opts.strict !== false && !(V instanceof i)) { + throw webidl.errors.exception({ + header: i.name, + message: `Expected ${V} to be an instance of ${i.name}.` + }) + } + + return V + } +} + +webidl.dictionaryConverter = function (converters) { + return (dictionary) => { + const type = webidl.util.Type(dictionary) + const dict = {} + + if (type === 'Null' || type === 'Undefined') { + return dict + } else if (type !== 'Object') { + throw webidl.errors.exception({ + header: 'Dictionary', + message: `Expected ${dictionary} to be one of: Null, Undefined, Object.` + }) + } + + for (const options of converters) { + const { key, defaultValue, required, converter } = options + + if (required === true) { + if (!hasOwn(dictionary, key)) { + throw webidl.errors.exception({ + header: 'Dictionary', + message: `Missing required key "${key}".` + }) + } + } + + let value = dictionary[key] + const hasDefault = hasOwn(options, 'defaultValue') + + // Only use defaultValue if value is undefined and + // a defaultValue options was provided. + if (hasDefault && value !== null) { + value = value ?? defaultValue + } + + // A key can be optional and have no default value. + // When this happens, do not perform a conversion, + // and do not assign the key a value. + if (required || hasDefault || value !== undefined) { + value = converter(value) + + if ( + options.allowedValues && + !options.allowedValues.includes(value) + ) { + throw webidl.errors.exception({ + header: 'Dictionary', + message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.` + }) + } + + dict[key] = value + } + } + + return dict + } +} + +webidl.nullableConverter = function (converter) { + return (V) => { + if (V === null) { + return V + } + + return converter(V) + } +} + +// https://webidl.spec.whatwg.org/#es-DOMString +webidl.converters.DOMString = function (V, opts = {}) { + // 1. If V is null and the conversion is to an IDL type + // associated with the [LegacyNullToEmptyString] + // extended attribute, then return the DOMString value + // that represents the empty string. + if (V === null && opts.legacyNullToEmptyString) { + return '' + } + + // 2. Let x be ? ToString(V). + if (typeof V === 'symbol') { + throw new TypeError('Could not convert argument of type symbol to string.') + } + + // 3. Return the IDL DOMString value that represents the + // same sequence of code units as the one the + // ECMAScript String value x represents. + return String(V) +} + +// https://webidl.spec.whatwg.org/#es-ByteString +webidl.converters.ByteString = function (V) { + // 1. Let x be ? ToString(V). + // Note: DOMString converter perform ? ToString(V) + const x = webidl.converters.DOMString(V) + + // 2. If the value of any element of x is greater than + // 255, then throw a TypeError. + for (let index = 0; index < x.length; index++) { + if (x.charCodeAt(index) > 255) { + throw new TypeError( + 'Cannot convert argument to a ByteString because the character at ' + + `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.` + ) + } + } + + // 3. Return an IDL ByteString value whose length is the + // length of x, and where the value of each element is + // the value of the corresponding element of x. + return x +} + +// https://webidl.spec.whatwg.org/#es-USVString +webidl.converters.USVString = toUSVString + +// https://webidl.spec.whatwg.org/#es-boolean +webidl.converters.boolean = function (V) { + // 1. Let x be the result of computing ToBoolean(V). + const x = Boolean(V) + + // 2. Return the IDL boolean value that is the one that represents + // the same truth value as the ECMAScript Boolean value x. + return x +} + +// https://webidl.spec.whatwg.org/#es-any +webidl.converters.any = function (V) { + return V +} + +// https://webidl.spec.whatwg.org/#es-long-long +webidl.converters['long long'] = function (V) { + // 1. Let x be ? ConvertToInt(V, 64, "signed"). + const x = webidl.util.ConvertToInt(V, 64, 'signed') + + // 2. Return the IDL long long value that represents + // the same numeric value as x. + return x +} + +// https://webidl.spec.whatwg.org/#es-unsigned-long-long +webidl.converters['unsigned long long'] = function (V) { + // 1. Let x be ? ConvertToInt(V, 64, "unsigned"). + const x = webidl.util.ConvertToInt(V, 64, 'unsigned') + + // 2. Return the IDL unsigned long long value that + // represents the same numeric value as x. + return x +} + +// https://webidl.spec.whatwg.org/#es-unsigned-long +webidl.converters['unsigned long'] = function (V) { + // 1. Let x be ? ConvertToInt(V, 32, "unsigned"). + const x = webidl.util.ConvertToInt(V, 32, 'unsigned') + + // 2. Return the IDL unsigned long value that + // represents the same numeric value as x. + return x +} + +// https://webidl.spec.whatwg.org/#es-unsigned-short +webidl.converters['unsigned short'] = function (V, opts) { + // 1. Let x be ? ConvertToInt(V, 16, "unsigned"). + const x = webidl.util.ConvertToInt(V, 16, 'unsigned', opts) + + // 2. Return the IDL unsigned short value that represents + // the same numeric value as x. + return x +} + +// https://webidl.spec.whatwg.org/#idl-ArrayBuffer +webidl.converters.ArrayBuffer = function (V, opts = {}) { + // 1. If Type(V) is not Object, or V does not have an + // [[ArrayBufferData]] internal slot, then throw a + // TypeError. + // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances + // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances + if ( + webidl.util.Type(V) !== 'Object' || + !types.isAnyArrayBuffer(V) + ) { + throw webidl.errors.conversionFailed({ + prefix: `${V}`, + argument: `${V}`, + types: ['ArrayBuffer'] + }) + } + + // 2. If the conversion is not to an IDL type associated + // with the [AllowShared] extended attribute, and + // IsSharedArrayBuffer(V) is true, then throw a + // TypeError. + if (opts.allowShared === false && types.isSharedArrayBuffer(V)) { + throw webidl.errors.exception({ + header: 'ArrayBuffer', + message: 'SharedArrayBuffer is not allowed.' + }) + } + + // 3. If the conversion is not to an IDL type associated + // with the [AllowResizable] extended attribute, and + // IsResizableArrayBuffer(V) is true, then throw a + // TypeError. + // Note: resizable ArrayBuffers are currently a proposal. + + // 4. Return the IDL ArrayBuffer value that is a + // reference to the same object as V. + return V +} + +webidl.converters.TypedArray = function (V, T, opts = {}) { + // 1. Let T be the IDL type V is being converted to. + + // 2. If Type(V) is not Object, or V does not have a + // [[TypedArrayName]] internal slot with a value + // equal to T’s name, then throw a TypeError. + if ( + webidl.util.Type(V) !== 'Object' || + !types.isTypedArray(V) || + V.constructor.name !== T.name + ) { + throw webidl.errors.conversionFailed({ + prefix: `${T.name}`, + argument: `${V}`, + types: [T.name] + }) + } + + // 3. If the conversion is not to an IDL type associated + // with the [AllowShared] extended attribute, and + // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is + // true, then throw a TypeError. + if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: 'ArrayBuffer', + message: 'SharedArrayBuffer is not allowed.' + }) + } + + // 4. If the conversion is not to an IDL type associated + // with the [AllowResizable] extended attribute, and + // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is + // true, then throw a TypeError. + // Note: resizable array buffers are currently a proposal + + // 5. Return the IDL value of type T that is a reference + // to the same object as V. + return V +} + +webidl.converters.DataView = function (V, opts = {}) { + // 1. If Type(V) is not Object, or V does not have a + // [[DataView]] internal slot, then throw a TypeError. + if (webidl.util.Type(V) !== 'Object' || !types.isDataView(V)) { + throw webidl.errors.exception({ + header: 'DataView', + message: 'Object is not a DataView.' + }) + } + + // 2. If the conversion is not to an IDL type associated + // with the [AllowShared] extended attribute, and + // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true, + // then throw a TypeError. + if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: 'ArrayBuffer', + message: 'SharedArrayBuffer is not allowed.' + }) + } + + // 3. If the conversion is not to an IDL type associated + // with the [AllowResizable] extended attribute, and + // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is + // true, then throw a TypeError. + // Note: resizable ArrayBuffers are currently a proposal + + // 4. Return the IDL DataView value that is a reference + // to the same object as V. + return V +} + +// https://webidl.spec.whatwg.org/#BufferSource +webidl.converters.BufferSource = function (V, opts = {}) { + if (types.isAnyArrayBuffer(V)) { + return webidl.converters.ArrayBuffer(V, opts) + } + + if (types.isTypedArray(V)) { + return webidl.converters.TypedArray(V, V.constructor) + } + + if (types.isDataView(V)) { + return webidl.converters.DataView(V, opts) + } + + throw new TypeError(`Could not convert ${V} to a BufferSource.`) +} + +webidl.converters['sequence'] = webidl.sequenceConverter( + webidl.converters.ByteString +) + +webidl.converters['sequence>'] = webidl.sequenceConverter( + webidl.converters['sequence'] +) + +webidl.converters['record'] = webidl.recordConverter( + webidl.converters.ByteString, + webidl.converters.ByteString +) + +module.exports = { + webidl +} + + +/***/ }), + +/***/ 396: +/***/ ((module) => { + +"use strict"; + + +/** + * @see https://encoding.spec.whatwg.org/#concept-encoding-get + * @param {string|undefined} label + */ +function getEncoding (label) { + if (!label) { + return 'failure' + } + + // 1. Remove any leading and trailing ASCII whitespace from label. + // 2. If label is an ASCII case-insensitive match for any of the + // labels listed in the table below, then return the + // corresponding encoding; otherwise return failure. + switch (label.trim().toLowerCase()) { + case 'unicode-1-1-utf-8': + case 'unicode11utf8': + case 'unicode20utf8': + case 'utf-8': + case 'utf8': + case 'x-unicode20utf8': + return 'UTF-8' + case '866': + case 'cp866': + case 'csibm866': + case 'ibm866': + return 'IBM866' + case 'csisolatin2': + case 'iso-8859-2': + case 'iso-ir-101': + case 'iso8859-2': + case 'iso88592': + case 'iso_8859-2': + case 'iso_8859-2:1987': + case 'l2': + case 'latin2': + return 'ISO-8859-2' + case 'csisolatin3': + case 'iso-8859-3': + case 'iso-ir-109': + case 'iso8859-3': + case 'iso88593': + case 'iso_8859-3': + case 'iso_8859-3:1988': + case 'l3': + case 'latin3': + return 'ISO-8859-3' + case 'csisolatin4': + case 'iso-8859-4': + case 'iso-ir-110': + case 'iso8859-4': + case 'iso88594': + case 'iso_8859-4': + case 'iso_8859-4:1988': + case 'l4': + case 'latin4': + return 'ISO-8859-4' + case 'csisolatincyrillic': + case 'cyrillic': + case 'iso-8859-5': + case 'iso-ir-144': + case 'iso8859-5': + case 'iso88595': + case 'iso_8859-5': + case 'iso_8859-5:1988': + return 'ISO-8859-5' + case 'arabic': + case 'asmo-708': + case 'csiso88596e': + case 'csiso88596i': + case 'csisolatinarabic': + case 'ecma-114': + case 'iso-8859-6': + case 'iso-8859-6-e': + case 'iso-8859-6-i': + case 'iso-ir-127': + case 'iso8859-6': + case 'iso88596': + case 'iso_8859-6': + case 'iso_8859-6:1987': + return 'ISO-8859-6' + case 'csisolatingreek': + case 'ecma-118': + case 'elot_928': + case 'greek': + case 'greek8': + case 'iso-8859-7': + case 'iso-ir-126': + case 'iso8859-7': + case 'iso88597': + case 'iso_8859-7': + case 'iso_8859-7:1987': + case 'sun_eu_greek': + return 'ISO-8859-7' + case 'csiso88598e': + case 'csisolatinhebrew': + case 'hebrew': + case 'iso-8859-8': + case 'iso-8859-8-e': + case 'iso-ir-138': + case 'iso8859-8': + case 'iso88598': + case 'iso_8859-8': + case 'iso_8859-8:1988': + case 'visual': + return 'ISO-8859-8' + case 'csiso88598i': + case 'iso-8859-8-i': + case 'logical': + return 'ISO-8859-8-I' + case 'csisolatin6': + case 'iso-8859-10': + case 'iso-ir-157': + case 'iso8859-10': + case 'iso885910': + case 'l6': + case 'latin6': + return 'ISO-8859-10' + case 'iso-8859-13': + case 'iso8859-13': + case 'iso885913': + return 'ISO-8859-13' + case 'iso-8859-14': + case 'iso8859-14': + case 'iso885914': + return 'ISO-8859-14' + case 'csisolatin9': + case 'iso-8859-15': + case 'iso8859-15': + case 'iso885915': + case 'iso_8859-15': + case 'l9': + return 'ISO-8859-15' + case 'iso-8859-16': + return 'ISO-8859-16' + case 'cskoi8r': + case 'koi': + case 'koi8': + case 'koi8-r': + case 'koi8_r': + return 'KOI8-R' + case 'koi8-ru': + case 'koi8-u': + return 'KOI8-U' + case 'csmacintosh': + case 'mac': + case 'macintosh': + case 'x-mac-roman': + return 'macintosh' + case 'iso-8859-11': + case 'iso8859-11': + case 'iso885911': + case 'tis-620': + case 'windows-874': + return 'windows-874' + case 'cp1250': + case 'windows-1250': + case 'x-cp1250': + return 'windows-1250' + case 'cp1251': + case 'windows-1251': + case 'x-cp1251': + return 'windows-1251' + case 'ansi_x3.4-1968': + case 'ascii': + case 'cp1252': + case 'cp819': + case 'csisolatin1': + case 'ibm819': + case 'iso-8859-1': + case 'iso-ir-100': + case 'iso8859-1': + case 'iso88591': + case 'iso_8859-1': + case 'iso_8859-1:1987': + case 'l1': + case 'latin1': + case 'us-ascii': + case 'windows-1252': + case 'x-cp1252': + return 'windows-1252' + case 'cp1253': + case 'windows-1253': + case 'x-cp1253': + return 'windows-1253' + case 'cp1254': + case 'csisolatin5': + case 'iso-8859-9': + case 'iso-ir-148': + case 'iso8859-9': + case 'iso88599': + case 'iso_8859-9': + case 'iso_8859-9:1989': + case 'l5': + case 'latin5': + case 'windows-1254': + case 'x-cp1254': + return 'windows-1254' + case 'cp1255': + case 'windows-1255': + case 'x-cp1255': + return 'windows-1255' + case 'cp1256': + case 'windows-1256': + case 'x-cp1256': + return 'windows-1256' + case 'cp1257': + case 'windows-1257': + case 'x-cp1257': + return 'windows-1257' + case 'cp1258': + case 'windows-1258': + case 'x-cp1258': + return 'windows-1258' + case 'x-mac-cyrillic': + case 'x-mac-ukrainian': + return 'x-mac-cyrillic' + case 'chinese': + case 'csgb2312': + case 'csiso58gb231280': + case 'gb2312': + case 'gb_2312': + case 'gb_2312-80': + case 'gbk': + case 'iso-ir-58': + case 'x-gbk': + return 'GBK' + case 'gb18030': + return 'gb18030' + case 'big5': + case 'big5-hkscs': + case 'cn-big5': + case 'csbig5': + case 'x-x-big5': + return 'Big5' + case 'cseucpkdfmtjapanese': + case 'euc-jp': + case 'x-euc-jp': + return 'EUC-JP' + case 'csiso2022jp': + case 'iso-2022-jp': + return 'ISO-2022-JP' + case 'csshiftjis': + case 'ms932': + case 'ms_kanji': + case 'shift-jis': + case 'shift_jis': + case 'sjis': + case 'windows-31j': + case 'x-sjis': + return 'Shift_JIS' + case 'cseuckr': + case 'csksc56011987': + case 'euc-kr': + case 'iso-ir-149': + case 'korean': + case 'ks_c_5601-1987': + case 'ks_c_5601-1989': + case 'ksc5601': + case 'ksc_5601': + case 'windows-949': + return 'EUC-KR' + case 'csiso2022kr': + case 'hz-gb-2312': + case 'iso-2022-cn': + case 'iso-2022-cn-ext': + case 'iso-2022-kr': + case 'replacement': + return 'replacement' + case 'unicodefffe': + case 'utf-16be': + return 'UTF-16BE' + case 'csunicode': + case 'iso-10646-ucs-2': + case 'ucs-2': + case 'unicode': + case 'unicodefeff': + case 'utf-16': + case 'utf-16le': + return 'UTF-16LE' + case 'x-user-defined': + return 'x-user-defined' + default: return 'failure' + } +} + +module.exports = { + getEncoding +} + + +/***/ }), + +/***/ 2160: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent +} = __nccwpck_require__(165) +const { + kState, + kError, + kResult, + kEvents, + kAborted +} = __nccwpck_require__(6812) +const { webidl } = __nccwpck_require__(4222) +const { kEnumerableProperty } = __nccwpck_require__(3440) + +class FileReader extends EventTarget { + constructor () { + super() + + this[kState] = 'empty' + this[kResult] = null + this[kError] = null + this[kEvents] = { + loadend: null, + error: null, + abort: null, + load: null, + progress: null, + loadstart: null + } + } + + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer + * @param {import('buffer').Blob} blob + */ + readAsArrayBuffer (blob) { + webidl.brandCheck(this, FileReader) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsArrayBuffer' }) + + blob = webidl.converters.Blob(blob, { strict: false }) + + // The readAsArrayBuffer(blob) method, when invoked, + // must initiate a read operation for blob with ArrayBuffer. + readOperation(this, blob, 'ArrayBuffer') + } + + /** + * @see https://w3c.github.io/FileAPI/#readAsBinaryString + * @param {import('buffer').Blob} blob + */ + readAsBinaryString (blob) { + webidl.brandCheck(this, FileReader) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsBinaryString' }) + + blob = webidl.converters.Blob(blob, { strict: false }) + + // The readAsBinaryString(blob) method, when invoked, + // must initiate a read operation for blob with BinaryString. + readOperation(this, blob, 'BinaryString') + } + + /** + * @see https://w3c.github.io/FileAPI/#readAsDataText + * @param {import('buffer').Blob} blob + * @param {string?} encoding + */ + readAsText (blob, encoding = undefined) { + webidl.brandCheck(this, FileReader) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsText' }) + + blob = webidl.converters.Blob(blob, { strict: false }) + + if (encoding !== undefined) { + encoding = webidl.converters.DOMString(encoding) + } + + // The readAsText(blob, encoding) method, when invoked, + // must initiate a read operation for blob with Text and encoding. + readOperation(this, blob, 'Text', encoding) + } + + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL + * @param {import('buffer').Blob} blob + */ + readAsDataURL (blob) { + webidl.brandCheck(this, FileReader) + + webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsDataURL' }) + + blob = webidl.converters.Blob(blob, { strict: false }) + + // The readAsDataURL(blob) method, when invoked, must + // initiate a read operation for blob with DataURL. + readOperation(this, blob, 'DataURL') + } + + /** + * @see https://w3c.github.io/FileAPI/#dfn-abort + */ + abort () { + // 1. If this's state is "empty" or if this's state is + // "done" set this's result to null and terminate + // this algorithm. + if (this[kState] === 'empty' || this[kState] === 'done') { + this[kResult] = null + return + } + + // 2. If this's state is "loading" set this's state to + // "done" and set this's result to null. + if (this[kState] === 'loading') { + this[kState] = 'done' + this[kResult] = null + } + + // 3. If there are any tasks from this on the file reading + // task source in an affiliated task queue, then remove + // those tasks from that task queue. + this[kAborted] = true + + // 4. Terminate the algorithm for the read method being processed. + // TODO + + // 5. Fire a progress event called abort at this. + fireAProgressEvent('abort', this) + + // 6. If this's state is not "loading", fire a progress + // event called loadend at this. + if (this[kState] !== 'loading') { + fireAProgressEvent('loadend', this) + } + } + + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-readystate + */ + get readyState () { + webidl.brandCheck(this, FileReader) + + switch (this[kState]) { + case 'empty': return this.EMPTY + case 'loading': return this.LOADING + case 'done': return this.DONE + } + } + + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-result + */ + get result () { + webidl.brandCheck(this, FileReader) + + // The result attribute’s getter, when invoked, must return + // this's result. + return this[kResult] + } + + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-error + */ + get error () { + webidl.brandCheck(this, FileReader) + + // The error attribute’s getter, when invoked, must return + // this's error. + return this[kError] + } + + get onloadend () { + webidl.brandCheck(this, FileReader) + + return this[kEvents].loadend + } + + set onloadend (fn) { + webidl.brandCheck(this, FileReader) + + if (this[kEvents].loadend) { + this.removeEventListener('loadend', this[kEvents].loadend) + } + + if (typeof fn === 'function') { + this[kEvents].loadend = fn + this.addEventListener('loadend', fn) + } else { + this[kEvents].loadend = null + } + } + + get onerror () { + webidl.brandCheck(this, FileReader) + + return this[kEvents].error + } + + set onerror (fn) { + webidl.brandCheck(this, FileReader) + + if (this[kEvents].error) { + this.removeEventListener('error', this[kEvents].error) + } + + if (typeof fn === 'function') { + this[kEvents].error = fn + this.addEventListener('error', fn) + } else { + this[kEvents].error = null + } + } + + get onloadstart () { + webidl.brandCheck(this, FileReader) + + return this[kEvents].loadstart + } + + set onloadstart (fn) { + webidl.brandCheck(this, FileReader) + + if (this[kEvents].loadstart) { + this.removeEventListener('loadstart', this[kEvents].loadstart) + } + + if (typeof fn === 'function') { + this[kEvents].loadstart = fn + this.addEventListener('loadstart', fn) + } else { + this[kEvents].loadstart = null + } + } + + get onprogress () { + webidl.brandCheck(this, FileReader) + + return this[kEvents].progress + } + + set onprogress (fn) { + webidl.brandCheck(this, FileReader) + + if (this[kEvents].progress) { + this.removeEventListener('progress', this[kEvents].progress) + } + + if (typeof fn === 'function') { + this[kEvents].progress = fn + this.addEventListener('progress', fn) + } else { + this[kEvents].progress = null + } + } + + get onload () { + webidl.brandCheck(this, FileReader) + + return this[kEvents].load + } + + set onload (fn) { + webidl.brandCheck(this, FileReader) + + if (this[kEvents].load) { + this.removeEventListener('load', this[kEvents].load) + } + + if (typeof fn === 'function') { + this[kEvents].load = fn + this.addEventListener('load', fn) + } else { + this[kEvents].load = null + } + } + + get onabort () { + webidl.brandCheck(this, FileReader) + + return this[kEvents].abort + } + + set onabort (fn) { + webidl.brandCheck(this, FileReader) + + if (this[kEvents].abort) { + this.removeEventListener('abort', this[kEvents].abort) + } + + if (typeof fn === 'function') { + this[kEvents].abort = fn + this.addEventListener('abort', fn) + } else { + this[kEvents].abort = null + } + } +} + +// https://w3c.github.io/FileAPI/#dom-filereader-empty +FileReader.EMPTY = FileReader.prototype.EMPTY = 0 +// https://w3c.github.io/FileAPI/#dom-filereader-loading +FileReader.LOADING = FileReader.prototype.LOADING = 1 +// https://w3c.github.io/FileAPI/#dom-filereader-done +FileReader.DONE = FileReader.prototype.DONE = 2 + +Object.defineProperties(FileReader.prototype, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors, + readAsArrayBuffer: kEnumerableProperty, + readAsBinaryString: kEnumerableProperty, + readAsText: kEnumerableProperty, + readAsDataURL: kEnumerableProperty, + abort: kEnumerableProperty, + readyState: kEnumerableProperty, + result: kEnumerableProperty, + error: kEnumerableProperty, + onloadstart: kEnumerableProperty, + onprogress: kEnumerableProperty, + onload: kEnumerableProperty, + onabort: kEnumerableProperty, + onerror: kEnumerableProperty, + onloadend: kEnumerableProperty, + [Symbol.toStringTag]: { + value: 'FileReader', + writable: false, + enumerable: false, + configurable: true + } +}) + +Object.defineProperties(FileReader, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors +}) + +module.exports = { + FileReader +} + + +/***/ }), + +/***/ 5976: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { webidl } = __nccwpck_require__(4222) + +const kState = Symbol('ProgressEvent state') + +/** + * @see https://xhr.spec.whatwg.org/#progressevent + */ +class ProgressEvent extends Event { + constructor (type, eventInitDict = {}) { + type = webidl.converters.DOMString(type) + eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {}) + + super(type, eventInitDict) + + this[kState] = { + lengthComputable: eventInitDict.lengthComputable, + loaded: eventInitDict.loaded, + total: eventInitDict.total + } + } + + get lengthComputable () { + webidl.brandCheck(this, ProgressEvent) + + return this[kState].lengthComputable + } + + get loaded () { + webidl.brandCheck(this, ProgressEvent) + + return this[kState].loaded + } + + get total () { + webidl.brandCheck(this, ProgressEvent) + + return this[kState].total + } +} + +webidl.converters.ProgressEventInit = webidl.dictionaryConverter([ + { + key: 'lengthComputable', + converter: webidl.converters.boolean, + defaultValue: false + }, + { + key: 'loaded', + converter: webidl.converters['unsigned long long'], + defaultValue: 0 + }, + { + key: 'total', + converter: webidl.converters['unsigned long long'], + defaultValue: 0 + }, + { + key: 'bubbles', + converter: webidl.converters.boolean, + defaultValue: false + }, + { + key: 'cancelable', + converter: webidl.converters.boolean, + defaultValue: false + }, + { + key: 'composed', + converter: webidl.converters.boolean, + defaultValue: false + } +]) + +module.exports = { + ProgressEvent +} + + +/***/ }), + +/***/ 6812: +/***/ ((module) => { + +"use strict"; + + +module.exports = { + kState: Symbol('FileReader state'), + kResult: Symbol('FileReader result'), + kError: Symbol('FileReader error'), + kLastProgressEventFired: Symbol('FileReader last progress event fired timestamp'), + kEvents: Symbol('FileReader events'), + kAborted: Symbol('FileReader aborted') +} + + +/***/ }), + +/***/ 165: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { + kState, + kError, + kResult, + kAborted, + kLastProgressEventFired +} = __nccwpck_require__(6812) +const { ProgressEvent } = __nccwpck_require__(5976) +const { getEncoding } = __nccwpck_require__(396) +const { DOMException } = __nccwpck_require__(7326) +const { serializeAMimeType, parseMIMEType } = __nccwpck_require__(4322) +const { types } = __nccwpck_require__(9023) +const { StringDecoder } = __nccwpck_require__(3193) +const { btoa } = __nccwpck_require__(181) + +/** @type {PropertyDescriptor} */ +const staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false +} + +/** + * @see https://w3c.github.io/FileAPI/#readOperation + * @param {import('./filereader').FileReader} fr + * @param {import('buffer').Blob} blob + * @param {string} type + * @param {string?} encodingName + */ +function readOperation (fr, blob, type, encodingName) { + // 1. If fr’s state is "loading", throw an InvalidStateError + // DOMException. + if (fr[kState] === 'loading') { + throw new DOMException('Invalid state', 'InvalidStateError') + } + + // 2. Set fr’s state to "loading". + fr[kState] = 'loading' + + // 3. Set fr’s result to null. + fr[kResult] = null + + // 4. Set fr’s error to null. + fr[kError] = null + + // 5. Let stream be the result of calling get stream on blob. + /** @type {import('stream/web').ReadableStream} */ + const stream = blob.stream() + + // 6. Let reader be the result of getting a reader from stream. + const reader = stream.getReader() + + // 7. Let bytes be an empty byte sequence. + /** @type {Uint8Array[]} */ + const bytes = [] + + // 8. Let chunkPromise be the result of reading a chunk from + // stream with reader. + let chunkPromise = reader.read() + + // 9. Let isFirstChunk be true. + let isFirstChunk = true + + // 10. In parallel, while true: + // Note: "In parallel" just means non-blocking + // Note 2: readOperation itself cannot be async as double + // reading the body would then reject the promise, instead + // of throwing an error. + ;(async () => { + while (!fr[kAborted]) { + // 1. Wait for chunkPromise to be fulfilled or rejected. + try { + const { done, value } = await chunkPromise + + // 2. If chunkPromise is fulfilled, and isFirstChunk is + // true, queue a task to fire a progress event called + // loadstart at fr. + if (isFirstChunk && !fr[kAborted]) { + queueMicrotask(() => { + fireAProgressEvent('loadstart', fr) + }) + } + + // 3. Set isFirstChunk to false. + isFirstChunk = false + + // 4. If chunkPromise is fulfilled with an object whose + // done property is false and whose value property is + // a Uint8Array object, run these steps: + if (!done && types.isUint8Array(value)) { + // 1. Let bs be the byte sequence represented by the + // Uint8Array object. + + // 2. Append bs to bytes. + bytes.push(value) + + // 3. If roughly 50ms have passed since these steps + // were last invoked, queue a task to fire a + // progress event called progress at fr. + if ( + ( + fr[kLastProgressEventFired] === undefined || + Date.now() - fr[kLastProgressEventFired] >= 50 + ) && + !fr[kAborted] + ) { + fr[kLastProgressEventFired] = Date.now() + queueMicrotask(() => { + fireAProgressEvent('progress', fr) + }) + } + + // 4. Set chunkPromise to the result of reading a + // chunk from stream with reader. + chunkPromise = reader.read() + } else if (done) { + // 5. Otherwise, if chunkPromise is fulfilled with an + // object whose done property is true, queue a task + // to run the following steps and abort this algorithm: + queueMicrotask(() => { + // 1. Set fr’s state to "done". + fr[kState] = 'done' + + // 2. Let result be the result of package data given + // bytes, type, blob’s type, and encodingName. + try { + const result = packageData(bytes, type, blob.type, encodingName) + + // 4. Else: + + if (fr[kAborted]) { + return + } + + // 1. Set fr’s result to result. + fr[kResult] = result + + // 2. Fire a progress event called load at the fr. + fireAProgressEvent('load', fr) + } catch (error) { + // 3. If package data threw an exception error: + + // 1. Set fr’s error to error. + fr[kError] = error + + // 2. Fire a progress event called error at fr. + fireAProgressEvent('error', fr) + } + + // 5. If fr’s state is not "loading", fire a progress + // event called loadend at the fr. + if (fr[kState] !== 'loading') { + fireAProgressEvent('loadend', fr) + } + }) + + break + } + } catch (error) { + if (fr[kAborted]) { + return + } + + // 6. Otherwise, if chunkPromise is rejected with an + // error error, queue a task to run the following + // steps and abort this algorithm: + queueMicrotask(() => { + // 1. Set fr’s state to "done". + fr[kState] = 'done' + + // 2. Set fr’s error to error. + fr[kError] = error + + // 3. Fire a progress event called error at fr. + fireAProgressEvent('error', fr) + + // 4. If fr’s state is not "loading", fire a progress + // event called loadend at fr. + if (fr[kState] !== 'loading') { + fireAProgressEvent('loadend', fr) + } + }) + + break + } + } + })() +} + +/** + * @see https://w3c.github.io/FileAPI/#fire-a-progress-event + * @see https://dom.spec.whatwg.org/#concept-event-fire + * @param {string} e The name of the event + * @param {import('./filereader').FileReader} reader + */ +function fireAProgressEvent (e, reader) { + // The progress event e does not bubble. e.bubbles must be false + // The progress event e is NOT cancelable. e.cancelable must be false + const event = new ProgressEvent(e, { + bubbles: false, + cancelable: false + }) + + reader.dispatchEvent(event) +} + +/** + * @see https://w3c.github.io/FileAPI/#blob-package-data + * @param {Uint8Array[]} bytes + * @param {string} type + * @param {string?} mimeType + * @param {string?} encodingName + */ +function packageData (bytes, type, mimeType, encodingName) { + // 1. A Blob has an associated package data algorithm, given + // bytes, a type, a optional mimeType, and a optional + // encodingName, which switches on type and runs the + // associated steps: + + switch (type) { + case 'DataURL': { + // 1. Return bytes as a DataURL [RFC2397] subject to + // the considerations below: + // * Use mimeType as part of the Data URL if it is + // available in keeping with the Data URL + // specification [RFC2397]. + // * If mimeType is not available return a Data URL + // without a media-type. [RFC2397]. + + // https://datatracker.ietf.org/doc/html/rfc2397#section-3 + // dataurl := "data:" [ mediatype ] [ ";base64" ] "," data + // mediatype := [ type "/" subtype ] *( ";" parameter ) + // data := *urlchar + // parameter := attribute "=" value + let dataURL = 'data:' + + const parsed = parseMIMEType(mimeType || 'application/octet-stream') + + if (parsed !== 'failure') { + dataURL += serializeAMimeType(parsed) + } + + dataURL += ';base64,' + + const decoder = new StringDecoder('latin1') + + for (const chunk of bytes) { + dataURL += btoa(decoder.write(chunk)) + } + + dataURL += btoa(decoder.end()) + + return dataURL + } + case 'Text': { + // 1. Let encoding be failure + let encoding = 'failure' + + // 2. If the encodingName is present, set encoding to the + // result of getting an encoding from encodingName. + if (encodingName) { + encoding = getEncoding(encodingName) + } + + // 3. If encoding is failure, and mimeType is present: + if (encoding === 'failure' && mimeType) { + // 1. Let type be the result of parse a MIME type + // given mimeType. + const type = parseMIMEType(mimeType) + + // 2. If type is not failure, set encoding to the result + // of getting an encoding from type’s parameters["charset"]. + if (type !== 'failure') { + encoding = getEncoding(type.parameters.get('charset')) + } + } + + // 4. If encoding is failure, then set encoding to UTF-8. + if (encoding === 'failure') { + encoding = 'UTF-8' + } + + // 5. Decode bytes using fallback encoding encoding, and + // return the result. + return decode(bytes, encoding) + } + case 'ArrayBuffer': { + // Return a new ArrayBuffer whose contents are bytes. + const sequence = combineByteSequences(bytes) + + return sequence.buffer + } + case 'BinaryString': { + // Return bytes as a binary string, in which every byte + // is represented by a code unit of equal value [0..255]. + let binaryString = '' + + const decoder = new StringDecoder('latin1') + + for (const chunk of bytes) { + binaryString += decoder.write(chunk) + } + + binaryString += decoder.end() + + return binaryString + } + } +} + +/** + * @see https://encoding.spec.whatwg.org/#decode + * @param {Uint8Array[]} ioQueue + * @param {string} encoding + */ +function decode (ioQueue, encoding) { + const bytes = combineByteSequences(ioQueue) + + // 1. Let BOMEncoding be the result of BOM sniffing ioQueue. + const BOMEncoding = BOMSniffing(bytes) + + let slice = 0 + + // 2. If BOMEncoding is non-null: + if (BOMEncoding !== null) { + // 1. Set encoding to BOMEncoding. + encoding = BOMEncoding + + // 2. Read three bytes from ioQueue, if BOMEncoding is + // UTF-8; otherwise read two bytes. + // (Do nothing with those bytes.) + slice = BOMEncoding === 'UTF-8' ? 3 : 2 + } + + // 3. Process a queue with an instance of encoding’s + // decoder, ioQueue, output, and "replacement". + + // 4. Return output. + + const sliced = bytes.slice(slice) + return new TextDecoder(encoding).decode(sliced) +} + +/** + * @see https://encoding.spec.whatwg.org/#bom-sniff + * @param {Uint8Array} ioQueue + */ +function BOMSniffing (ioQueue) { + // 1. Let BOM be the result of peeking 3 bytes from ioQueue, + // converted to a byte sequence. + const [a, b, c] = ioQueue + + // 2. For each of the rows in the table below, starting with + // the first one and going down, if BOM starts with the + // bytes given in the first column, then return the + // encoding given in the cell in the second column of that + // row. Otherwise, return null. + if (a === 0xEF && b === 0xBB && c === 0xBF) { + return 'UTF-8' + } else if (a === 0xFE && b === 0xFF) { + return 'UTF-16BE' + } else if (a === 0xFF && b === 0xFE) { + return 'UTF-16LE' + } + + return null +} + +/** + * @param {Uint8Array[]} sequences + */ +function combineByteSequences (sequences) { + const size = sequences.reduce((a, b) => { + return a + b.byteLength + }, 0) + + let offset = 0 + + return sequences.reduce((a, b) => { + a.set(b, offset) + offset += b.byteLength + return a + }, new Uint8Array(size)) +} + +module.exports = { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent +} + + +/***/ }), + +/***/ 2581: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +// We include a version number for the Dispatcher API. In case of breaking changes, +// this version number must be increased to avoid conflicts. +const globalDispatcher = Symbol.for('undici.globalDispatcher.1') +const { InvalidArgumentError } = __nccwpck_require__(8707) +const Agent = __nccwpck_require__(9965) + +if (getGlobalDispatcher() === undefined) { + setGlobalDispatcher(new Agent()) +} + +function setGlobalDispatcher (agent) { + if (!agent || typeof agent.dispatch !== 'function') { + throw new InvalidArgumentError('Argument agent must implement Agent') + } + Object.defineProperty(globalThis, globalDispatcher, { + value: agent, + writable: true, + enumerable: false, + configurable: false + }) +} + +function getGlobalDispatcher () { + return globalThis[globalDispatcher] +} + +module.exports = { + setGlobalDispatcher, + getGlobalDispatcher +} + + +/***/ }), + +/***/ 8840: +/***/ ((module) => { + +"use strict"; + + +module.exports = class DecoratorHandler { + constructor (handler) { + this.handler = handler + } + + onConnect (...args) { + return this.handler.onConnect(...args) + } + + onError (...args) { + return this.handler.onError(...args) + } + + onUpgrade (...args) { + return this.handler.onUpgrade(...args) + } + + onHeaders (...args) { + return this.handler.onHeaders(...args) + } + + onData (...args) { + return this.handler.onData(...args) + } + + onComplete (...args) { + return this.handler.onComplete(...args) + } + + onBodySent (...args) { + return this.handler.onBodySent(...args) + } +} + + +/***/ }), + +/***/ 8299: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const util = __nccwpck_require__(3440) +const { kBodyUsed } = __nccwpck_require__(6443) +const assert = __nccwpck_require__(2613) +const { InvalidArgumentError } = __nccwpck_require__(8707) +const EE = __nccwpck_require__(4434) + +const redirectableStatusCodes = [300, 301, 302, 303, 307, 308] + +const kBody = Symbol('body') + +class BodyAsyncIterable { + constructor (body) { + this[kBody] = body + this[kBodyUsed] = false + } + + async * [Symbol.asyncIterator] () { + assert(!this[kBodyUsed], 'disturbed') + this[kBodyUsed] = true + yield * this[kBody] + } +} + +class RedirectHandler { + constructor (dispatch, maxRedirections, opts, handler) { + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError('maxRedirections must be a positive number') + } + + util.validateHandler(handler, opts.method, opts.upgrade) + + this.dispatch = dispatch + this.location = null + this.abort = null + this.opts = { ...opts, maxRedirections: 0 } // opts must be a copy + this.maxRedirections = maxRedirections + this.handler = handler + this.history = [] + + if (util.isStream(this.opts.body)) { + // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp + // so that it can be dispatched again? + // TODO (fix): Do we need 100-expect support to provide a way to do this properly? + if (util.bodyLength(this.opts.body) === 0) { + this.opts.body + .on('data', function () { + assert(false) + }) + } + + if (typeof this.opts.body.readableDidRead !== 'boolean') { + this.opts.body[kBodyUsed] = false + EE.prototype.on.call(this.opts.body, 'data', function () { + this[kBodyUsed] = true + }) + } + } else if (this.opts.body && typeof this.opts.body.pipeTo === 'function') { + // TODO (fix): We can't access ReadableStream internal state + // to determine whether or not it has been disturbed. This is just + // a workaround. + this.opts.body = new BodyAsyncIterable(this.opts.body) + } else if ( + this.opts.body && + typeof this.opts.body !== 'string' && + !ArrayBuffer.isView(this.opts.body) && + util.isIterable(this.opts.body) + ) { + // TODO: Should we allow re-using iterable if !this.opts.idempotent + // or through some other flag? + this.opts.body = new BodyAsyncIterable(this.opts.body) + } + } + + onConnect (abort) { + this.abort = abort + this.handler.onConnect(abort, { history: this.history }) + } + + onUpgrade (statusCode, headers, socket) { + this.handler.onUpgrade(statusCode, headers, socket) + } + + onError (error) { + this.handler.onError(error) + } + + onHeaders (statusCode, headers, resume, statusText) { + this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) + ? null + : parseLocation(statusCode, headers) + + if (this.opts.origin) { + this.history.push(new URL(this.opts.path, this.opts.origin)) + } + + if (!this.location) { + return this.handler.onHeaders(statusCode, headers, resume, statusText) + } + + const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))) + const path = search ? `${pathname}${search}` : pathname + + // Remove headers referring to the original URL. + // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers. + // https://tools.ietf.org/html/rfc7231#section-6.4 + this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin) + this.opts.path = path + this.opts.origin = origin + this.opts.maxRedirections = 0 + this.opts.query = null + + // https://tools.ietf.org/html/rfc7231#section-6.4.4 + // In case of HTTP 303, always replace method to be either HEAD or GET + if (statusCode === 303 && this.opts.method !== 'HEAD') { + this.opts.method = 'GET' + this.opts.body = null + } + } + + onData (chunk) { + if (this.location) { + /* + https://tools.ietf.org/html/rfc7231#section-6.4 + + TLDR: undici always ignores 3xx response bodies. + + Redirection is used to serve the requested resource from another URL, so it is assumes that + no body is generated (and thus can be ignored). Even though generating a body is not prohibited. + + For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually + (which means it's optional and not mandated) contain just an hyperlink to the value of + the Location response header, so the body can be ignored safely. + + For status 300, which is "Multiple Choices", the spec mentions both generating a Location + response header AND a response body with the other possible location to follow. + Since the spec explicitily chooses not to specify a format for such body and leave it to + servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it. + */ + } else { + return this.handler.onData(chunk) + } + } + + onComplete (trailers) { + if (this.location) { + /* + https://tools.ietf.org/html/rfc7231#section-6.4 + + TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections + and neither are useful if present. + + See comment on onData method above for more detailed informations. + */ + + this.location = null + this.abort = null + + this.dispatch(this.opts, this) + } else { + this.handler.onComplete(trailers) + } + } + + onBodySent (chunk) { + if (this.handler.onBodySent) { + this.handler.onBodySent(chunk) + } + } +} + +function parseLocation (statusCode, headers) { + if (redirectableStatusCodes.indexOf(statusCode) === -1) { + return null + } + + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].toString().toLowerCase() === 'location') { + return headers[i + 1] + } + } +} + +// https://tools.ietf.org/html/rfc7231#section-6.4.4 +function shouldRemoveHeader (header, removeContent, unknownOrigin) { + if (header.length === 4) { + return util.headerNameToString(header) === 'host' + } + if (removeContent && util.headerNameToString(header).startsWith('content-')) { + return true + } + if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { + const name = util.headerNameToString(header) + return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization' + } + return false +} + +// https://tools.ietf.org/html/rfc7231#section-6.4 +function cleanRequestHeaders (headers, removeContent, unknownOrigin) { + const ret = [] + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) { + ret.push(headers[i], headers[i + 1]) + } + } + } else if (headers && typeof headers === 'object') { + for (const key of Object.keys(headers)) { + if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) { + ret.push(key, headers[key]) + } + } + } else { + assert(headers == null, 'headers must be an object or an array') + } + return ret +} + +module.exports = RedirectHandler + + +/***/ }), + +/***/ 3573: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const assert = __nccwpck_require__(2613) + +const { kRetryHandlerDefaultRetry } = __nccwpck_require__(6443) +const { RequestRetryError } = __nccwpck_require__(8707) +const { isDisturbed, parseHeaders, parseRangeHeader } = __nccwpck_require__(3440) + +function calculateRetryAfterHeader (retryAfter) { + const current = Date.now() + const diff = new Date(retryAfter).getTime() - current + + return diff +} + +class RetryHandler { + constructor (opts, handlers) { + const { retryOptions, ...dispatchOpts } = opts + const { + // Retry scoped + retry: retryFn, + maxRetries, + maxTimeout, + minTimeout, + timeoutFactor, + // Response scoped + methods, + errorCodes, + retryAfter, + statusCodes + } = retryOptions ?? {} + + this.dispatch = handlers.dispatch + this.handler = handlers.handler + this.opts = dispatchOpts + this.abort = null + this.aborted = false + this.retryOpts = { + retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry], + retryAfter: retryAfter ?? true, + maxTimeout: maxTimeout ?? 30 * 1000, // 30s, + timeout: minTimeout ?? 500, // .5s + timeoutFactor: timeoutFactor ?? 2, + maxRetries: maxRetries ?? 5, + // What errors we should retry + methods: methods ?? ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'], + // Indicates which errors to retry + statusCodes: statusCodes ?? [500, 502, 503, 504, 429], + // List of errors to retry + errorCodes: errorCodes ?? [ + 'ECONNRESET', + 'ECONNREFUSED', + 'ENOTFOUND', + 'ENETDOWN', + 'ENETUNREACH', + 'EHOSTDOWN', + 'EHOSTUNREACH', + 'EPIPE' + ] + } + + this.retryCount = 0 + this.start = 0 + this.end = null + this.etag = null + this.resume = null + + // Handle possible onConnect duplication + this.handler.onConnect(reason => { + this.aborted = true + if (this.abort) { + this.abort(reason) + } else { + this.reason = reason + } + }) + } + + onRequestSent () { + if (this.handler.onRequestSent) { + this.handler.onRequestSent() + } + } + + onUpgrade (statusCode, headers, socket) { + if (this.handler.onUpgrade) { + this.handler.onUpgrade(statusCode, headers, socket) + } + } + + onConnect (abort) { + if (this.aborted) { + abort(this.reason) + } else { + this.abort = abort + } + } + + onBodySent (chunk) { + if (this.handler.onBodySent) return this.handler.onBodySent(chunk) + } + + static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) { + const { statusCode, code, headers } = err + const { method, retryOptions } = opts + const { + maxRetries, + timeout, + maxTimeout, + timeoutFactor, + statusCodes, + errorCodes, + methods + } = retryOptions + let { counter, currentTimeout } = state + + currentTimeout = + currentTimeout != null && currentTimeout > 0 ? currentTimeout : timeout + + // Any code that is not a Undici's originated and allowed to retry + if ( + code && + code !== 'UND_ERR_REQ_RETRY' && + code !== 'UND_ERR_SOCKET' && + !errorCodes.includes(code) + ) { + cb(err) + return + } + + // If a set of method are provided and the current method is not in the list + if (Array.isArray(methods) && !methods.includes(method)) { + cb(err) + return + } + + // If a set of status code are provided and the current status code is not in the list + if ( + statusCode != null && + Array.isArray(statusCodes) && + !statusCodes.includes(statusCode) + ) { + cb(err) + return + } + + // If we reached the max number of retries + if (counter > maxRetries) { + cb(err) + return + } + + let retryAfterHeader = headers != null && headers['retry-after'] + if (retryAfterHeader) { + retryAfterHeader = Number(retryAfterHeader) + retryAfterHeader = isNaN(retryAfterHeader) + ? calculateRetryAfterHeader(retryAfterHeader) + : retryAfterHeader * 1e3 // Retry-After is in seconds + } + + const retryTimeout = + retryAfterHeader > 0 + ? Math.min(retryAfterHeader, maxTimeout) + : Math.min(currentTimeout * timeoutFactor ** counter, maxTimeout) + + state.currentTimeout = retryTimeout + + setTimeout(() => cb(null), retryTimeout) + } + + onHeaders (statusCode, rawHeaders, resume, statusMessage) { + const headers = parseHeaders(rawHeaders) + + this.retryCount += 1 + + if (statusCode >= 300) { + this.abort( + new RequestRetryError('Request failed', statusCode, { + headers, + count: this.retryCount + }) + ) + return false + } + + // Checkpoint for resume from where we left it + if (this.resume != null) { + this.resume = null + + if (statusCode !== 206) { + return true + } + + const contentRange = parseRangeHeader(headers['content-range']) + // If no content range + if (!contentRange) { + this.abort( + new RequestRetryError('Content-Range mismatch', statusCode, { + headers, + count: this.retryCount + }) + ) + return false + } + + // Let's start with a weak etag check + if (this.etag != null && this.etag !== headers.etag) { + this.abort( + new RequestRetryError('ETag mismatch', statusCode, { + headers, + count: this.retryCount + }) + ) + return false + } + + const { start, size, end = size } = contentRange + + assert(this.start === start, 'content-range mismatch') + assert(this.end == null || this.end === end, 'content-range mismatch') + + this.resume = resume + return true + } + + if (this.end == null) { + if (statusCode === 206) { + // First time we receive 206 + const range = parseRangeHeader(headers['content-range']) + + if (range == null) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ) + } + + const { start, size, end = size } = range + + assert( + start != null && Number.isFinite(start) && this.start !== start, + 'content-range mismatch' + ) + assert(Number.isFinite(start)) + assert( + end != null && Number.isFinite(end) && this.end !== end, + 'invalid content-length' + ) + + this.start = start + this.end = end + } + + // We make our best to checkpoint the body for further range headers + if (this.end == null) { + const contentLength = headers['content-length'] + this.end = contentLength != null ? Number(contentLength) : null + } + + assert(Number.isFinite(this.start)) + assert( + this.end == null || Number.isFinite(this.end), + 'invalid content-length' + ) + + this.resume = resume + this.etag = headers.etag != null ? headers.etag : null + + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ) + } + + const err = new RequestRetryError('Request failed', statusCode, { + headers, + count: this.retryCount + }) + + this.abort(err) + + return false + } + + onData (chunk) { + this.start += chunk.length + + return this.handler.onData(chunk) + } + + onComplete (rawTrailers) { + this.retryCount = 0 + return this.handler.onComplete(rawTrailers) + } + + onError (err) { + if (this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err) + } + + this.retryOpts.retry( + err, + { + state: { counter: this.retryCount++, currentTimeout: this.retryAfter }, + opts: { retryOptions: this.retryOpts, ...this.opts } + }, + onRetry.bind(this) + ) + + function onRetry (err) { + if (err != null || this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err) + } + + if (this.start !== 0) { + this.opts = { + ...this.opts, + headers: { + ...this.opts.headers, + range: `bytes=${this.start}-${this.end ?? ''}` + } + } + } + + try { + this.dispatch(this.opts, this) + } catch (err) { + this.handler.onError(err) + } + } + } +} + +module.exports = RetryHandler + + +/***/ }), + +/***/ 4415: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const RedirectHandler = __nccwpck_require__(8299) + +function createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections }) { + return (dispatch) => { + return function Intercept (opts, handler) { + const { maxRedirections = defaultMaxRedirections } = opts + + if (!maxRedirections) { + return dispatch(opts, handler) + } + + const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler) + opts = { ...opts, maxRedirections: 0 } // Stop sub dispatcher from also redirecting. + return dispatch(opts, redirectHandler) + } + } +} + +module.exports = createRedirectInterceptor + + +/***/ }), + +/***/ 2824: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0; +const utils_1 = __nccwpck_require__(172); +// C headers +var ERROR; +(function (ERROR) { + ERROR[ERROR["OK"] = 0] = "OK"; + ERROR[ERROR["INTERNAL"] = 1] = "INTERNAL"; + ERROR[ERROR["STRICT"] = 2] = "STRICT"; + ERROR[ERROR["LF_EXPECTED"] = 3] = "LF_EXPECTED"; + ERROR[ERROR["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; + ERROR[ERROR["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; + ERROR[ERROR["INVALID_METHOD"] = 6] = "INVALID_METHOD"; + ERROR[ERROR["INVALID_URL"] = 7] = "INVALID_URL"; + ERROR[ERROR["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; + ERROR[ERROR["INVALID_VERSION"] = 9] = "INVALID_VERSION"; + ERROR[ERROR["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; + ERROR[ERROR["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; + ERROR[ERROR["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; + ERROR[ERROR["INVALID_STATUS"] = 13] = "INVALID_STATUS"; + ERROR[ERROR["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; + ERROR[ERROR["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; + ERROR[ERROR["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; + ERROR[ERROR["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; + ERROR[ERROR["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; + ERROR[ERROR["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; + ERROR[ERROR["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; + ERROR[ERROR["PAUSED"] = 21] = "PAUSED"; + ERROR[ERROR["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; + ERROR[ERROR["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; + ERROR[ERROR["USER"] = 24] = "USER"; +})(ERROR = exports.ERROR || (exports.ERROR = {})); +var TYPE; +(function (TYPE) { + TYPE[TYPE["BOTH"] = 0] = "BOTH"; + TYPE[TYPE["REQUEST"] = 1] = "REQUEST"; + TYPE[TYPE["RESPONSE"] = 2] = "RESPONSE"; +})(TYPE = exports.TYPE || (exports.TYPE = {})); +var FLAGS; +(function (FLAGS) { + FLAGS[FLAGS["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; + FLAGS[FLAGS["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; + FLAGS[FLAGS["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; + FLAGS[FLAGS["CHUNKED"] = 8] = "CHUNKED"; + FLAGS[FLAGS["UPGRADE"] = 16] = "UPGRADE"; + FLAGS[FLAGS["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; + FLAGS[FLAGS["SKIPBODY"] = 64] = "SKIPBODY"; + FLAGS[FLAGS["TRAILING"] = 128] = "TRAILING"; + // 1 << 8 is unused + FLAGS[FLAGS["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; +})(FLAGS = exports.FLAGS || (exports.FLAGS = {})); +var LENIENT_FLAGS; +(function (LENIENT_FLAGS) { + LENIENT_FLAGS[LENIENT_FLAGS["HEADERS"] = 1] = "HEADERS"; + LENIENT_FLAGS[LENIENT_FLAGS["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; + LENIENT_FLAGS[LENIENT_FLAGS["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; +})(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); +var METHODS; +(function (METHODS) { + METHODS[METHODS["DELETE"] = 0] = "DELETE"; + METHODS[METHODS["GET"] = 1] = "GET"; + METHODS[METHODS["HEAD"] = 2] = "HEAD"; + METHODS[METHODS["POST"] = 3] = "POST"; + METHODS[METHODS["PUT"] = 4] = "PUT"; + /* pathological */ + METHODS[METHODS["CONNECT"] = 5] = "CONNECT"; + METHODS[METHODS["OPTIONS"] = 6] = "OPTIONS"; + METHODS[METHODS["TRACE"] = 7] = "TRACE"; + /* WebDAV */ + METHODS[METHODS["COPY"] = 8] = "COPY"; + METHODS[METHODS["LOCK"] = 9] = "LOCK"; + METHODS[METHODS["MKCOL"] = 10] = "MKCOL"; + METHODS[METHODS["MOVE"] = 11] = "MOVE"; + METHODS[METHODS["PROPFIND"] = 12] = "PROPFIND"; + METHODS[METHODS["PROPPATCH"] = 13] = "PROPPATCH"; + METHODS[METHODS["SEARCH"] = 14] = "SEARCH"; + METHODS[METHODS["UNLOCK"] = 15] = "UNLOCK"; + METHODS[METHODS["BIND"] = 16] = "BIND"; + METHODS[METHODS["REBIND"] = 17] = "REBIND"; + METHODS[METHODS["UNBIND"] = 18] = "UNBIND"; + METHODS[METHODS["ACL"] = 19] = "ACL"; + /* subversion */ + METHODS[METHODS["REPORT"] = 20] = "REPORT"; + METHODS[METHODS["MKACTIVITY"] = 21] = "MKACTIVITY"; + METHODS[METHODS["CHECKOUT"] = 22] = "CHECKOUT"; + METHODS[METHODS["MERGE"] = 23] = "MERGE"; + /* upnp */ + METHODS[METHODS["M-SEARCH"] = 24] = "M-SEARCH"; + METHODS[METHODS["NOTIFY"] = 25] = "NOTIFY"; + METHODS[METHODS["SUBSCRIBE"] = 26] = "SUBSCRIBE"; + METHODS[METHODS["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; + /* RFC-5789 */ + METHODS[METHODS["PATCH"] = 28] = "PATCH"; + METHODS[METHODS["PURGE"] = 29] = "PURGE"; + /* CalDAV */ + METHODS[METHODS["MKCALENDAR"] = 30] = "MKCALENDAR"; + /* RFC-2068, section 19.6.1.2 */ + METHODS[METHODS["LINK"] = 31] = "LINK"; + METHODS[METHODS["UNLINK"] = 32] = "UNLINK"; + /* icecast */ + METHODS[METHODS["SOURCE"] = 33] = "SOURCE"; + /* RFC-7540, section 11.6 */ + METHODS[METHODS["PRI"] = 34] = "PRI"; + /* RFC-2326 RTSP */ + METHODS[METHODS["DESCRIBE"] = 35] = "DESCRIBE"; + METHODS[METHODS["ANNOUNCE"] = 36] = "ANNOUNCE"; + METHODS[METHODS["SETUP"] = 37] = "SETUP"; + METHODS[METHODS["PLAY"] = 38] = "PLAY"; + METHODS[METHODS["PAUSE"] = 39] = "PAUSE"; + METHODS[METHODS["TEARDOWN"] = 40] = "TEARDOWN"; + METHODS[METHODS["GET_PARAMETER"] = 41] = "GET_PARAMETER"; + METHODS[METHODS["SET_PARAMETER"] = 42] = "SET_PARAMETER"; + METHODS[METHODS["REDIRECT"] = 43] = "REDIRECT"; + METHODS[METHODS["RECORD"] = 44] = "RECORD"; + /* RAOP */ + METHODS[METHODS["FLUSH"] = 45] = "FLUSH"; +})(METHODS = exports.METHODS || (exports.METHODS = {})); +exports.METHODS_HTTP = [ + METHODS.DELETE, + METHODS.GET, + METHODS.HEAD, + METHODS.POST, + METHODS.PUT, + METHODS.CONNECT, + METHODS.OPTIONS, + METHODS.TRACE, + METHODS.COPY, + METHODS.LOCK, + METHODS.MKCOL, + METHODS.MOVE, + METHODS.PROPFIND, + METHODS.PROPPATCH, + METHODS.SEARCH, + METHODS.UNLOCK, + METHODS.BIND, + METHODS.REBIND, + METHODS.UNBIND, + METHODS.ACL, + METHODS.REPORT, + METHODS.MKACTIVITY, + METHODS.CHECKOUT, + METHODS.MERGE, + METHODS['M-SEARCH'], + METHODS.NOTIFY, + METHODS.SUBSCRIBE, + METHODS.UNSUBSCRIBE, + METHODS.PATCH, + METHODS.PURGE, + METHODS.MKCALENDAR, + METHODS.LINK, + METHODS.UNLINK, + METHODS.PRI, + // TODO(indutny): should we allow it with HTTP? + METHODS.SOURCE, +]; +exports.METHODS_ICE = [ + METHODS.SOURCE, +]; +exports.METHODS_RTSP = [ + METHODS.OPTIONS, + METHODS.DESCRIBE, + METHODS.ANNOUNCE, + METHODS.SETUP, + METHODS.PLAY, + METHODS.PAUSE, + METHODS.TEARDOWN, + METHODS.GET_PARAMETER, + METHODS.SET_PARAMETER, + METHODS.REDIRECT, + METHODS.RECORD, + METHODS.FLUSH, + // For AirPlay + METHODS.GET, + METHODS.POST, +]; +exports.METHOD_MAP = utils_1.enumToMap(METHODS); +exports.H_METHOD_MAP = {}; +Object.keys(exports.METHOD_MAP).forEach((key) => { + if (/^H/.test(key)) { + exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key]; + } +}); +var FINISH; +(function (FINISH) { + FINISH[FINISH["SAFE"] = 0] = "SAFE"; + FINISH[FINISH["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; + FINISH[FINISH["UNSAFE"] = 2] = "UNSAFE"; +})(FINISH = exports.FINISH || (exports.FINISH = {})); +exports.ALPHA = []; +for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) { + // Upper case + exports.ALPHA.push(String.fromCharCode(i)); + // Lower case + exports.ALPHA.push(String.fromCharCode(i + 0x20)); +} +exports.NUM_MAP = { + 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, + 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, +}; +exports.HEX_MAP = { + 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, + 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, + A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF, + a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf, +}; +exports.NUM = [ + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', +]; +exports.ALPHANUM = exports.ALPHA.concat(exports.NUM); +exports.MARK = ['-', '_', '.', '!', '~', '*', '\'', '(', ')']; +exports.USERINFO_CHARS = exports.ALPHANUM + .concat(exports.MARK) + .concat(['%', ';', ':', '&', '=', '+', '$', ',']); +// TODO(indutny): use RFC +exports.STRICT_URL_CHAR = [ + '!', '"', '$', '%', '&', '\'', + '(', ')', '*', '+', ',', '-', '.', '/', + ':', ';', '<', '=', '>', + '@', '[', '\\', ']', '^', '_', + '`', + '{', '|', '}', '~', +].concat(exports.ALPHANUM); +exports.URL_CHAR = exports.STRICT_URL_CHAR + .concat(['\t', '\f']); +// All characters with 0x80 bit set to 1 +for (let i = 0x80; i <= 0xff; i++) { + exports.URL_CHAR.push(i); +} +exports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']); +/* Tokens as defined by rfc 2616. Also lowercases them. + * token = 1* + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + */ +exports.STRICT_TOKEN = [ + '!', '#', '$', '%', '&', '\'', + '*', '+', '-', '.', + '^', '_', '`', + '|', '~', +].concat(exports.ALPHANUM); +exports.TOKEN = exports.STRICT_TOKEN.concat([' ']); +/* + * Verify that a char is a valid visible (printable) US-ASCII + * character or %x80-FF + */ +exports.HEADER_CHARS = ['\t']; +for (let i = 32; i <= 255; i++) { + if (i !== 127) { + exports.HEADER_CHARS.push(i); + } +} +// ',' = \x44 +exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44); +exports.MAJOR = exports.NUM_MAP; +exports.MINOR = exports.MAJOR; +var HEADER_STATE; +(function (HEADER_STATE) { + HEADER_STATE[HEADER_STATE["GENERAL"] = 0] = "GENERAL"; + HEADER_STATE[HEADER_STATE["CONNECTION"] = 1] = "CONNECTION"; + HEADER_STATE[HEADER_STATE["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; + HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; + HEADER_STATE[HEADER_STATE["UPGRADE"] = 4] = "UPGRADE"; + HEADER_STATE[HEADER_STATE["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; + HEADER_STATE[HEADER_STATE["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; + HEADER_STATE[HEADER_STATE["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; + HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED"; +})(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {})); +exports.SPECIAL_HEADERS = { + 'connection': HEADER_STATE.CONNECTION, + 'content-length': HEADER_STATE.CONTENT_LENGTH, + 'proxy-connection': HEADER_STATE.CONNECTION, + 'transfer-encoding': HEADER_STATE.TRANSFER_ENCODING, + 'upgrade': HEADER_STATE.UPGRADE, +}; +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ 3870: +/***/ ((module) => { + +module.exports = 'AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJsbGh0dHBfc3RhdHVzX25hbWUAIRpsbGh0dHBfc2V0X2xlbmllbnRfaGVhZGVycwAiIWxsaHR0cF9zZXRfbGVuaWVudF9jaHVua2VkX2xlbmd0aAAjHWxsaHR0cF9zZXRfbGVuaWVudF9rZWVwX2FsaXZlACQkbGxodHRwX3NldF9sZW5pZW50X3RyYW5zZmVyX2VuY29kaW5nACUYbGxodHRwX21lc3NhZ2VfbmVlZHNfZW9mAD8JFwEAQQELEQECAwQFCwYHNTk3MS8tJyspCsLgAkUCAAsIABCIgICAAAsZACAAEMKAgIAAGiAAIAI2AjggACABOgAoCxwAIAAgAC8BMiAALQAuIAAQwYCAgAAQgICAgAALKgEBf0HAABDGgICAACIBEMKAgIAAGiABQYCIgIAANgI4IAEgADoAKCABCwoAIAAQyICAgAALBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LRQEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABDCgICAABogACAENgI4IAAgAzoAKCAAIAI6AC0gACABNgIYCxEAIAAgASABIAJqEMOAgIAACxAAIABBAEHcABDMgICAABoLZwEBf0EAIQECQCAAKAIMDQACQAJAAkACQCAALQAvDgMBAAMCCyAAKAI4IgFFDQAgASgCLCIBRQ0AIAAgARGAgICAAAAiAQ0DC0EADwsQyoCAgAAACyAAQcOWgIAANgIQQQ4hAQsgAQseAAJAIAAoAgwNACAAQdGbgIAANgIQIABBFTYCDAsLFgACQCAAKAIMQRVHDQAgAEEANgIMCwsWAAJAIAAoAgxBFkcNACAAQQA2AgwLCwcAIAAoAgwLBwAgACgCEAsJACAAIAE2AhALBwAgACgCFAsiAAJAIABBJEkNABDKgICAAAALIABBAnRBoLOAgABqKAIACyIAAkAgAEEuSQ0AEMqAgIAAAAsgAEECdEGwtICAAGooAgAL7gsBAX9B66iAgAAhAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABBnH9qDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0Hhp4CAAA8LQaShgIAADwtBy6yAgAAPC0H+sYCAAA8LQcCkgIAADwtBq6SAgAAPC0GNqICAAA8LQeKmgIAADwtBgLCAgAAPC0G5r4CAAA8LQdekgIAADwtB75+AgAAPC0Hhn4CAAA8LQfqfgIAADwtB8qCAgAAPC0Gor4CAAA8LQa6ygIAADwtBiLCAgAAPC0Hsp4CAAA8LQYKigIAADwtBjp2AgAAPC0HQroCAAA8LQcqjgIAADwtBxbKAgAAPC0HfnICAAA8LQdKcgIAADwtBxKCAgAAPC0HXoICAAA8LQaKfgIAADwtB7a6AgAAPC0GrsICAAA8LQdSlgIAADwtBzK6AgAAPC0H6roCAAA8LQfyrgIAADwtB0rCAgAAPC0HxnYCAAA8LQbuggIAADwtB96uAgAAPC0GQsYCAAA8LQdexgIAADwtBoq2AgAAPC0HUp4CAAA8LQeCrgIAADwtBn6yAgAAPC0HrsYCAAA8LQdWfgIAADwtByrGAgAAPC0HepYCAAA8LQdSegIAADwtB9JyAgAAPC0GnsoCAAA8LQbGdgIAADwtBoJ2AgAAPC0G5sYCAAA8LQbywgIAADwtBkqGAgAAPC0GzpoCAAA8LQemsgIAADwtBrJ6AgAAPC0HUq4CAAA8LQfemgIAADwtBgKaAgAAPC0GwoYCAAA8LQf6egIAADwtBjaOAgAAPC0GJrYCAAA8LQfeigIAADwtBoLGAgAAPC0Gun4CAAA8LQcalgIAADwtB6J6AgAAPC0GTooCAAA8LQcKvgIAADwtBw52AgAAPC0GLrICAAA8LQeGdgIAADwtBja+AgAAPC0HqoYCAAA8LQbStgIAADwtB0q+AgAAPC0HfsoCAAA8LQdKygIAADwtB8LCAgAAPC0GpooCAAA8LQfmjgIAADwtBmZ6AgAAPC0G1rICAAA8LQZuwgIAADwtBkrKAgAAPC0G2q4CAAA8LQcKigIAADwtB+LKAgAAPC0GepYCAAA8LQdCigIAADwtBup6AgAAPC0GBnoCAAA8LEMqAgIAAAAtB1qGAgAAhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAgAiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCBCIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQcaRgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIwIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAggiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2ioCAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCNCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIMIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZqAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAjgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCECIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZWQgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAI8IgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAhQiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEGqm4CAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCQCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIYIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZOAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCJCIERQ0AIAAgBBGAgICAAAAhAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIsIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAigiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2iICAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCUCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIcIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABBwpmAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCICIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZSUgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAJMIgRFDQAgACAEEYCAgIAAACEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAlQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCWCIERQ0AIAAgBBGAgICAAAAhAwsgAwtFAQF/AkACQCAALwEwQRRxQRRHDQBBASEDIAAtAChBAUYNASAALwEyQeUARiEDDAELIAAtAClBBUYhAwsgACADOgAuQQAL/gEBA39BASEDAkAgAC8BMCIEQQhxDQAgACkDIEIAUiEDCwJAAkAgAC0ALkUNAEEBIQUgAC0AKUEFRg0BQQEhBSAEQcAAcUUgA3FBAUcNAQtBACEFIARBwABxDQBBAiEFIARB//8DcSIDQQhxDQACQCADQYAEcUUNAAJAIAAtAChBAUcNACAALQAtQQpxDQBBBQ8LQQQPCwJAIANBIHENAAJAIAAtAChBAUYNACAALwEyQf//A3EiAEGcf2pB5ABJDQAgAEHMAUYNACAAQbACRg0AQQQhBSAEQShxRQ0CIANBiARxQYAERg0CC0EADwtBAEEDIAApAyBQGyEFCyAFC2IBAn9BACEBAkAgAC0AKEEBRg0AIAAvATJB//8DcSICQZx/akHkAEkNACACQcwBRg0AIAJBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhASAAQYgEcUGABEYNACAAQShxRSEBCyABC6cBAQN/AkACQAJAIAAtACpFDQAgAC0AK0UNAEEAIQMgAC8BMCIEQQJxRQ0BDAILQQAhAyAALwEwIgRBAXFFDQELQQEhAyAALQAoQQFGDQAgAC8BMkH//wNxIgVBnH9qQeQASQ0AIAVBzAFGDQAgBUGwAkYNACAEQcAAcQ0AQQAhAyAEQYgEcUGABEYNACAEQShxQQBHIQMLIABBADsBMCAAQQA6AC8gAwuZAQECfwJAAkACQCAALQAqRQ0AIAAtACtFDQBBACEBIAAvATAiAkECcUUNAQwCC0EAIQEgAC8BMCICQQFxRQ0BC0EBIQEgAC0AKEEBRg0AIAAvATJB//8DcSIAQZx/akHkAEkNACAAQcwBRg0AIABBsAJGDQAgAkHAAHENAEEAIQEgAkGIBHFBgARGDQAgAkEocUEARyEBCyABC1kAIABBGGpCADcDACAAQgA3AwAgAEE4akIANwMAIABBMGpCADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwHLAcoBuAHJAbkByAG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAQDcAQtBACEQDMYBC0EOIRAMxQELQQ0hEAzEAQtBDyEQDMMBC0EQIRAMwgELQRMhEAzBAQtBFCEQDMABC0EVIRAMvwELQRYhEAy+AQtBFyEQDL0BC0EYIRAMvAELQRkhEAy7AQtBGiEQDLoBC0EbIRAMuQELQRwhEAy4AQtBCCEQDLcBC0EdIRAMtgELQSAhEAy1AQtBHyEQDLQBC0EHIRAMswELQSEhEAyyAQtBIiEQDLEBC0EeIRAMsAELQSMhEAyvAQtBEiEQDK4BC0ERIRAMrQELQSQhEAysAQtBJSEQDKsBC0EmIRAMqgELQSchEAypAQtBwwEhEAyoAQtBKSEQDKcBC0ErIRAMpgELQSwhEAylAQtBLSEQDKQBC0EuIRAMowELQS8hEAyiAQtBxAEhEAyhAQtBMCEQDKABC0E0IRAMnwELQQwhEAyeAQtBMSEQDJ0BC0EyIRAMnAELQTMhEAybAQtBOSEQDJoBC0E1IRAMmQELQcUBIRAMmAELQQshEAyXAQtBOiEQDJYBC0E2IRAMlQELQQohEAyUAQtBNyEQDJMBC0E4IRAMkgELQTwhEAyRAQtBOyEQDJABC0E9IRAMjwELQQkhEAyOAQtBKCEQDI0BC0E+IRAMjAELQT8hEAyLAQtBwAAhEAyKAQtBwQAhEAyJAQtBwgAhEAyIAQtBwwAhEAyHAQtBxAAhEAyGAQtBxQAhEAyFAQtBxgAhEAyEAQtBKiEQDIMBC0HHACEQDIIBC0HIACEQDIEBC0HJACEQDIABC0HKACEQDH8LQcsAIRAMfgtBzQAhEAx9C0HMACEQDHwLQc4AIRAMewtBzwAhEAx6C0HQACEQDHkLQdEAIRAMeAtB0gAhEAx3C0HTACEQDHYLQdQAIRAMdQtB1gAhEAx0C0HVACEQDHMLQQYhEAxyC0HXACEQDHELQQUhEAxwC0HYACEQDG8LQQQhEAxuC0HZACEQDG0LQdoAIRAMbAtB2wAhEAxrC0HcACEQDGoLQQMhEAxpC0HdACEQDGgLQd4AIRAMZwtB3wAhEAxmC0HhACEQDGULQeAAIRAMZAtB4gAhEAxjC0HjACEQDGILQQIhEAxhC0HkACEQDGALQeUAIRAMXwtB5gAhEAxeC0HnACEQDF0LQegAIRAMXAtB6QAhEAxbC0HqACEQDFoLQesAIRAMWQtB7AAhEAxYC0HtACEQDFcLQe4AIRAMVgtB7wAhEAxVC0HwACEQDFQLQfEAIRAMUwtB8gAhEAxSC0HzACEQDFELQfQAIRAMUAtB9QAhEAxPC0H2ACEQDE4LQfcAIRAMTQtB+AAhEAxMC0H5ACEQDEsLQfoAIRAMSgtB+wAhEAxJC0H8ACEQDEgLQf0AIRAMRwtB/gAhEAxGC0H/ACEQDEULQYABIRAMRAtBgQEhEAxDC0GCASEQDEILQYMBIRAMQQtBhAEhEAxAC0GFASEQDD8LQYYBIRAMPgtBhwEhEAw9C0GIASEQDDwLQYkBIRAMOwtBigEhEAw6C0GLASEQDDkLQYwBIRAMOAtBjQEhEAw3C0GOASEQDDYLQY8BIRAMNQtBkAEhEAw0C0GRASEQDDMLQZIBIRAMMgtBkwEhEAwxC0GUASEQDDALQZUBIRAMLwtBlgEhEAwuC0GXASEQDC0LQZgBIRAMLAtBmQEhEAwrC0GaASEQDCoLQZsBIRAMKQtBnAEhEAwoC0GdASEQDCcLQZ4BIRAMJgtBnwEhEAwlC0GgASEQDCQLQaEBIRAMIwtBogEhEAwiC0GjASEQDCELQaQBIRAMIAtBpQEhEAwfC0GmASEQDB4LQacBIRAMHQtBqAEhEAwcC0GpASEQDBsLQaoBIRAMGgtBqwEhEAwZC0GsASEQDBgLQa0BIRAMFwtBrgEhEAwWC0EBIRAMFQtBrwEhEAwUC0GwASEQDBMLQbEBIRAMEgtBswEhEAwRC0GyASEQDBALQbQBIRAMDwtBtQEhEAwOC0G2ASEQDA0LQbcBIRAMDAtBuAEhEAwLC0G5ASEQDAoLQboBIRAMCQtBuwEhEAwIC0HGASEQDAcLQbwBIRAMBgtBvQEhEAwFC0G+ASEQDAQLQb8BIRAMAwtBwAEhEAwCC0HCASEQDAELQcEBIRALA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAQDscBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxweHyAhIyUoP0BBREVGR0hJSktMTU9QUVJT3gNXWVtcXWBiZWZnaGlqa2xtb3BxcnN0dXZ3eHl6e3x9foABggGFAYYBhwGJAYsBjAGNAY4BjwGQAZEBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAZkCpAKwAv4C/gILIAEiBCACRw3zAUHdASEQDP8DCyABIhAgAkcN3QFBwwEhEAz+AwsgASIBIAJHDZABQfcAIRAM/QMLIAEiASACRw2GAUHvACEQDPwDCyABIgEgAkcNf0HqACEQDPsDCyABIgEgAkcNe0HoACEQDPoDCyABIgEgAkcNeEHmACEQDPkDCyABIgEgAkcNGkEYIRAM+AMLIAEiASACRw0UQRIhEAz3AwsgASIBIAJHDVlBxQAhEAz2AwsgASIBIAJHDUpBPyEQDPUDCyABIgEgAkcNSEE8IRAM9AMLIAEiASACRw1BQTEhEAzzAwsgAC0ALkEBRg3rAwyHAgsgACABIgEgAhDAgICAAEEBRw3mASAAQgA3AyAM5wELIAAgASIBIAIQtICAgAAiEA3nASABIQEM9QILAkAgASIBIAJHDQBBBiEQDPADCyAAIAFBAWoiASACELuAgIAAIhAN6AEgASEBDDELIABCADcDIEESIRAM1QMLIAEiECACRw0rQR0hEAztAwsCQCABIgEgAkYNACABQQFqIQFBECEQDNQDC0EHIRAM7AMLIABCACAAKQMgIhEgAiABIhBrrSISfSITIBMgEVYbNwMgIBEgElYiFEUN5QFBCCEQDOsDCwJAIAEiASACRg0AIABBiYCAgAA2AgggACABNgIEIAEhAUEUIRAM0gMLQQkhEAzqAwsgASEBIAApAyBQDeQBIAEhAQzyAgsCQCABIgEgAkcNAEELIRAM6QMLIAAgAUEBaiIBIAIQtoCAgAAiEA3lASABIQEM8gILIAAgASIBIAIQuICAgAAiEA3lASABIQEM8gILIAAgASIBIAIQuICAgAAiEA3mASABIQEMDQsgACABIgEgAhC6gICAACIQDecBIAEhAQzwAgsCQCABIgEgAkcNAEEPIRAM5QMLIAEtAAAiEEE7Rg0IIBBBDUcN6AEgAUEBaiEBDO8CCyAAIAEiASACELqAgIAAIhAN6AEgASEBDPICCwNAAkAgAS0AAEHwtYCAAGotAAAiEEEBRg0AIBBBAkcN6wEgACgCBCEQIABBADYCBCAAIBAgAUEBaiIBELmAgIAAIhAN6gEgASEBDPQCCyABQQFqIgEgAkcNAAtBEiEQDOIDCyAAIAEiASACELqAgIAAIhAN6QEgASEBDAoLIAEiASACRw0GQRshEAzgAwsCQCABIgEgAkcNAEEWIRAM4AMLIABBioCAgAA2AgggACABNgIEIAAgASACELiAgIAAIhAN6gEgASEBQSAhEAzGAwsCQCABIgEgAkYNAANAAkAgAS0AAEHwt4CAAGotAAAiEEECRg0AAkAgEEF/ag4E5QHsAQDrAewBCyABQQFqIQFBCCEQDMgDCyABQQFqIgEgAkcNAAtBFSEQDN8DC0EVIRAM3gMLA0ACQCABLQAAQfC5gIAAai0AACIQQQJGDQAgEEF/ag4E3gHsAeAB6wHsAQsgAUEBaiIBIAJHDQALQRghEAzdAwsCQCABIgEgAkYNACAAQYuAgIAANgIIIAAgATYCBCABIQFBByEQDMQDC0EZIRAM3AMLIAFBAWohAQwCCwJAIAEiFCACRw0AQRohEAzbAwsgFCEBAkAgFC0AAEFzag4U3QLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gIA7gILQQAhECAAQQA2AhwgAEGvi4CAADYCECAAQQI2AgwgACAUQQFqNgIUDNoDCwJAIAEtAAAiEEE7Rg0AIBBBDUcN6AEgAUEBaiEBDOUCCyABQQFqIQELQSIhEAy/AwsCQCABIhAgAkcNAEEcIRAM2AMLQgAhESAQIQEgEC0AAEFQag435wHmAQECAwQFBgcIAAAAAAAAAAkKCwwNDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxAREhMUAAtBHiEQDL0DC0ICIREM5QELQgMhEQzkAQtCBCERDOMBC0IFIREM4gELQgYhEQzhAQtCByERDOABC0IIIREM3wELQgkhEQzeAQtCCiERDN0BC0ILIREM3AELQgwhEQzbAQtCDSERDNoBC0IOIREM2QELQg8hEQzYAQtCCiERDNcBC0ILIREM1gELQgwhEQzVAQtCDSERDNQBC0IOIREM0wELQg8hEQzSAQtCACERAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAQLQAAQVBqDjflAeQBAAECAwQFBgfmAeYB5gHmAeYB5gHmAQgJCgsMDeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gEODxAREhPmAQtCAiERDOQBC0IDIREM4wELQgQhEQziAQtCBSERDOEBC0IGIREM4AELQgchEQzfAQtCCCERDN4BC0IJIREM3QELQgohEQzcAQtCCyERDNsBC0IMIREM2gELQg0hEQzZAQtCDiERDNgBC0IPIREM1wELQgohEQzWAQtCCyERDNUBC0IMIREM1AELQg0hEQzTAQtCDiERDNIBC0IPIREM0QELIABCACAAKQMgIhEgAiABIhBrrSISfSITIBMgEVYbNwMgIBEgElYiFEUN0gFBHyEQDMADCwJAIAEiASACRg0AIABBiYCAgAA2AgggACABNgIEIAEhAUEkIRAMpwMLQSAhEAy/AwsgACABIhAgAhC+gICAAEF/ag4FtgEAxQIB0QHSAQtBESEQDKQDCyAAQQE6AC8gECEBDLsDCyABIgEgAkcN0gFBJCEQDLsDCyABIg0gAkcNHkHGACEQDLoDCyAAIAEiASACELKAgIAAIhAN1AEgASEBDLUBCyABIhAgAkcNJkHQACEQDLgDCwJAIAEiASACRw0AQSghEAy4AwsgAEEANgIEIABBjICAgAA2AgggACABIAEQsYCAgAAiEA3TASABIQEM2AELAkAgASIQIAJHDQBBKSEQDLcDCyAQLQAAIgFBIEYNFCABQQlHDdMBIBBBAWohAQwVCwJAIAEiASACRg0AIAFBAWohAQwXC0EqIRAMtQMLAkAgASIQIAJHDQBBKyEQDLUDCwJAIBAtAAAiAUEJRg0AIAFBIEcN1QELIAAtACxBCEYN0wEgECEBDJEDCwJAIAEiASACRw0AQSwhEAy0AwsgAS0AAEEKRw3VASABQQFqIQEMyQILIAEiDiACRw3VAUEvIRAMsgMLA0ACQCABLQAAIhBBIEYNAAJAIBBBdmoOBADcAdwBANoBCyABIQEM4AELIAFBAWoiASACRw0AC0ExIRAMsQMLQTIhECABIhQgAkYNsAMgAiAUayAAKAIAIgFqIRUgFCABa0EDaiEWAkADQCAULQAAIhdBIHIgFyAXQb9/akH/AXFBGkkbQf8BcSABQfC7gIAAai0AAEcNAQJAIAFBA0cNAEEGIQEMlgMLIAFBAWohASAUQQFqIhQgAkcNAAsgACAVNgIADLEDCyAAQQA2AgAgFCEBDNkBC0EzIRAgASIUIAJGDa8DIAIgFGsgACgCACIBaiEVIBQgAWtBCGohFgJAA0AgFC0AACIXQSByIBcgF0G/f2pB/wFxQRpJG0H/AXEgAUH0u4CAAGotAABHDQECQCABQQhHDQBBBSEBDJUDCyABQQFqIQEgFEEBaiIUIAJHDQALIAAgFTYCAAywAwsgAEEANgIAIBQhAQzYAQtBNCEQIAEiFCACRg2uAyACIBRrIAAoAgAiAWohFSAUIAFrQQVqIRYCQANAIBQtAAAiF0EgciAXIBdBv39qQf8BcUEaSRtB/wFxIAFB0MKAgABqLQAARw0BAkAgAUEFRw0AQQchAQyUAwsgAUEBaiEBIBRBAWoiFCACRw0ACyAAIBU2AgAMrwMLIABBADYCACAUIQEM1wELAkAgASIBIAJGDQADQAJAIAEtAABBgL6AgABqLQAAIhBBAUYNACAQQQJGDQogASEBDN0BCyABQQFqIgEgAkcNAAtBMCEQDK4DC0EwIRAMrQMLAkAgASIBIAJGDQADQAJAIAEtAAAiEEEgRg0AIBBBdmoOBNkB2gHaAdkB2gELIAFBAWoiASACRw0AC0E4IRAMrQMLQTghEAysAwsDQAJAIAEtAAAiEEEgRg0AIBBBCUcNAwsgAUEBaiIBIAJHDQALQTwhEAyrAwsDQAJAIAEtAAAiEEEgRg0AAkACQCAQQXZqDgTaAQEB2gEACyAQQSxGDdsBCyABIQEMBAsgAUEBaiIBIAJHDQALQT8hEAyqAwsgASEBDNsBC0HAACEQIAEiFCACRg2oAyACIBRrIAAoAgAiAWohFiAUIAFrQQZqIRcCQANAIBQtAABBIHIgAUGAwICAAGotAABHDQEgAUEGRg2OAyABQQFqIQEgFEEBaiIUIAJHDQALIAAgFjYCAAypAwsgAEEANgIAIBQhAQtBNiEQDI4DCwJAIAEiDyACRw0AQcEAIRAMpwMLIABBjICAgAA2AgggACAPNgIEIA8hASAALQAsQX9qDgTNAdUB1wHZAYcDCyABQQFqIQEMzAELAkAgASIBIAJGDQADQAJAIAEtAAAiEEEgciAQIBBBv39qQf8BcUEaSRtB/wFxIhBBCUYNACAQQSBGDQACQAJAAkACQCAQQZ1/ag4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIRAMkQMLIAFBAWohAUEyIRAMkAMLIAFBAWohAUEzIRAMjwMLIAEhAQzQAQsgAUEBaiIBIAJHDQALQTUhEAylAwtBNSEQDKQDCwJAIAEiASACRg0AA0ACQCABLQAAQYC8gIAAai0AAEEBRg0AIAEhAQzTAQsgAUEBaiIBIAJHDQALQT0hEAykAwtBPSEQDKMDCyAAIAEiASACELCAgIAAIhAN1gEgASEBDAELIBBBAWohAQtBPCEQDIcDCwJAIAEiASACRw0AQcIAIRAMoAMLAkADQAJAIAEtAABBd2oOGAAC/gL+AoQD/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4CAP4CCyABQQFqIgEgAkcNAAtBwgAhEAygAwsgAUEBaiEBIAAtAC1BAXFFDb0BIAEhAQtBLCEQDIUDCyABIgEgAkcN0wFBxAAhEAydAwsDQAJAIAEtAABBkMCAgABqLQAAQQFGDQAgASEBDLcCCyABQQFqIgEgAkcNAAtBxQAhEAycAwsgDS0AACIQQSBGDbMBIBBBOkcNgQMgACgCBCEBIABBADYCBCAAIAEgDRCvgICAACIBDdABIA1BAWohAQyzAgtBxwAhECABIg0gAkYNmgMgAiANayAAKAIAIgFqIRYgDSABa0EFaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUGQwoCAAGotAABHDYADIAFBBUYN9AIgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMmgMLQcgAIRAgASINIAJGDZkDIAIgDWsgACgCACIBaiEWIA0gAWtBCWohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFBlsKAgABqLQAARw3/AgJAIAFBCUcNAEECIQEM9QILIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJkDCwJAIAEiDSACRw0AQckAIRAMmQMLAkACQCANLQAAIgFBIHIgASABQb9/akH/AXFBGkkbQf8BcUGSf2oOBwCAA4ADgAOAA4ADAYADCyANQQFqIQFBPiEQDIADCyANQQFqIQFBPyEQDP8CC0HKACEQIAEiDSACRg2XAyACIA1rIAAoAgAiAWohFiANIAFrQQFqIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQaDCgIAAai0AAEcN/QIgAUEBRg3wAiABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyXAwtBywAhECABIg0gAkYNlgMgAiANayAAKAIAIgFqIRYgDSABa0EOaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUGiwoCAAGotAABHDfwCIAFBDkYN8AIgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMlgMLQcwAIRAgASINIAJGDZUDIAIgDWsgACgCACIBaiEWIA0gAWtBD2ohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFBwMKAgABqLQAARw37AgJAIAFBD0cNAEEDIQEM8QILIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJUDC0HNACEQIAEiDSACRg2UAyACIA1rIAAoAgAiAWohFiANIAFrQQVqIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQdDCgIAAai0AAEcN+gICQCABQQVHDQBBBCEBDPACCyABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyUAwsCQCABIg0gAkcNAEHOACEQDJQDCwJAAkACQAJAIA0tAAAiAUEgciABIAFBv39qQf8BcUEaSRtB/wFxQZ1/ag4TAP0C/QL9Av0C/QL9Av0C/QL9Av0C/QL9AgH9Av0C/QICA/0CCyANQQFqIQFBwQAhEAz9AgsgDUEBaiEBQcIAIRAM/AILIA1BAWohAUHDACEQDPsCCyANQQFqIQFBxAAhEAz6AgsCQCABIgEgAkYNACAAQY2AgIAANgIIIAAgATYCBCABIQFBxQAhEAz6AgtBzwAhEAySAwsgECEBAkACQCAQLQAAQXZqDgQBqAKoAgCoAgsgEEEBaiEBC0EnIRAM+AILAkAgASIBIAJHDQBB0QAhEAyRAwsCQCABLQAAQSBGDQAgASEBDI0BCyABQQFqIQEgAC0ALUEBcUUNxwEgASEBDIwBCyABIhcgAkcNyAFB0gAhEAyPAwtB0wAhECABIhQgAkYNjgMgAiAUayAAKAIAIgFqIRYgFCABa0EBaiEXA0AgFC0AACABQdbCgIAAai0AAEcNzAEgAUEBRg3HASABQQFqIQEgFEEBaiIUIAJHDQALIAAgFjYCAAyOAwsCQCABIgEgAkcNAEHVACEQDI4DCyABLQAAQQpHDcwBIAFBAWohAQzHAQsCQCABIgEgAkcNAEHWACEQDI0DCwJAAkAgAS0AAEF2ag4EAM0BzQEBzQELIAFBAWohAQzHAQsgAUEBaiEBQcoAIRAM8wILIAAgASIBIAIQroCAgAAiEA3LASABIQFBzQAhEAzyAgsgAC0AKUEiRg2FAwymAgsCQCABIgEgAkcNAEHbACEQDIoDC0EAIRRBASEXQQEhFkEAIRACQAJAAkACQAJAAkACQAJAAkAgAS0AAEFQag4K1AHTAQABAgMEBQYI1QELQQIhEAwGC0EDIRAMBQtBBCEQDAQLQQUhEAwDC0EGIRAMAgtBByEQDAELQQghEAtBACEXQQAhFkEAIRQMzAELQQkhEEEBIRRBACEXQQAhFgzLAQsCQCABIgEgAkcNAEHdACEQDIkDCyABLQAAQS5HDcwBIAFBAWohAQymAgsgASIBIAJHDcwBQd8AIRAMhwMLAkAgASIBIAJGDQAgAEGOgICAADYCCCAAIAE2AgQgASEBQdAAIRAM7gILQeAAIRAMhgMLQeEAIRAgASIBIAJGDYUDIAIgAWsgACgCACIUaiEWIAEgFGtBA2ohFwNAIAEtAAAgFEHiwoCAAGotAABHDc0BIBRBA0YNzAEgFEEBaiEUIAFBAWoiASACRw0ACyAAIBY2AgAMhQMLQeIAIRAgASIBIAJGDYQDIAIgAWsgACgCACIUaiEWIAEgFGtBAmohFwNAIAEtAAAgFEHmwoCAAGotAABHDcwBIBRBAkYNzgEgFEEBaiEUIAFBAWoiASACRw0ACyAAIBY2AgAMhAMLQeMAIRAgASIBIAJGDYMDIAIgAWsgACgCACIUaiEWIAEgFGtBA2ohFwNAIAEtAAAgFEHpwoCAAGotAABHDcsBIBRBA0YNzgEgFEEBaiEUIAFBAWoiASACRw0ACyAAIBY2AgAMgwMLAkAgASIBIAJHDQBB5QAhEAyDAwsgACABQQFqIgEgAhCogICAACIQDc0BIAEhAUHWACEQDOkCCwJAIAEiASACRg0AA0ACQCABLQAAIhBBIEYNAAJAAkACQCAQQbh/ag4LAAHPAc8BzwHPAc8BzwHPAc8BAs8BCyABQQFqIQFB0gAhEAztAgsgAUEBaiEBQdMAIRAM7AILIAFBAWohAUHUACEQDOsCCyABQQFqIgEgAkcNAAtB5AAhEAyCAwtB5AAhEAyBAwsDQAJAIAEtAABB8MKAgABqLQAAIhBBAUYNACAQQX5qDgPPAdAB0QHSAQsgAUEBaiIBIAJHDQALQeYAIRAMgAMLAkAgASIBIAJGDQAgAUEBaiEBDAMLQecAIRAM/wILA0ACQCABLQAAQfDEgIAAai0AACIQQQFGDQACQCAQQX5qDgTSAdMB1AEA1QELIAEhAUHXACEQDOcCCyABQQFqIgEgAkcNAAtB6AAhEAz+AgsCQCABIgEgAkcNAEHpACEQDP4CCwJAIAEtAAAiEEF2ag4augHVAdUBvAHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHKAdUB1QEA0wELIAFBAWohAQtBBiEQDOMCCwNAAkAgAS0AAEHwxoCAAGotAABBAUYNACABIQEMngILIAFBAWoiASACRw0AC0HqACEQDPsCCwJAIAEiASACRg0AIAFBAWohAQwDC0HrACEQDPoCCwJAIAEiASACRw0AQewAIRAM+gILIAFBAWohAQwBCwJAIAEiASACRw0AQe0AIRAM+QILIAFBAWohAQtBBCEQDN4CCwJAIAEiFCACRw0AQe4AIRAM9wILIBQhAQJAAkACQCAULQAAQfDIgIAAai0AAEF/ag4H1AHVAdYBAJwCAQLXAQsgFEEBaiEBDAoLIBRBAWohAQzNAQtBACEQIABBADYCHCAAQZuSgIAANgIQIABBBzYCDCAAIBRBAWo2AhQM9gILAkADQAJAIAEtAABB8MiAgABqLQAAIhBBBEYNAAJAAkAgEEF/ag4H0gHTAdQB2QEABAHZAQsgASEBQdoAIRAM4AILIAFBAWohAUHcACEQDN8CCyABQQFqIgEgAkcNAAtB7wAhEAz2AgsgAUEBaiEBDMsBCwJAIAEiFCACRw0AQfAAIRAM9QILIBQtAABBL0cN1AEgFEEBaiEBDAYLAkAgASIUIAJHDQBB8QAhEAz0AgsCQCAULQAAIgFBL0cNACAUQQFqIQFB3QAhEAzbAgsgAUF2aiIEQRZLDdMBQQEgBHRBiYCAAnFFDdMBDMoCCwJAIAEiASACRg0AIAFBAWohAUHeACEQDNoCC0HyACEQDPICCwJAIAEiFCACRw0AQfQAIRAM8gILIBQhAQJAIBQtAABB8MyAgABqLQAAQX9qDgPJApQCANQBC0HhACEQDNgCCwJAIAEiFCACRg0AA0ACQCAULQAAQfDKgIAAai0AACIBQQNGDQACQCABQX9qDgLLAgDVAQsgFCEBQd8AIRAM2gILIBRBAWoiFCACRw0AC0HzACEQDPECC0HzACEQDPACCwJAIAEiASACRg0AIABBj4CAgAA2AgggACABNgIEIAEhAUHgACEQDNcCC0H1ACEQDO8CCwJAIAEiASACRw0AQfYAIRAM7wILIABBj4CAgAA2AgggACABNgIEIAEhAQtBAyEQDNQCCwNAIAEtAABBIEcNwwIgAUEBaiIBIAJHDQALQfcAIRAM7AILAkAgASIBIAJHDQBB+AAhEAzsAgsgAS0AAEEgRw3OASABQQFqIQEM7wELIAAgASIBIAIQrICAgAAiEA3OASABIQEMjgILAkAgASIEIAJHDQBB+gAhEAzqAgsgBC0AAEHMAEcN0QEgBEEBaiEBQRMhEAzPAQsCQCABIgQgAkcNAEH7ACEQDOkCCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRADQCAELQAAIAFB8M6AgABqLQAARw3QASABQQVGDc4BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQfsAIRAM6AILAkAgASIEIAJHDQBB/AAhEAzoAgsCQAJAIAQtAABBvX9qDgwA0QHRAdEB0QHRAdEB0QHRAdEB0QEB0QELIARBAWohAUHmACEQDM8CCyAEQQFqIQFB5wAhEAzOAgsCQCABIgQgAkcNAEH9ACEQDOcCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDc8BIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEH9ACEQDOcCCyAAQQA2AgAgEEEBaiEBQRAhEAzMAQsCQCABIgQgAkcNAEH+ACEQDOYCCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUH2zoCAAGotAABHDc4BIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEH+ACEQDOYCCyAAQQA2AgAgEEEBaiEBQRYhEAzLAQsCQCABIgQgAkcNAEH/ACEQDOUCCyACIARrIAAoAgAiAWohFCAEIAFrQQNqIRACQANAIAQtAAAgAUH8zoCAAGotAABHDc0BIAFBA0YNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEH/ACEQDOUCCyAAQQA2AgAgEEEBaiEBQQUhEAzKAQsCQCABIgQgAkcNAEGAASEQDOQCCyAELQAAQdkARw3LASAEQQFqIQFBCCEQDMkBCwJAIAEiBCACRw0AQYEBIRAM4wILAkACQCAELQAAQbJ/ag4DAMwBAcwBCyAEQQFqIQFB6wAhEAzKAgsgBEEBaiEBQewAIRAMyQILAkAgASIEIAJHDQBBggEhEAziAgsCQAJAIAQtAABBuH9qDggAywHLAcsBywHLAcsBAcsBCyAEQQFqIQFB6gAhEAzJAgsgBEEBaiEBQe0AIRAMyAILAkAgASIEIAJHDQBBgwEhEAzhAgsgAiAEayAAKAIAIgFqIRAgBCABa0ECaiEUAkADQCAELQAAIAFBgM+AgABqLQAARw3JASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBA2AgBBgwEhEAzhAgtBACEQIABBADYCACAUQQFqIQEMxgELAkAgASIEIAJHDQBBhAEhEAzgAgsgAiAEayAAKAIAIgFqIRQgBCABa0EEaiEQAkADQCAELQAAIAFBg8+AgABqLQAARw3IASABQQRGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBhAEhEAzgAgsgAEEANgIAIBBBAWohAUEjIRAMxQELAkAgASIEIAJHDQBBhQEhEAzfAgsCQAJAIAQtAABBtH9qDggAyAHIAcgByAHIAcgBAcgBCyAEQQFqIQFB7wAhEAzGAgsgBEEBaiEBQfAAIRAMxQILAkAgASIEIAJHDQBBhgEhEAzeAgsgBC0AAEHFAEcNxQEgBEEBaiEBDIMCCwJAIAEiBCACRw0AQYcBIRAM3QILIAIgBGsgACgCACIBaiEUIAQgAWtBA2ohEAJAA0AgBC0AACABQYjPgIAAai0AAEcNxQEgAUEDRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYcBIRAM3QILIABBADYCACAQQQFqIQFBLSEQDMIBCwJAIAEiBCACRw0AQYgBIRAM3AILIAIgBGsgACgCACIBaiEUIAQgAWtBCGohEAJAA0AgBC0AACABQdDPgIAAai0AAEcNxAEgAUEIRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYgBIRAM3AILIABBADYCACAQQQFqIQFBKSEQDMEBCwJAIAEiASACRw0AQYkBIRAM2wILQQEhECABLQAAQd8ARw3AASABQQFqIQEMgQILAkAgASIEIAJHDQBBigEhEAzaAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQA0AgBC0AACABQYzPgIAAai0AAEcNwQEgAUEBRg2vAiABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGKASEQDNkCCwJAIAEiBCACRw0AQYsBIRAM2QILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQY7PgIAAai0AAEcNwQEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYsBIRAM2QILIABBADYCACAQQQFqIQFBAiEQDL4BCwJAIAEiBCACRw0AQYwBIRAM2AILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfDPgIAAai0AAEcNwAEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYwBIRAM2AILIABBADYCACAQQQFqIQFBHyEQDL0BCwJAIAEiBCACRw0AQY0BIRAM1wILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfLPgIAAai0AAEcNvwEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQY0BIRAM1wILIABBADYCACAQQQFqIQFBCSEQDLwBCwJAIAEiBCACRw0AQY4BIRAM1gILAkACQCAELQAAQbd/ag4HAL8BvwG/Ab8BvwEBvwELIARBAWohAUH4ACEQDL0CCyAEQQFqIQFB+QAhEAy8AgsCQCABIgQgAkcNAEGPASEQDNUCCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUGRz4CAAGotAABHDb0BIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGPASEQDNUCCyAAQQA2AgAgEEEBaiEBQRghEAy6AQsCQCABIgQgAkcNAEGQASEQDNQCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUGXz4CAAGotAABHDbwBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGQASEQDNQCCyAAQQA2AgAgEEEBaiEBQRchEAy5AQsCQCABIgQgAkcNAEGRASEQDNMCCyACIARrIAAoAgAiAWohFCAEIAFrQQZqIRACQANAIAQtAAAgAUGaz4CAAGotAABHDbsBIAFBBkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGRASEQDNMCCyAAQQA2AgAgEEEBaiEBQRUhEAy4AQsCQCABIgQgAkcNAEGSASEQDNICCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUGhz4CAAGotAABHDboBIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGSASEQDNICCyAAQQA2AgAgEEEBaiEBQR4hEAy3AQsCQCABIgQgAkcNAEGTASEQDNECCyAELQAAQcwARw24ASAEQQFqIQFBCiEQDLYBCwJAIAQgAkcNAEGUASEQDNACCwJAAkAgBC0AAEG/f2oODwC5AbkBuQG5AbkBuQG5AbkBuQG5AbkBuQG5AQG5AQsgBEEBaiEBQf4AIRAMtwILIARBAWohAUH/ACEQDLYCCwJAIAQgAkcNAEGVASEQDM8CCwJAAkAgBC0AAEG/f2oOAwC4AQG4AQsgBEEBaiEBQf0AIRAMtgILIARBAWohBEGAASEQDLUCCwJAIAQgAkcNAEGWASEQDM4CCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUGnz4CAAGotAABHDbYBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGWASEQDM4CCyAAQQA2AgAgEEEBaiEBQQshEAyzAQsCQCAEIAJHDQBBlwEhEAzNAgsCQAJAAkACQCAELQAAQVNqDiMAuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AQG4AbgBuAG4AbgBArgBuAG4AQO4AQsgBEEBaiEBQfsAIRAMtgILIARBAWohAUH8ACEQDLUCCyAEQQFqIQRBgQEhEAy0AgsgBEEBaiEEQYIBIRAMswILAkAgBCACRw0AQZgBIRAMzAILIAIgBGsgACgCACIBaiEUIAQgAWtBBGohEAJAA0AgBC0AACABQanPgIAAai0AAEcNtAEgAUEERg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZgBIRAMzAILIABBADYCACAQQQFqIQFBGSEQDLEBCwJAIAQgAkcNAEGZASEQDMsCCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUGuz4CAAGotAABHDbMBIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGZASEQDMsCCyAAQQA2AgAgEEEBaiEBQQYhEAywAQsCQCAEIAJHDQBBmgEhEAzKAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBtM+AgABqLQAARw2yASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBmgEhEAzKAgsgAEEANgIAIBBBAWohAUEcIRAMrwELAkAgBCACRw0AQZsBIRAMyQILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQbbPgIAAai0AAEcNsQEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZsBIRAMyQILIABBADYCACAQQQFqIQFBJyEQDK4BCwJAIAQgAkcNAEGcASEQDMgCCwJAAkAgBC0AAEGsf2oOAgABsQELIARBAWohBEGGASEQDK8CCyAEQQFqIQRBhwEhEAyuAgsCQCAEIAJHDQBBnQEhEAzHAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBuM+AgABqLQAARw2vASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBnQEhEAzHAgsgAEEANgIAIBBBAWohAUEmIRAMrAELAkAgBCACRw0AQZ4BIRAMxgILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQbrPgIAAai0AAEcNrgEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZ4BIRAMxgILIABBADYCACAQQQFqIQFBAyEQDKsBCwJAIAQgAkcNAEGfASEQDMUCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDa0BIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGfASEQDMUCCyAAQQA2AgAgEEEBaiEBQQwhEAyqAQsCQCAEIAJHDQBBoAEhEAzEAgsgAiAEayAAKAIAIgFqIRQgBCABa0EDaiEQAkADQCAELQAAIAFBvM+AgABqLQAARw2sASABQQNGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBoAEhEAzEAgsgAEEANgIAIBBBAWohAUENIRAMqQELAkAgBCACRw0AQaEBIRAMwwILAkACQCAELQAAQbp/ag4LAKwBrAGsAawBrAGsAawBrAGsAQGsAQsgBEEBaiEEQYsBIRAMqgILIARBAWohBEGMASEQDKkCCwJAIAQgAkcNAEGiASEQDMICCyAELQAAQdAARw2pASAEQQFqIQQM6QELAkAgBCACRw0AQaMBIRAMwQILAkACQCAELQAAQbd/ag4HAaoBqgGqAaoBqgEAqgELIARBAWohBEGOASEQDKgCCyAEQQFqIQFBIiEQDKYBCwJAIAQgAkcNAEGkASEQDMACCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUHAz4CAAGotAABHDagBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGkASEQDMACCyAAQQA2AgAgEEEBaiEBQR0hEAylAQsCQCAEIAJHDQBBpQEhEAy/AgsCQAJAIAQtAABBrn9qDgMAqAEBqAELIARBAWohBEGQASEQDKYCCyAEQQFqIQFBBCEQDKQBCwJAIAQgAkcNAEGmASEQDL4CCwJAAkACQAJAAkAgBC0AAEG/f2oOFQCqAaoBqgGqAaoBqgGqAaoBqgGqAQGqAaoBAqoBqgEDqgGqAQSqAQsgBEEBaiEEQYgBIRAMqAILIARBAWohBEGJASEQDKcCCyAEQQFqIQRBigEhEAymAgsgBEEBaiEEQY8BIRAMpQILIARBAWohBEGRASEQDKQCCwJAIAQgAkcNAEGnASEQDL0CCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDaUBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGnASEQDL0CCyAAQQA2AgAgEEEBaiEBQREhEAyiAQsCQCAEIAJHDQBBqAEhEAy8AgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFBws+AgABqLQAARw2kASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBqAEhEAy8AgsgAEEANgIAIBBBAWohAUEsIRAMoQELAkAgBCACRw0AQakBIRAMuwILIAIgBGsgACgCACIBaiEUIAQgAWtBBGohEAJAA0AgBC0AACABQcXPgIAAai0AAEcNowEgAUEERg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQakBIRAMuwILIABBADYCACAQQQFqIQFBKyEQDKABCwJAIAQgAkcNAEGqASEQDLoCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHKz4CAAGotAABHDaIBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGqASEQDLoCCyAAQQA2AgAgEEEBaiEBQRQhEAyfAQsCQCAEIAJHDQBBqwEhEAy5AgsCQAJAAkACQCAELQAAQb5/ag4PAAECpAGkAaQBpAGkAaQBpAGkAaQBpAGkAQOkAQsgBEEBaiEEQZMBIRAMogILIARBAWohBEGUASEQDKECCyAEQQFqIQRBlQEhEAygAgsgBEEBaiEEQZYBIRAMnwILAkAgBCACRw0AQawBIRAMuAILIAQtAABBxQBHDZ8BIARBAWohBAzgAQsCQCAEIAJHDQBBrQEhEAy3AgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFBzc+AgABqLQAARw2fASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBrQEhEAy3AgsgAEEANgIAIBBBAWohAUEOIRAMnAELAkAgBCACRw0AQa4BIRAMtgILIAQtAABB0ABHDZ0BIARBAWohAUElIRAMmwELAkAgBCACRw0AQa8BIRAMtQILIAIgBGsgACgCACIBaiEUIAQgAWtBCGohEAJAA0AgBC0AACABQdDPgIAAai0AAEcNnQEgAUEIRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQa8BIRAMtQILIABBADYCACAQQQFqIQFBKiEQDJoBCwJAIAQgAkcNAEGwASEQDLQCCwJAAkAgBC0AAEGrf2oOCwCdAZ0BnQGdAZ0BnQGdAZ0BnQEBnQELIARBAWohBEGaASEQDJsCCyAEQQFqIQRBmwEhEAyaAgsCQCAEIAJHDQBBsQEhEAyzAgsCQAJAIAQtAABBv39qDhQAnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBAZwBCyAEQQFqIQRBmQEhEAyaAgsgBEEBaiEEQZwBIRAMmQILAkAgBCACRw0AQbIBIRAMsgILIAIgBGsgACgCACIBaiEUIAQgAWtBA2ohEAJAA0AgBC0AACABQdnPgIAAai0AAEcNmgEgAUEDRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbIBIRAMsgILIABBADYCACAQQQFqIQFBISEQDJcBCwJAIAQgAkcNAEGzASEQDLECCyACIARrIAAoAgAiAWohFCAEIAFrQQZqIRACQANAIAQtAAAgAUHdz4CAAGotAABHDZkBIAFBBkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGzASEQDLECCyAAQQA2AgAgEEEBaiEBQRohEAyWAQsCQCAEIAJHDQBBtAEhEAywAgsCQAJAAkAgBC0AAEG7f2oOEQCaAZoBmgGaAZoBmgGaAZoBmgEBmgGaAZoBmgGaAQKaAQsgBEEBaiEEQZ0BIRAMmAILIARBAWohBEGeASEQDJcCCyAEQQFqIQRBnwEhEAyWAgsCQCAEIAJHDQBBtQEhEAyvAgsgAiAEayAAKAIAIgFqIRQgBCABa0EFaiEQAkADQCAELQAAIAFB5M+AgABqLQAARw2XASABQQVGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBtQEhEAyvAgsgAEEANgIAIBBBAWohAUEoIRAMlAELAkAgBCACRw0AQbYBIRAMrgILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQerPgIAAai0AAEcNlgEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbYBIRAMrgILIABBADYCACAQQQFqIQFBByEQDJMBCwJAIAQgAkcNAEG3ASEQDK0CCwJAAkAgBC0AAEG7f2oODgCWAZYBlgGWAZYBlgGWAZYBlgGWAZYBlgEBlgELIARBAWohBEGhASEQDJQCCyAEQQFqIQRBogEhEAyTAgsCQCAEIAJHDQBBuAEhEAysAgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFB7c+AgABqLQAARw2UASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBuAEhEAysAgsgAEEANgIAIBBBAWohAUESIRAMkQELAkAgBCACRw0AQbkBIRAMqwILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfDPgIAAai0AAEcNkwEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbkBIRAMqwILIABBADYCACAQQQFqIQFBICEQDJABCwJAIAQgAkcNAEG6ASEQDKoCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUHyz4CAAGotAABHDZIBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG6ASEQDKoCCyAAQQA2AgAgEEEBaiEBQQ8hEAyPAQsCQCAEIAJHDQBBuwEhEAypAgsCQAJAIAQtAABBt39qDgcAkgGSAZIBkgGSAQGSAQsgBEEBaiEEQaUBIRAMkAILIARBAWohBEGmASEQDI8CCwJAIAQgAkcNAEG8ASEQDKgCCyACIARrIAAoAgAiAWohFCAEIAFrQQdqIRACQANAIAQtAAAgAUH0z4CAAGotAABHDZABIAFBB0YNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG8ASEQDKgCCyAAQQA2AgAgEEEBaiEBQRshEAyNAQsCQCAEIAJHDQBBvQEhEAynAgsCQAJAAkAgBC0AAEG+f2oOEgCRAZEBkQGRAZEBkQGRAZEBkQEBkQGRAZEBkQGRAZEBApEBCyAEQQFqIQRBpAEhEAyPAgsgBEEBaiEEQacBIRAMjgILIARBAWohBEGoASEQDI0CCwJAIAQgAkcNAEG+ASEQDKYCCyAELQAAQc4ARw2NASAEQQFqIQQMzwELAkAgBCACRw0AQb8BIRAMpQILAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBC0AAEG/f2oOFQABAgOcAQQFBpwBnAGcAQcICQoLnAEMDQ4PnAELIARBAWohAUHoACEQDJoCCyAEQQFqIQFB6QAhEAyZAgsgBEEBaiEBQe4AIRAMmAILIARBAWohAUHyACEQDJcCCyAEQQFqIQFB8wAhEAyWAgsgBEEBaiEBQfYAIRAMlQILIARBAWohAUH3ACEQDJQCCyAEQQFqIQFB+gAhEAyTAgsgBEEBaiEEQYMBIRAMkgILIARBAWohBEGEASEQDJECCyAEQQFqIQRBhQEhEAyQAgsgBEEBaiEEQZIBIRAMjwILIARBAWohBEGYASEQDI4CCyAEQQFqIQRBoAEhEAyNAgsgBEEBaiEEQaMBIRAMjAILIARBAWohBEGqASEQDIsCCwJAIAQgAkYNACAAQZCAgIAANgIIIAAgBDYCBEGrASEQDIsCC0HAASEQDKMCCyAAIAUgAhCqgICAACIBDYsBIAUhAQxcCwJAIAYgAkYNACAGQQFqIQUMjQELQcIBIRAMoQILA0ACQCAQLQAAQXZqDgSMAQAAjwEACyAQQQFqIhAgAkcNAAtBwwEhEAygAgsCQCAHIAJGDQAgAEGRgICAADYCCCAAIAc2AgQgByEBQQEhEAyHAgtBxAEhEAyfAgsCQCAHIAJHDQBBxQEhEAyfAgsCQAJAIActAABBdmoOBAHOAc4BAM4BCyAHQQFqIQYMjQELIAdBAWohBQyJAQsCQCAHIAJHDQBBxgEhEAyeAgsCQAJAIActAABBdmoOFwGPAY8BAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAQCPAQsgB0EBaiEHC0GwASEQDIQCCwJAIAggAkcNAEHIASEQDJ0CCyAILQAAQSBHDY0BIABBADsBMiAIQQFqIQFBswEhEAyDAgsgASEXAkADQCAXIgcgAkYNASAHLQAAQVBqQf8BcSIQQQpPDcwBAkAgAC8BMiIUQZkzSw0AIAAgFEEKbCIUOwEyIBBB//8DcyAUQf7/A3FJDQAgB0EBaiEXIAAgFCAQaiIQOwEyIBBB//8DcUHoB0kNAQsLQQAhECAAQQA2AhwgAEHBiYCAADYCECAAQQ02AgwgACAHQQFqNgIUDJwCC0HHASEQDJsCCyAAIAggAhCugICAACIQRQ3KASAQQRVHDYwBIABByAE2AhwgACAINgIUIABByZeAgAA2AhAgAEEVNgIMQQAhEAyaAgsCQCAJIAJHDQBBzAEhEAyaAgtBACEUQQEhF0EBIRZBACEQAkACQAJAAkACQAJAAkACQAJAIAktAABBUGoOCpYBlQEAAQIDBAUGCJcBC0ECIRAMBgtBAyEQDAULQQQhEAwEC0EFIRAMAwtBBiEQDAILQQchEAwBC0EIIRALQQAhF0EAIRZBACEUDI4BC0EJIRBBASEUQQAhF0EAIRYMjQELAkAgCiACRw0AQc4BIRAMmQILIAotAABBLkcNjgEgCkEBaiEJDMoBCyALIAJHDY4BQdABIRAMlwILAkAgCyACRg0AIABBjoCAgAA2AgggACALNgIEQbcBIRAM/gELQdEBIRAMlgILAkAgBCACRw0AQdIBIRAMlgILIAIgBGsgACgCACIQaiEUIAQgEGtBBGohCwNAIAQtAAAgEEH8z4CAAGotAABHDY4BIBBBBEYN6QEgEEEBaiEQIARBAWoiBCACRw0ACyAAIBQ2AgBB0gEhEAyVAgsgACAMIAIQrICAgAAiAQ2NASAMIQEMuAELAkAgBCACRw0AQdQBIRAMlAILIAIgBGsgACgCACIQaiEUIAQgEGtBAWohDANAIAQtAAAgEEGB0ICAAGotAABHDY8BIBBBAUYNjgEgEEEBaiEQIARBAWoiBCACRw0ACyAAIBQ2AgBB1AEhEAyTAgsCQCAEIAJHDQBB1gEhEAyTAgsgAiAEayAAKAIAIhBqIRQgBCAQa0ECaiELA0AgBC0AACAQQYPQgIAAai0AAEcNjgEgEEECRg2QASAQQQFqIRAgBEEBaiIEIAJHDQALIAAgFDYCAEHWASEQDJICCwJAIAQgAkcNAEHXASEQDJICCwJAAkAgBC0AAEG7f2oOEACPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BAY8BCyAEQQFqIQRBuwEhEAz5AQsgBEEBaiEEQbwBIRAM+AELAkAgBCACRw0AQdgBIRAMkQILIAQtAABByABHDYwBIARBAWohBAzEAQsCQCAEIAJGDQAgAEGQgICAADYCCCAAIAQ2AgRBvgEhEAz3AQtB2QEhEAyPAgsCQCAEIAJHDQBB2gEhEAyPAgsgBC0AAEHIAEYNwwEgAEEBOgAoDLkBCyAAQQI6AC8gACAEIAIQpoCAgAAiEA2NAUHCASEQDPQBCyAALQAoQX9qDgK3AbkBuAELA0ACQCAELQAAQXZqDgQAjgGOAQCOAQsgBEEBaiIEIAJHDQALQd0BIRAMiwILIABBADoALyAALQAtQQRxRQ2EAgsgAEEAOgAvIABBAToANCABIQEMjAELIBBBFUYN2gEgAEEANgIcIAAgATYCFCAAQaeOgIAANgIQIABBEjYCDEEAIRAMiAILAkAgACAQIAIQtICAgAAiBA0AIBAhAQyBAgsCQCAEQRVHDQAgAEEDNgIcIAAgEDYCFCAAQbCYgIAANgIQIABBFTYCDEEAIRAMiAILIABBADYCHCAAIBA2AhQgAEGnjoCAADYCECAAQRI2AgxBACEQDIcCCyAQQRVGDdYBIABBADYCHCAAIAE2AhQgAEHajYCAADYCECAAQRQ2AgxBACEQDIYCCyAAKAIEIRcgAEEANgIEIBAgEadqIhYhASAAIBcgECAWIBQbIhAQtYCAgAAiFEUNjQEgAEEHNgIcIAAgEDYCFCAAIBQ2AgxBACEQDIUCCyAAIAAvATBBgAFyOwEwIAEhAQtBKiEQDOoBCyAQQRVGDdEBIABBADYCHCAAIAE2AhQgAEGDjICAADYCECAAQRM2AgxBACEQDIICCyAQQRVGDc8BIABBADYCHCAAIAE2AhQgAEGaj4CAADYCECAAQSI2AgxBACEQDIECCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQt4CAgAAiEA0AIAFBAWohAQyNAQsgAEEMNgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDIACCyAQQRVGDcwBIABBADYCHCAAIAE2AhQgAEGaj4CAADYCECAAQSI2AgxBACEQDP8BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQt4CAgAAiEA0AIAFBAWohAQyMAQsgAEENNgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDP4BCyAQQRVGDckBIABBADYCHCAAIAE2AhQgAEHGjICAADYCECAAQSM2AgxBACEQDP0BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQuYCAgAAiEA0AIAFBAWohAQyLAQsgAEEONgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDPwBCyAAQQA2AhwgACABNgIUIABBwJWAgAA2AhAgAEECNgIMQQAhEAz7AQsgEEEVRg3FASAAQQA2AhwgACABNgIUIABBxoyAgAA2AhAgAEEjNgIMQQAhEAz6AQsgAEEQNgIcIAAgATYCFCAAIBA2AgxBACEQDPkBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQuYCAgAAiBA0AIAFBAWohAQzxAQsgAEERNgIcIAAgBDYCDCAAIAFBAWo2AhRBACEQDPgBCyAQQRVGDcEBIABBADYCHCAAIAE2AhQgAEHGjICAADYCECAAQSM2AgxBACEQDPcBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQuYCAgAAiEA0AIAFBAWohAQyIAQsgAEETNgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDPYBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQuYCAgAAiBA0AIAFBAWohAQztAQsgAEEUNgIcIAAgBDYCDCAAIAFBAWo2AhRBACEQDPUBCyAQQRVGDb0BIABBADYCHCAAIAE2AhQgAEGaj4CAADYCECAAQSI2AgxBACEQDPQBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQt4CAgAAiEA0AIAFBAWohAQyGAQsgAEEWNgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDPMBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQt4CAgAAiBA0AIAFBAWohAQzpAQsgAEEXNgIcIAAgBDYCDCAAIAFBAWo2AhRBACEQDPIBCyAAQQA2AhwgACABNgIUIABBzZOAgAA2AhAgAEEMNgIMQQAhEAzxAQtCASERCyAQQQFqIQECQCAAKQMgIhJC//////////8PVg0AIAAgEkIEhiARhDcDICABIQEMhAELIABBADYCHCAAIAE2AhQgAEGtiYCAADYCECAAQQw2AgxBACEQDO8BCyAAQQA2AhwgACAQNgIUIABBzZOAgAA2AhAgAEEMNgIMQQAhEAzuAQsgACgCBCEXIABBADYCBCAQIBGnaiIWIQEgACAXIBAgFiAUGyIQELWAgIAAIhRFDXMgAEEFNgIcIAAgEDYCFCAAIBQ2AgxBACEQDO0BCyAAQQA2AhwgACAQNgIUIABBqpyAgAA2AhAgAEEPNgIMQQAhEAzsAQsgACAQIAIQtICAgAAiAQ0BIBAhAQtBDiEQDNEBCwJAIAFBFUcNACAAQQI2AhwgACAQNgIUIABBsJiAgAA2AhAgAEEVNgIMQQAhEAzqAQsgAEEANgIcIAAgEDYCFCAAQaeOgIAANgIQIABBEjYCDEEAIRAM6QELIAFBAWohEAJAIAAvATAiAUGAAXFFDQACQCAAIBAgAhC7gICAACIBDQAgECEBDHALIAFBFUcNugEgAEEFNgIcIAAgEDYCFCAAQfmXgIAANgIQIABBFTYCDEEAIRAM6QELAkAgAUGgBHFBoARHDQAgAC0ALUECcQ0AIABBADYCHCAAIBA2AhQgAEGWk4CAADYCECAAQQQ2AgxBACEQDOkBCyAAIBAgAhC9gICAABogECEBAkACQAJAAkACQCAAIBAgAhCzgICAAA4WAgEABAQEBAQEBAQEBAQEBAQEBAQEAwQLIABBAToALgsgACAALwEwQcAAcjsBMCAQIQELQSYhEAzRAQsgAEEjNgIcIAAgEDYCFCAAQaWWgIAANgIQIABBFTYCDEEAIRAM6QELIABBADYCHCAAIBA2AhQgAEHVi4CAADYCECAAQRE2AgxBACEQDOgBCyAALQAtQQFxRQ0BQcMBIRAMzgELAkAgDSACRg0AA0ACQCANLQAAQSBGDQAgDSEBDMQBCyANQQFqIg0gAkcNAAtBJSEQDOcBC0ElIRAM5gELIAAoAgQhBCAAQQA2AgQgACAEIA0Qr4CAgAAiBEUNrQEgAEEmNgIcIAAgBDYCDCAAIA1BAWo2AhRBACEQDOUBCyAQQRVGDasBIABBADYCHCAAIAE2AhQgAEH9jYCAADYCECAAQR02AgxBACEQDOQBCyAAQSc2AhwgACABNgIUIAAgEDYCDEEAIRAM4wELIBAhAUEBIRQCQAJAAkACQAJAAkACQCAALQAsQX5qDgcGBQUDAQIABQsgACAALwEwQQhyOwEwDAMLQQIhFAwBC0EEIRQLIABBAToALCAAIAAvATAgFHI7ATALIBAhAQtBKyEQDMoBCyAAQQA2AhwgACAQNgIUIABBq5KAgAA2AhAgAEELNgIMQQAhEAziAQsgAEEANgIcIAAgATYCFCAAQeGPgIAANgIQIABBCjYCDEEAIRAM4QELIABBADoALCAQIQEMvQELIBAhAUEBIRQCQAJAAkACQAJAIAAtACxBe2oOBAMBAgAFCyAAIAAvATBBCHI7ATAMAwtBAiEUDAELQQQhFAsgAEEBOgAsIAAgAC8BMCAUcjsBMAsgECEBC0EpIRAMxQELIABBADYCHCAAIAE2AhQgAEHwlICAADYCECAAQQM2AgxBACEQDN0BCwJAIA4tAABBDUcNACAAKAIEIQEgAEEANgIEAkAgACABIA4QsYCAgAAiAQ0AIA5BAWohAQx1CyAAQSw2AhwgACABNgIMIAAgDkEBajYCFEEAIRAM3QELIAAtAC1BAXFFDQFBxAEhEAzDAQsCQCAOIAJHDQBBLSEQDNwBCwJAAkADQAJAIA4tAABBdmoOBAIAAAMACyAOQQFqIg4gAkcNAAtBLSEQDN0BCyAAKAIEIQEgAEEANgIEAkAgACABIA4QsYCAgAAiAQ0AIA4hAQx0CyAAQSw2AhwgACAONgIUIAAgATYCDEEAIRAM3AELIAAoAgQhASAAQQA2AgQCQCAAIAEgDhCxgICAACIBDQAgDkEBaiEBDHMLIABBLDYCHCAAIAE2AgwgACAOQQFqNgIUQQAhEAzbAQsgACgCBCEEIABBADYCBCAAIAQgDhCxgICAACIEDaABIA4hAQzOAQsgEEEsRw0BIAFBAWohEEEBIQECQAJAAkACQAJAIAAtACxBe2oOBAMBAgQACyAQIQEMBAtBAiEBDAELQQQhAQsgAEEBOgAsIAAgAC8BMCABcjsBMCAQIQEMAQsgACAALwEwQQhyOwEwIBAhAQtBOSEQDL8BCyAAQQA6ACwgASEBC0E0IRAMvQELIAAgAC8BMEEgcjsBMCABIQEMAgsgACgCBCEEIABBADYCBAJAIAAgBCABELGAgIAAIgQNACABIQEMxwELIABBNzYCHCAAIAE2AhQgACAENgIMQQAhEAzUAQsgAEEIOgAsIAEhAQtBMCEQDLkBCwJAIAAtAChBAUYNACABIQEMBAsgAC0ALUEIcUUNkwEgASEBDAMLIAAtADBBIHENlAFBxQEhEAy3AQsCQCAPIAJGDQACQANAAkAgDy0AAEFQaiIBQf8BcUEKSQ0AIA8hAUE1IRAMugELIAApAyAiEUKZs+bMmbPmzBlWDQEgACARQgp+IhE3AyAgESABrUL/AYMiEkJ/hVYNASAAIBEgEnw3AyAgD0EBaiIPIAJHDQALQTkhEAzRAQsgACgCBCECIABBADYCBCAAIAIgD0EBaiIEELGAgIAAIgINlQEgBCEBDMMBC0E5IRAMzwELAkAgAC8BMCIBQQhxRQ0AIAAtAChBAUcNACAALQAtQQhxRQ2QAQsgACABQff7A3FBgARyOwEwIA8hAQtBNyEQDLQBCyAAIAAvATBBEHI7ATAMqwELIBBBFUYNiwEgAEEANgIcIAAgATYCFCAAQfCOgIAANgIQIABBHDYCDEEAIRAMywELIABBwwA2AhwgACABNgIMIAAgDUEBajYCFEEAIRAMygELAkAgAS0AAEE6Rw0AIAAoAgQhECAAQQA2AgQCQCAAIBAgARCvgICAACIQDQAgAUEBaiEBDGMLIABBwwA2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAMygELIABBADYCHCAAIAE2AhQgAEGxkYCAADYCECAAQQo2AgxBACEQDMkBCyAAQQA2AhwgACABNgIUIABBoJmAgAA2AhAgAEEeNgIMQQAhEAzIAQsgAEEANgIACyAAQYASOwEqIAAgF0EBaiIBIAIQqICAgAAiEA0BIAEhAQtBxwAhEAysAQsgEEEVRw2DASAAQdEANgIcIAAgATYCFCAAQeOXgIAANgIQIABBFTYCDEEAIRAMxAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDF4LIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMwwELIABBADYCHCAAIBQ2AhQgAEHBqICAADYCECAAQQc2AgwgAEEANgIAQQAhEAzCAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMXQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAzBAQtBACEQIABBADYCHCAAIAE2AhQgAEGAkYCAADYCECAAQQk2AgwMwAELIBBBFUYNfSAAQQA2AhwgACABNgIUIABBlI2AgAA2AhAgAEEhNgIMQQAhEAy/AQtBASEWQQAhF0EAIRRBASEQCyAAIBA6ACsgAUEBaiEBAkACQCAALQAtQRBxDQACQAJAAkAgAC0AKg4DAQACBAsgFkUNAwwCCyAUDQEMAgsgF0UNAQsgACgCBCEQIABBADYCBAJAIAAgECABEK2AgIAAIhANACABIQEMXAsgAEHYADYCHCAAIAE2AhQgACAQNgIMQQAhEAy+AQsgACgCBCEEIABBADYCBAJAIAAgBCABEK2AgIAAIgQNACABIQEMrQELIABB2QA2AhwgACABNgIUIAAgBDYCDEEAIRAMvQELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCtgICAACIEDQAgASEBDKsBCyAAQdoANgIcIAAgATYCFCAAIAQ2AgxBACEQDLwBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQrYCAgAAiBA0AIAEhAQypAQsgAEHcADYCHCAAIAE2AhQgACAENgIMQQAhEAy7AQsCQCABLQAAQVBqIhBB/wFxQQpPDQAgACAQOgAqIAFBAWohAUHPACEQDKIBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQrYCAgAAiBA0AIAEhAQynAQsgAEHeADYCHCAAIAE2AhQgACAENgIMQQAhEAy6AQsgAEEANgIAIBdBAWohAQJAIAAtAClBI08NACABIQEMWQsgAEEANgIcIAAgATYCFCAAQdOJgIAANgIQIABBCDYCDEEAIRAMuQELIABBADYCAAtBACEQIABBADYCHCAAIAE2AhQgAEGQs4CAADYCECAAQQg2AgwMtwELIABBADYCACAXQQFqIQECQCAALQApQSFHDQAgASEBDFYLIABBADYCHCAAIAE2AhQgAEGbioCAADYCECAAQQg2AgxBACEQDLYBCyAAQQA2AgAgF0EBaiEBAkAgAC0AKSIQQV1qQQtPDQAgASEBDFULAkAgEEEGSw0AQQEgEHRBygBxRQ0AIAEhAQxVC0EAIRAgAEEANgIcIAAgATYCFCAAQfeJgIAANgIQIABBCDYCDAy1AQsgEEEVRg1xIABBADYCHCAAIAE2AhQgAEG5jYCAADYCECAAQRo2AgxBACEQDLQBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxUCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLMBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdIANgIcIAAgATYCFCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAUNgIUIAAgATYCDEEAIRAMogELIABBADYCHCAAIBQ2AhQgAEHDj4CAADYCECAAQQc2AgxBACEQDKEBCyAAQQA2AhwgACABNgIUIABBw4+AgAA2AhAgAEEHNgIMQQAhEAygAQtBACEQIABBADYCHCAAIBQ2AhQgAEGMnICAADYCECAAQQc2AgwMnwELIABBADYCHCAAIBQ2AhQgAEGMnICAADYCECAAQQc2AgxBACEQDJ4BCyAAQQA2AhwgACAUNgIUIABB/pGAgAA2AhAgAEEHNgIMQQAhEAydAQsgAEEANgIcIAAgATYCFCAAQY6bgIAANgIQIABBBjYCDEEAIRAMnAELIBBBFUYNVyAAQQA2AhwgACABNgIUIABBzI6AgAA2AhAgAEEgNgIMQQAhEAybAQsgAEEANgIAIBBBAWohAUEkIRALIAAgEDoAKSAAKAIEIRAgAEEANgIEIAAgECABEKuAgIAAIhANVCABIQEMPgsgAEEANgIAC0EAIRAgAEEANgIcIAAgBDYCFCAAQfGbgIAANgIQIABBBjYCDAyXAQsgAUEVRg1QIABBADYCHCAAIAU2AhQgAEHwjICAADYCECAAQRs2AgxBACEQDJYBCyAAKAIEIQUgAEEANgIEIAAgBSAQEKmAgIAAIgUNASAQQQFqIQULQa0BIRAMewsgAEHBATYCHCAAIAU2AgwgACAQQQFqNgIUQQAhEAyTAQsgACgCBCEGIABBADYCBCAAIAYgEBCpgICAACIGDQEgEEEBaiEGC0GuASEQDHgLIABBwgE2AhwgACAGNgIMIAAgEEEBajYCFEEAIRAMkAELIABBADYCHCAAIAc2AhQgAEGXi4CAADYCECAAQQ02AgxBACEQDI8BCyAAQQA2AhwgACAINgIUIABB45CAgAA2AhAgAEEJNgIMQQAhEAyOAQsgAEEANgIcIAAgCDYCFCAAQZSNgIAANgIQIABBITYCDEEAIRAMjQELQQEhFkEAIRdBACEUQQEhEAsgACAQOgArIAlBAWohCAJAAkAgAC0ALUEQcQ0AAkACQAJAIAAtACoOAwEAAgQLIBZFDQMMAgsgFA0BDAILIBdFDQELIAAoAgQhECAAQQA2AgQgACAQIAgQrYCAgAAiEEUNPSAAQckBNgIcIAAgCDYCFCAAIBA2AgxBACEQDIwBCyAAKAIEIQQgAEEANgIEIAAgBCAIEK2AgIAAIgRFDXYgAEHKATYCHCAAIAg2AhQgACAENgIMQQAhEAyLAQsgACgCBCEEIABBADYCBCAAIAQgCRCtgICAACIERQ10IABBywE2AhwgACAJNgIUIAAgBDYCDEEAIRAMigELIAAoAgQhBCAAQQA2AgQgACAEIAoQrYCAgAAiBEUNciAAQc0BNgIcIAAgCjYCFCAAIAQ2AgxBACEQDIkBCwJAIAstAABBUGoiEEH/AXFBCk8NACAAIBA6ACogC0EBaiEKQbYBIRAMcAsgACgCBCEEIABBADYCBCAAIAQgCxCtgICAACIERQ1wIABBzwE2AhwgACALNgIUIAAgBDYCDEEAIRAMiAELIABBADYCHCAAIAQ2AhQgAEGQs4CAADYCECAAQQg2AgwgAEEANgIAQQAhEAyHAQsgAUEVRg0/IABBADYCHCAAIAw2AhQgAEHMjoCAADYCECAAQSA2AgxBACEQDIYBCyAAQYEEOwEoIAAoAgQhECAAQgA3AwAgACAQIAxBAWoiDBCrgICAACIQRQ04IABB0wE2AhwgACAMNgIUIAAgEDYCDEEAIRAMhQELIABBADYCAAtBACEQIABBADYCHCAAIAQ2AhQgAEHYm4CAADYCECAAQQg2AgwMgwELIAAoAgQhECAAQgA3AwAgACAQIAtBAWoiCxCrgICAACIQDQFBxgEhEAxpCyAAQQI6ACgMVQsgAEHVATYCHCAAIAs2AhQgACAQNgIMQQAhEAyAAQsgEEEVRg03IABBADYCHCAAIAQ2AhQgAEGkjICAADYCECAAQRA2AgxBACEQDH8LIAAtADRBAUcNNCAAIAQgAhC8gICAACIQRQ00IBBBFUcNNSAAQdwBNgIcIAAgBDYCFCAAQdWWgIAANgIQIABBFTYCDEEAIRAMfgtBACEQIABBADYCHCAAQa+LgIAANgIQIABBAjYCDCAAIBRBAWo2AhQMfQtBACEQDGMLQQIhEAxiC0ENIRAMYQtBDyEQDGALQSUhEAxfC0ETIRAMXgtBFSEQDF0LQRYhEAxcC0EXIRAMWwtBGCEQDFoLQRkhEAxZC0EaIRAMWAtBGyEQDFcLQRwhEAxWC0EdIRAMVQtBHyEQDFQLQSEhEAxTC0EjIRAMUgtBxgAhEAxRC0EuIRAMUAtBLyEQDE8LQTshEAxOC0E9IRAMTQtByAAhEAxMC0HJACEQDEsLQcsAIRAMSgtBzAAhEAxJC0HOACEQDEgLQdEAIRAMRwtB1QAhEAxGC0HYACEQDEULQdkAIRAMRAtB2wAhEAxDC0HkACEQDEILQeUAIRAMQQtB8QAhEAxAC0H0ACEQDD8LQY0BIRAMPgtBlwEhEAw9C0GpASEQDDwLQawBIRAMOwtBwAEhEAw6C0G5ASEQDDkLQa8BIRAMOAtBsQEhEAw3C0GyASEQDDYLQbQBIRAMNQtBtQEhEAw0C0G6ASEQDDMLQb0BIRAMMgtBvwEhEAwxC0HBASEQDDALIABBADYCHCAAIAQ2AhQgAEHpi4CAADYCECAAQR82AgxBACEQDEgLIABB2wE2AhwgACAENgIUIABB+paAgAA2AhAgAEEVNgIMQQAhEAxHCyAAQfgANgIcIAAgDDYCFCAAQcqYgIAANgIQIABBFTYCDEEAIRAMRgsgAEHRADYCHCAAIAU2AhQgAEGwl4CAADYCECAAQRU2AgxBACEQDEULIABB+QA2AhwgACABNgIUIAAgEDYCDEEAIRAMRAsgAEH4ADYCHCAAIAE2AhQgAEHKmICAADYCECAAQRU2AgxBACEQDEMLIABB5AA2AhwgACABNgIUIABB45eAgAA2AhAgAEEVNgIMQQAhEAxCCyAAQdcANgIcIAAgATYCFCAAQcmXgIAANgIQIABBFTYCDEEAIRAMQQsgAEEANgIcIAAgATYCFCAAQbmNgIAANgIQIABBGjYCDEEAIRAMQAsgAEHCADYCHCAAIAE2AhQgAEHjmICAADYCECAAQRU2AgxBACEQDD8LIABBADYCBCAAIA8gDxCxgICAACIERQ0BIABBOjYCHCAAIAQ2AgwgACAPQQFqNgIUQQAhEAw+CyAAKAIEIQQgAEEANgIEAkAgACAEIAEQsYCAgAAiBEUNACAAQTs2AhwgACAENgIMIAAgAUEBajYCFEEAIRAMPgsgAUEBaiEBDC0LIA9BAWohAQwtCyAAQQA2AhwgACAPNgIUIABB5JKAgAA2AhAgAEEENgIMQQAhEAw7CyAAQTY2AhwgACAENgIUIAAgAjYCDEEAIRAMOgsgAEEuNgIcIAAgDjYCFCAAIAQ2AgxBACEQDDkLIABB0AA2AhwgACABNgIUIABBkZiAgAA2AhAgAEEVNgIMQQAhEAw4CyANQQFqIQEMLAsgAEEVNgIcIAAgATYCFCAAQYKZgIAANgIQIABBFTYCDEEAIRAMNgsgAEEbNgIcIAAgATYCFCAAQZGXgIAANgIQIABBFTYCDEEAIRAMNQsgAEEPNgIcIAAgATYCFCAAQZGXgIAANgIQIABBFTYCDEEAIRAMNAsgAEELNgIcIAAgATYCFCAAQZGXgIAANgIQIABBFTYCDEEAIRAMMwsgAEEaNgIcIAAgATYCFCAAQYKZgIAANgIQIABBFTYCDEEAIRAMMgsgAEELNgIcIAAgATYCFCAAQYKZgIAANgIQIABBFTYCDEEAIRAMMQsgAEEKNgIcIAAgATYCFCAAQeSWgIAANgIQIABBFTYCDEEAIRAMMAsgAEEeNgIcIAAgATYCFCAAQfmXgIAANgIQIABBFTYCDEEAIRAMLwsgAEEANgIcIAAgEDYCFCAAQdqNgIAANgIQIABBFDYCDEEAIRAMLgsgAEEENgIcIAAgATYCFCAAQbCYgIAANgIQIABBFTYCDEEAIRAMLQsgAEEANgIAIAtBAWohCwtBuAEhEAwSCyAAQQA2AgAgEEEBaiEBQfUAIRAMEQsgASEBAkAgAC0AKUEFRw0AQeMAIRAMEQtB4gAhEAwQC0EAIRAgAEEANgIcIABB5JGAgAA2AhAgAEEHNgIMIAAgFEEBajYCFAwoCyAAQQA2AgAgF0EBaiEBQcAAIRAMDgtBASEBCyAAIAE6ACwgAEEANgIAIBdBAWohAQtBKCEQDAsLIAEhAQtBOCEQDAkLAkAgASIPIAJGDQADQAJAIA8tAABBgL6AgABqLQAAIgFBAUYNACABQQJHDQMgD0EBaiEBDAQLIA9BAWoiDyACRw0AC0E+IRAMIgtBPiEQDCELIABBADoALCAPIQEMAQtBCyEQDAYLQTohEAwFCyABQQFqIQFBLSEQDAQLIAAgAToALCAAQQA2AgAgFkEBaiEBQQwhEAwDCyAAQQA2AgAgF0EBaiEBQQohEAwCCyAAQQA2AgALIABBADoALCANIQFBCSEQDAALC0EAIRAgAEEANgIcIAAgCzYCFCAAQc2QgIAANgIQIABBCTYCDAwXC0EAIRAgAEEANgIcIAAgCjYCFCAAQemKgIAANgIQIABBCTYCDAwWC0EAIRAgAEEANgIcIAAgCTYCFCAAQbeQgIAANgIQIABBCTYCDAwVC0EAIRAgAEEANgIcIAAgCDYCFCAAQZyRgIAANgIQIABBCTYCDAwUC0EAIRAgAEEANgIcIAAgATYCFCAAQc2QgIAANgIQIABBCTYCDAwTC0EAIRAgAEEANgIcIAAgATYCFCAAQemKgIAANgIQIABBCTYCDAwSC0EAIRAgAEEANgIcIAAgATYCFCAAQbeQgIAANgIQIABBCTYCDAwRC0EAIRAgAEEANgIcIAAgATYCFCAAQZyRgIAANgIQIABBCTYCDAwQC0EAIRAgAEEANgIcIAAgATYCFCAAQZeVgIAANgIQIABBDzYCDAwPC0EAIRAgAEEANgIcIAAgATYCFCAAQZeVgIAANgIQIABBDzYCDAwOC0EAIRAgAEEANgIcIAAgATYCFCAAQcCSgIAANgIQIABBCzYCDAwNC0EAIRAgAEEANgIcIAAgATYCFCAAQZWJgIAANgIQIABBCzYCDAwMC0EAIRAgAEEANgIcIAAgATYCFCAAQeGPgIAANgIQIABBCjYCDAwLC0EAIRAgAEEANgIcIAAgATYCFCAAQfuPgIAANgIQIABBCjYCDAwKC0EAIRAgAEEANgIcIAAgATYCFCAAQfGZgIAANgIQIABBAjYCDAwJC0EAIRAgAEEANgIcIAAgATYCFCAAQcSUgIAANgIQIABBAjYCDAwIC0EAIRAgAEEANgIcIAAgATYCFCAAQfKVgIAANgIQIABBAjYCDAwHCyAAQQI2AhwgACABNgIUIABBnJqAgAA2AhAgAEEWNgIMQQAhEAwGC0EBIRAMBQtB1AAhECABIgQgAkYNBCADQQhqIAAgBCACQdjCgIAAQQoQxYCAgAAgAygCDCEEIAMoAggOAwEEAgALEMqAgIAAAAsgAEEANgIcIABBtZqAgAA2AhAgAEEXNgIMIAAgBEEBajYCFEEAIRAMAgsgAEEANgIcIAAgBDYCFCAAQcqagIAANgIQIABBCTYCDEEAIRAMAQsCQCABIgQgAkcNAEEiIRAMAQsgAEGJgICAADYCCCAAIAQ2AgRBISEQCyADQRBqJICAgIAAIBALrwEBAn8gASgCACEGAkACQCACIANGDQAgBCAGaiEEIAYgA2ogAmshByACIAZBf3MgBWoiBmohBQNAAkAgAi0AACAELQAARg0AQQIhBAwDCwJAIAYNAEEAIQQgBSECDAMLIAZBf2ohBiAEQQFqIQQgAkEBaiICIANHDQALIAchBiADIQILIABBATYCACABIAY2AgAgACACNgIEDwsgAUEANgIAIAAgBDYCACAAIAI2AgQLCgAgABDHgICAAAvyNgELfyOAgICAAEEQayIBJICAgIAAAkBBACgCoNCAgAANAEEAEMuAgIAAQYDUhIAAayICQdkASQ0AQQAhAwJAQQAoAuDTgIAAIgQNAEEAQn83AuzTgIAAQQBCgICEgICAwAA3AuTTgIAAQQAgAUEIakFwcUHYqtWqBXMiBDYC4NOAgABBAEEANgL004CAAEEAQQA2AsTTgIAAC0EAIAI2AszTgIAAQQBBgNSEgAA2AsjTgIAAQQBBgNSEgAA2ApjQgIAAQQAgBDYCrNCAgABBAEF/NgKo0ICAAANAIANBxNCAgABqIANBuNCAgABqIgQ2AgAgBCADQbDQgIAAaiIFNgIAIANBvNCAgABqIAU2AgAgA0HM0ICAAGogA0HA0ICAAGoiBTYCACAFIAQ2AgAgA0HU0ICAAGogA0HI0ICAAGoiBDYCACAEIAU2AgAgA0HQ0ICAAGogBDYCACADQSBqIgNBgAJHDQALQYDUhIAAQXhBgNSEgABrQQ9xQQBBgNSEgABBCGpBD3EbIgNqIgRBBGogAkFIaiIFIANrIgNBAXI2AgBBAEEAKALw04CAADYCpNCAgABBACADNgKU0ICAAEEAIAQ2AqDQgIAAQYDUhIAAIAVqQTg2AgQLAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB7AFLDQACQEEAKAKI0ICAACIGQRAgAEETakFwcSAAQQtJGyICQQN2IgR2IgNBA3FFDQACQAJAIANBAXEgBHJBAXMiBUEDdCIEQbDQgIAAaiIDIARBuNCAgABqKAIAIgQoAggiAkcNAEEAIAZBfiAFd3E2AojQgIAADAELIAMgAjYCCCACIAM2AgwLIARBCGohAyAEIAVBA3QiBUEDcjYCBCAEIAVqIgQgBCgCBEEBcjYCBAwMCyACQQAoApDQgIAAIgdNDQECQCADRQ0AAkACQCADIAR0QQIgBHQiA0EAIANrcnEiA0EAIANrcUF/aiIDIANBDHZBEHEiA3YiBEEFdkEIcSIFIANyIAQgBXYiA0ECdkEEcSIEciADIAR2IgNBAXZBAnEiBHIgAyAEdiIDQQF2QQFxIgRyIAMgBHZqIgRBA3QiA0Gw0ICAAGoiBSADQbjQgIAAaigCACIDKAIIIgBHDQBBACAGQX4gBHdxIgY2AojQgIAADAELIAUgADYCCCAAIAU2AgwLIAMgAkEDcjYCBCADIARBA3QiBGogBCACayIFNgIAIAMgAmoiACAFQQFyNgIEAkAgB0UNACAHQXhxQbDQgIAAaiECQQAoApzQgIAAIQQCQAJAIAZBASAHQQN2dCIIcQ0AQQAgBiAIcjYCiNCAgAAgAiEIDAELIAIoAgghCAsgCCAENgIMIAIgBDYCCCAEIAI2AgwgBCAINgIICyADQQhqIQNBACAANgKc0ICAAEEAIAU2ApDQgIAADAwLQQAoAozQgIAAIglFDQEgCUEAIAlrcUF/aiIDIANBDHZBEHEiA3YiBEEFdkEIcSIFIANyIAQgBXYiA0ECdkEEcSIEciADIAR2IgNBAXZBAnEiBHIgAyAEdiIDQQF2QQFxIgRyIAMgBHZqQQJ0QbjSgIAAaigCACIAKAIEQXhxIAJrIQQgACEFAkADQAJAIAUoAhAiAw0AIAVBFGooAgAiA0UNAgsgAygCBEF4cSACayIFIAQgBSAESSIFGyEEIAMgACAFGyEAIAMhBQwACwsgACgCGCEKAkAgACgCDCIIIABGDQAgACgCCCIDQQAoApjQgIAASRogCCADNgIIIAMgCDYCDAwLCwJAIABBFGoiBSgCACIDDQAgACgCECIDRQ0DIABBEGohBQsDQCAFIQsgAyIIQRRqIgUoAgAiAw0AIAhBEGohBSAIKAIQIgMNAAsgC0EANgIADAoLQX8hAiAAQb9/Sw0AIABBE2oiA0FwcSECQQAoAozQgIAAIgdFDQBBACELAkAgAkGAAkkNAEEfIQsgAkH///8HSw0AIANBCHYiAyADQYD+P2pBEHZBCHEiA3QiBCAEQYDgH2pBEHZBBHEiBHQiBSAFQYCAD2pBEHZBAnEiBXRBD3YgAyAEciAFcmsiA0EBdCACIANBFWp2QQFxckEcaiELC0EAIAJrIQQCQAJAAkACQCALQQJ0QbjSgIAAaigCACIFDQBBACEDQQAhCAwBC0EAIQMgAkEAQRkgC0EBdmsgC0EfRht0IQBBACEIA0ACQCAFKAIEQXhxIAJrIgYgBE8NACAGIQQgBSEIIAYNAEEAIQQgBSEIIAUhAwwDCyADIAVBFGooAgAiBiAGIAUgAEEddkEEcWpBEGooAgAiBUYbIAMgBhshAyAAQQF0IQAgBQ0ACwsCQCADIAhyDQBBACEIQQIgC3QiA0EAIANrciAHcSIDRQ0DIANBACADa3FBf2oiAyADQQx2QRBxIgN2IgVBBXZBCHEiACADciAFIAB2IgNBAnZBBHEiBXIgAyAFdiIDQQF2QQJxIgVyIAMgBXYiA0EBdkEBcSIFciADIAV2akECdEG40oCAAGooAgAhAwsgA0UNAQsDQCADKAIEQXhxIAJrIgYgBEkhAAJAIAMoAhAiBQ0AIANBFGooAgAhBQsgBiAEIAAbIQQgAyAIIAAbIQggBSEDIAUNAAsLIAhFDQAgBEEAKAKQ0ICAACACa08NACAIKAIYIQsCQCAIKAIMIgAgCEYNACAIKAIIIgNBACgCmNCAgABJGiAAIAM2AgggAyAANgIMDAkLAkAgCEEUaiIFKAIAIgMNACAIKAIQIgNFDQMgCEEQaiEFCwNAIAUhBiADIgBBFGoiBSgCACIDDQAgAEEQaiEFIAAoAhAiAw0ACyAGQQA2AgAMCAsCQEEAKAKQ0ICAACIDIAJJDQBBACgCnNCAgAAhBAJAAkAgAyACayIFQRBJDQAgBCACaiIAIAVBAXI2AgRBACAFNgKQ0ICAAEEAIAA2ApzQgIAAIAQgA2ogBTYCACAEIAJBA3I2AgQMAQsgBCADQQNyNgIEIAQgA2oiAyADKAIEQQFyNgIEQQBBADYCnNCAgABBAEEANgKQ0ICAAAsgBEEIaiEDDAoLAkBBACgClNCAgAAiACACTQ0AQQAoAqDQgIAAIgMgAmoiBCAAIAJrIgVBAXI2AgRBACAFNgKU0ICAAEEAIAQ2AqDQgIAAIAMgAkEDcjYCBCADQQhqIQMMCgsCQAJAQQAoAuDTgIAARQ0AQQAoAujTgIAAIQQMAQtBAEJ/NwLs04CAAEEAQoCAhICAgMAANwLk04CAAEEAIAFBDGpBcHFB2KrVqgVzNgLg04CAAEEAQQA2AvTTgIAAQQBBADYCxNOAgABBgIAEIQQLQQAhAwJAIAQgAkHHAGoiB2oiBkEAIARrIgtxIgggAksNAEEAQTA2AvjTgIAADAoLAkBBACgCwNOAgAAiA0UNAAJAQQAoArjTgIAAIgQgCGoiBSAETQ0AIAUgA00NAQtBACEDQQBBMDYC+NOAgAAMCgtBAC0AxNOAgABBBHENBAJAAkACQEEAKAKg0ICAACIERQ0AQcjTgIAAIQMDQAJAIAMoAgAiBSAESw0AIAUgAygCBGogBEsNAwsgAygCCCIDDQALC0EAEMuAgIAAIgBBf0YNBSAIIQYCQEEAKALk04CAACIDQX9qIgQgAHFFDQAgCCAAayAEIABqQQAgA2txaiEGCyAGIAJNDQUgBkH+////B0sNBQJAQQAoAsDTgIAAIgNFDQBBACgCuNOAgAAiBCAGaiIFIARNDQYgBSADSw0GCyAGEMuAgIAAIgMgAEcNAQwHCyAGIABrIAtxIgZB/v///wdLDQQgBhDLgICAACIAIAMoAgAgAygCBGpGDQMgACEDCwJAIANBf0YNACACQcgAaiAGTQ0AAkAgByAGa0EAKALo04CAACIEakEAIARrcSIEQf7///8HTQ0AIAMhAAwHCwJAIAQQy4CAgABBf0YNACAEIAZqIQYgAyEADAcLQQAgBmsQy4CAgAAaDAQLIAMhACADQX9HDQUMAwtBACEIDAcLQQAhAAwFCyAAQX9HDQILQQBBACgCxNOAgABBBHI2AsTTgIAACyAIQf7///8HSw0BIAgQy4CAgAAhAEEAEMuAgIAAIQMgAEF/Rg0BIANBf0YNASAAIANPDQEgAyAAayIGIAJBOGpNDQELQQBBACgCuNOAgAAgBmoiAzYCuNOAgAACQCADQQAoArzTgIAATQ0AQQAgAzYCvNOAgAALAkACQAJAAkBBACgCoNCAgAAiBEUNAEHI04CAACEDA0AgACADKAIAIgUgAygCBCIIakYNAiADKAIIIgMNAAwDCwsCQAJAQQAoApjQgIAAIgNFDQAgACADTw0BC0EAIAA2ApjQgIAAC0EAIQNBACAGNgLM04CAAEEAIAA2AsjTgIAAQQBBfzYCqNCAgABBAEEAKALg04CAADYCrNCAgABBAEEANgLU04CAAANAIANBxNCAgABqIANBuNCAgABqIgQ2AgAgBCADQbDQgIAAaiIFNgIAIANBvNCAgABqIAU2AgAgA0HM0ICAAGogA0HA0ICAAGoiBTYCACAFIAQ2AgAgA0HU0ICAAGogA0HI0ICAAGoiBDYCACAEIAU2AgAgA0HQ0ICAAGogBDYCACADQSBqIgNBgAJHDQALIABBeCAAa0EPcUEAIABBCGpBD3EbIgNqIgQgBkFIaiIFIANrIgNBAXI2AgRBAEEAKALw04CAADYCpNCAgABBACADNgKU0ICAAEEAIAQ2AqDQgIAAIAAgBWpBODYCBAwCCyADLQAMQQhxDQAgBCAFSQ0AIAQgAE8NACAEQXggBGtBD3FBACAEQQhqQQ9xGyIFaiIAQQAoApTQgIAAIAZqIgsgBWsiBUEBcjYCBCADIAggBmo2AgRBAEEAKALw04CAADYCpNCAgABBACAFNgKU0ICAAEEAIAA2AqDQgIAAIAQgC2pBODYCBAwBCwJAIABBACgCmNCAgAAiCE8NAEEAIAA2ApjQgIAAIAAhCAsgACAGaiEFQcjTgIAAIQMCQAJAAkACQAJAAkACQANAIAMoAgAgBUYNASADKAIIIgMNAAwCCwsgAy0ADEEIcUUNAQtByNOAgAAhAwNAAkAgAygCACIFIARLDQAgBSADKAIEaiIFIARLDQMLIAMoAgghAwwACwsgAyAANgIAIAMgAygCBCAGajYCBCAAQXggAGtBD3FBACAAQQhqQQ9xG2oiCyACQQNyNgIEIAVBeCAFa0EPcUEAIAVBCGpBD3EbaiIGIAsgAmoiAmshAwJAIAYgBEcNAEEAIAI2AqDQgIAAQQBBACgClNCAgAAgA2oiAzYClNCAgAAgAiADQQFyNgIEDAMLAkAgBkEAKAKc0ICAAEcNAEEAIAI2ApzQgIAAQQBBACgCkNCAgAAgA2oiAzYCkNCAgAAgAiADQQFyNgIEIAIgA2ogAzYCAAwDCwJAIAYoAgQiBEEDcUEBRw0AIARBeHEhBwJAAkAgBEH/AUsNACAGKAIIIgUgBEEDdiIIQQN0QbDQgIAAaiIARhoCQCAGKAIMIgQgBUcNAEEAQQAoAojQgIAAQX4gCHdxNgKI0ICAAAwCCyAEIABGGiAEIAU2AgggBSAENgIMDAELIAYoAhghCQJAAkAgBigCDCIAIAZGDQAgBigCCCIEIAhJGiAAIAQ2AgggBCAANgIMDAELAkAgBkEUaiIEKAIAIgUNACAGQRBqIgQoAgAiBQ0AQQAhAAwBCwNAIAQhCCAFIgBBFGoiBCgCACIFDQAgAEEQaiEEIAAoAhAiBQ0ACyAIQQA2AgALIAlFDQACQAJAIAYgBigCHCIFQQJ0QbjSgIAAaiIEKAIARw0AIAQgADYCACAADQFBAEEAKAKM0ICAAEF+IAV3cTYCjNCAgAAMAgsgCUEQQRQgCSgCECAGRhtqIAA2AgAgAEUNAQsgACAJNgIYAkAgBigCECIERQ0AIAAgBDYCECAEIAA2AhgLIAYoAhQiBEUNACAAQRRqIAQ2AgAgBCAANgIYCyAHIANqIQMgBiAHaiIGKAIEIQQLIAYgBEF+cTYCBCACIANqIAM2AgAgAiADQQFyNgIEAkAgA0H/AUsNACADQXhxQbDQgIAAaiEEAkACQEEAKAKI0ICAACIFQQEgA0EDdnQiA3ENAEEAIAUgA3I2AojQgIAAIAQhAwwBCyAEKAIIIQMLIAMgAjYCDCAEIAI2AgggAiAENgIMIAIgAzYCCAwDC0EfIQQCQCADQf///wdLDQAgA0EIdiIEIARBgP4/akEQdkEIcSIEdCIFIAVBgOAfakEQdkEEcSIFdCIAIABBgIAPakEQdkECcSIAdEEPdiAEIAVyIAByayIEQQF0IAMgBEEVanZBAXFyQRxqIQQLIAIgBDYCHCACQgA3AhAgBEECdEG40oCAAGohBQJAQQAoAozQgIAAIgBBASAEdCIIcQ0AIAUgAjYCAEEAIAAgCHI2AozQgIAAIAIgBTYCGCACIAI2AgggAiACNgIMDAMLIANBAEEZIARBAXZrIARBH0YbdCEEIAUoAgAhAANAIAAiBSgCBEF4cSADRg0CIARBHXYhACAEQQF0IQQgBSAAQQRxakEQaiIIKAIAIgANAAsgCCACNgIAIAIgBTYCGCACIAI2AgwgAiACNgIIDAILIABBeCAAa0EPcUEAIABBCGpBD3EbIgNqIgsgBkFIaiIIIANrIgNBAXI2AgQgACAIakE4NgIEIAQgBUE3IAVrQQ9xQQAgBUFJakEPcRtqQUFqIgggCCAEQRBqSRsiCEEjNgIEQQBBACgC8NOAgAA2AqTQgIAAQQAgAzYClNCAgABBACALNgKg0ICAACAIQRBqQQApAtDTgIAANwIAIAhBACkCyNOAgAA3AghBACAIQQhqNgLQ04CAAEEAIAY2AszTgIAAQQAgADYCyNOAgABBAEEANgLU04CAACAIQSRqIQMDQCADQQc2AgAgA0EEaiIDIAVJDQALIAggBEYNAyAIIAgoAgRBfnE2AgQgCCAIIARrIgA2AgAgBCAAQQFyNgIEAkAgAEH/AUsNACAAQXhxQbDQgIAAaiEDAkACQEEAKAKI0ICAACIFQQEgAEEDdnQiAHENAEEAIAUgAHI2AojQgIAAIAMhBQwBCyADKAIIIQULIAUgBDYCDCADIAQ2AgggBCADNgIMIAQgBTYCCAwEC0EfIQMCQCAAQf///wdLDQAgAEEIdiIDIANBgP4/akEQdkEIcSIDdCIFIAVBgOAfakEQdkEEcSIFdCIIIAhBgIAPakEQdkECcSIIdEEPdiADIAVyIAhyayIDQQF0IAAgA0EVanZBAXFyQRxqIQMLIAQgAzYCHCAEQgA3AhAgA0ECdEG40oCAAGohBQJAQQAoAozQgIAAIghBASADdCIGcQ0AIAUgBDYCAEEAIAggBnI2AozQgIAAIAQgBTYCGCAEIAQ2AgggBCAENgIMDAQLIABBAEEZIANBAXZrIANBH0YbdCEDIAUoAgAhCANAIAgiBSgCBEF4cSAARg0DIANBHXYhCCADQQF0IQMgBSAIQQRxakEQaiIGKAIAIggNAAsgBiAENgIAIAQgBTYCGCAEIAQ2AgwgBCAENgIIDAMLIAUoAggiAyACNgIMIAUgAjYCCCACQQA2AhggAiAFNgIMIAIgAzYCCAsgC0EIaiEDDAULIAUoAggiAyAENgIMIAUgBDYCCCAEQQA2AhggBCAFNgIMIAQgAzYCCAtBACgClNCAgAAiAyACTQ0AQQAoAqDQgIAAIgQgAmoiBSADIAJrIgNBAXI2AgRBACADNgKU0ICAAEEAIAU2AqDQgIAAIAQgAkEDcjYCBCAEQQhqIQMMAwtBACEDQQBBMDYC+NOAgAAMAgsCQCALRQ0AAkACQCAIIAgoAhwiBUECdEG40oCAAGoiAygCAEcNACADIAA2AgAgAA0BQQAgB0F+IAV3cSIHNgKM0ICAAAwCCyALQRBBFCALKAIQIAhGG2ogADYCACAARQ0BCyAAIAs2AhgCQCAIKAIQIgNFDQAgACADNgIQIAMgADYCGAsgCEEUaigCACIDRQ0AIABBFGogAzYCACADIAA2AhgLAkACQCAEQQ9LDQAgCCAEIAJqIgNBA3I2AgQgCCADaiIDIAMoAgRBAXI2AgQMAQsgCCACaiIAIARBAXI2AgQgCCACQQNyNgIEIAAgBGogBDYCAAJAIARB/wFLDQAgBEF4cUGw0ICAAGohAwJAAkBBACgCiNCAgAAiBUEBIARBA3Z0IgRxDQBBACAFIARyNgKI0ICAACADIQQMAQsgAygCCCEECyAEIAA2AgwgAyAANgIIIAAgAzYCDCAAIAQ2AggMAQtBHyEDAkAgBEH///8HSw0AIARBCHYiAyADQYD+P2pBEHZBCHEiA3QiBSAFQYDgH2pBEHZBBHEiBXQiAiACQYCAD2pBEHZBAnEiAnRBD3YgAyAFciACcmsiA0EBdCAEIANBFWp2QQFxckEcaiEDCyAAIAM2AhwgAEIANwIQIANBAnRBuNKAgABqIQUCQCAHQQEgA3QiAnENACAFIAA2AgBBACAHIAJyNgKM0ICAACAAIAU2AhggACAANgIIIAAgADYCDAwBCyAEQQBBGSADQQF2ayADQR9GG3QhAyAFKAIAIQICQANAIAIiBSgCBEF4cSAERg0BIANBHXYhAiADQQF0IQMgBSACQQRxakEQaiIGKAIAIgINAAsgBiAANgIAIAAgBTYCGCAAIAA2AgwgACAANgIIDAELIAUoAggiAyAANgIMIAUgADYCCCAAQQA2AhggACAFNgIMIAAgAzYCCAsgCEEIaiEDDAELAkAgCkUNAAJAAkAgACAAKAIcIgVBAnRBuNKAgABqIgMoAgBHDQAgAyAINgIAIAgNAUEAIAlBfiAFd3E2AozQgIAADAILIApBEEEUIAooAhAgAEYbaiAINgIAIAhFDQELIAggCjYCGAJAIAAoAhAiA0UNACAIIAM2AhAgAyAINgIYCyAAQRRqKAIAIgNFDQAgCEEUaiADNgIAIAMgCDYCGAsCQAJAIARBD0sNACAAIAQgAmoiA0EDcjYCBCAAIANqIgMgAygCBEEBcjYCBAwBCyAAIAJqIgUgBEEBcjYCBCAAIAJBA3I2AgQgBSAEaiAENgIAAkAgB0UNACAHQXhxQbDQgIAAaiECQQAoApzQgIAAIQMCQAJAQQEgB0EDdnQiCCAGcQ0AQQAgCCAGcjYCiNCAgAAgAiEIDAELIAIoAgghCAsgCCADNgIMIAIgAzYCCCADIAI2AgwgAyAINgIIC0EAIAU2ApzQgIAAQQAgBDYCkNCAgAALIABBCGohAwsgAUEQaiSAgICAACADCwoAIAAQyYCAgAAL4g0BB38CQCAARQ0AIABBeGoiASAAQXxqKAIAIgJBeHEiAGohAwJAIAJBAXENACACQQNxRQ0BIAEgASgCACICayIBQQAoApjQgIAAIgRJDQEgAiAAaiEAAkAgAUEAKAKc0ICAAEYNAAJAIAJB/wFLDQAgASgCCCIEIAJBA3YiBUEDdEGw0ICAAGoiBkYaAkAgASgCDCICIARHDQBBAEEAKAKI0ICAAEF+IAV3cTYCiNCAgAAMAwsgAiAGRhogAiAENgIIIAQgAjYCDAwCCyABKAIYIQcCQAJAIAEoAgwiBiABRg0AIAEoAggiAiAESRogBiACNgIIIAIgBjYCDAwBCwJAIAFBFGoiAigCACIEDQAgAUEQaiICKAIAIgQNAEEAIQYMAQsDQCACIQUgBCIGQRRqIgIoAgAiBA0AIAZBEGohAiAGKAIQIgQNAAsgBUEANgIACyAHRQ0BAkACQCABIAEoAhwiBEECdEG40oCAAGoiAigCAEcNACACIAY2AgAgBg0BQQBBACgCjNCAgABBfiAEd3E2AozQgIAADAMLIAdBEEEUIAcoAhAgAUYbaiAGNgIAIAZFDQILIAYgBzYCGAJAIAEoAhAiAkUNACAGIAI2AhAgAiAGNgIYCyABKAIUIgJFDQEgBkEUaiACNgIAIAIgBjYCGAwBCyADKAIEIgJBA3FBA0cNACADIAJBfnE2AgRBACAANgKQ0ICAACABIABqIAA2AgAgASAAQQFyNgIEDwsgASADTw0AIAMoAgQiAkEBcUUNAAJAAkAgAkECcQ0AAkAgA0EAKAKg0ICAAEcNAEEAIAE2AqDQgIAAQQBBACgClNCAgAAgAGoiADYClNCAgAAgASAAQQFyNgIEIAFBACgCnNCAgABHDQNBAEEANgKQ0ICAAEEAQQA2ApzQgIAADwsCQCADQQAoApzQgIAARw0AQQAgATYCnNCAgABBAEEAKAKQ0ICAACAAaiIANgKQ0ICAACABIABBAXI2AgQgASAAaiAANgIADwsgAkF4cSAAaiEAAkACQCACQf8BSw0AIAMoAggiBCACQQN2IgVBA3RBsNCAgABqIgZGGgJAIAMoAgwiAiAERw0AQQBBACgCiNCAgABBfiAFd3E2AojQgIAADAILIAIgBkYaIAIgBDYCCCAEIAI2AgwMAQsgAygCGCEHAkACQCADKAIMIgYgA0YNACADKAIIIgJBACgCmNCAgABJGiAGIAI2AgggAiAGNgIMDAELAkAgA0EUaiICKAIAIgQNACADQRBqIgIoAgAiBA0AQQAhBgwBCwNAIAIhBSAEIgZBFGoiAigCACIEDQAgBkEQaiECIAYoAhAiBA0ACyAFQQA2AgALIAdFDQACQAJAIAMgAygCHCIEQQJ0QbjSgIAAaiICKAIARw0AIAIgBjYCACAGDQFBAEEAKAKM0ICAAEF+IAR3cTYCjNCAgAAMAgsgB0EQQRQgBygCECADRhtqIAY2AgAgBkUNAQsgBiAHNgIYAkAgAygCECICRQ0AIAYgAjYCECACIAY2AhgLIAMoAhQiAkUNACAGQRRqIAI2AgAgAiAGNgIYCyABIABqIAA2AgAgASAAQQFyNgIEIAFBACgCnNCAgABHDQFBACAANgKQ0ICAAA8LIAMgAkF+cTYCBCABIABqIAA2AgAgASAAQQFyNgIECwJAIABB/wFLDQAgAEF4cUGw0ICAAGohAgJAAkBBACgCiNCAgAAiBEEBIABBA3Z0IgBxDQBBACAEIAByNgKI0ICAACACIQAMAQsgAigCCCEACyAAIAE2AgwgAiABNgIIIAEgAjYCDCABIAA2AggPC0EfIQICQCAAQf///wdLDQAgAEEIdiICIAJBgP4/akEQdkEIcSICdCIEIARBgOAfakEQdkEEcSIEdCIGIAZBgIAPakEQdkECcSIGdEEPdiACIARyIAZyayICQQF0IAAgAkEVanZBAXFyQRxqIQILIAEgAjYCHCABQgA3AhAgAkECdEG40oCAAGohBAJAAkBBACgCjNCAgAAiBkEBIAJ0IgNxDQAgBCABNgIAQQAgBiADcjYCjNCAgAAgASAENgIYIAEgATYCCCABIAE2AgwMAQsgAEEAQRkgAkEBdmsgAkEfRht0IQIgBCgCACEGAkADQCAGIgQoAgRBeHEgAEYNASACQR12IQYgAkEBdCECIAQgBkEEcWpBEGoiAygCACIGDQALIAMgATYCACABIAQ2AhggASABNgIMIAEgATYCCAwBCyAEKAIIIgAgATYCDCAEIAE2AgggAUEANgIYIAEgBDYCDCABIAA2AggLQQBBACgCqNCAgABBf2oiAUF/IAEbNgKo0ICAAAsLBAAAAAtOAAJAIAANAD8AQRB0DwsCQCAAQf//A3ENACAAQX9MDQACQCAAQRB2QAAiAEF/Rw0AQQBBMDYC+NOAgABBfw8LIABBEHQPCxDKgICAAAAL8gICA38BfgJAIAJFDQAgACABOgAAIAIgAGoiA0F/aiABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBfWogAToAACADQX5qIAE6AAAgAkEHSQ0AIAAgAToAAyADQXxqIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIFayICQSBJDQAgAa1CgYCAgBB+IQYgAyAFaiEBA0AgASAGNwMYIAEgBjcDECABIAY3AwggASAGNwMAIAFBIGohASACQWBqIgJBH0sNAAsLIAALC45IAQBBgAgLhkgBAAAAAgAAAAMAAAAAAAAAAAAAAAQAAAAFAAAAAAAAAAAAAAAGAAAABwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEludmFsaWQgY2hhciBpbiB1cmwgcXVlcnkAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9ib2R5AENvbnRlbnQtTGVuZ3RoIG92ZXJmbG93AENodW5rIHNpemUgb3ZlcmZsb3cAUmVzcG9uc2Ugb3ZlcmZsb3cASW52YWxpZCBtZXRob2QgZm9yIEhUVFAveC54IHJlcXVlc3QASW52YWxpZCBtZXRob2QgZm9yIFJUU1AveC54IHJlcXVlc3QARXhwZWN0ZWQgU09VUkNFIG1ldGhvZCBmb3IgSUNFL3gueCByZXF1ZXN0AEludmFsaWQgY2hhciBpbiB1cmwgZnJhZ21lbnQgc3RhcnQARXhwZWN0ZWQgZG90AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fc3RhdHVzAEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8=' + + +/***/ }), + +/***/ 3434: +/***/ ((module) => { + +module.exports = 'AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJsbGh0dHBfc3RhdHVzX25hbWUAIRpsbGh0dHBfc2V0X2xlbmllbnRfaGVhZGVycwAiIWxsaHR0cF9zZXRfbGVuaWVudF9jaHVua2VkX2xlbmd0aAAjHWxsaHR0cF9zZXRfbGVuaWVudF9rZWVwX2FsaXZlACQkbGxodHRwX3NldF9sZW5pZW50X3RyYW5zZmVyX2VuY29kaW5nACUYbGxodHRwX21lc3NhZ2VfbmVlZHNfZW9mAD8JFwEAQQELEQECAwQFCwYHNTk3MS8tJyspCrLgAkUCAAsIABCIgICAAAsZACAAEMKAgIAAGiAAIAI2AjggACABOgAoCxwAIAAgAC8BMiAALQAuIAAQwYCAgAAQgICAgAALKgEBf0HAABDGgICAACIBEMKAgIAAGiABQYCIgIAANgI4IAEgADoAKCABCwoAIAAQyICAgAALBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LRQEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABDCgICAABogACAENgI4IAAgAzoAKCAAIAI6AC0gACABNgIYCxEAIAAgASABIAJqEMOAgIAACxAAIABBAEHcABDMgICAABoLZwEBf0EAIQECQCAAKAIMDQACQAJAAkACQCAALQAvDgMBAAMCCyAAKAI4IgFFDQAgASgCLCIBRQ0AIAAgARGAgICAAAAiAQ0DC0EADwsQyoCAgAAACyAAQcOWgIAANgIQQQ4hAQsgAQseAAJAIAAoAgwNACAAQdGbgIAANgIQIABBFTYCDAsLFgACQCAAKAIMQRVHDQAgAEEANgIMCwsWAAJAIAAoAgxBFkcNACAAQQA2AgwLCwcAIAAoAgwLBwAgACgCEAsJACAAIAE2AhALBwAgACgCFAsiAAJAIABBJEkNABDKgICAAAALIABBAnRBoLOAgABqKAIACyIAAkAgAEEuSQ0AEMqAgIAAAAsgAEECdEGwtICAAGooAgAL7gsBAX9B66iAgAAhAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABBnH9qDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0Hhp4CAAA8LQaShgIAADwtBy6yAgAAPC0H+sYCAAA8LQcCkgIAADwtBq6SAgAAPC0GNqICAAA8LQeKmgIAADwtBgLCAgAAPC0G5r4CAAA8LQdekgIAADwtB75+AgAAPC0Hhn4CAAA8LQfqfgIAADwtB8qCAgAAPC0Gor4CAAA8LQa6ygIAADwtBiLCAgAAPC0Hsp4CAAA8LQYKigIAADwtBjp2AgAAPC0HQroCAAA8LQcqjgIAADwtBxbKAgAAPC0HfnICAAA8LQdKcgIAADwtBxKCAgAAPC0HXoICAAA8LQaKfgIAADwtB7a6AgAAPC0GrsICAAA8LQdSlgIAADwtBzK6AgAAPC0H6roCAAA8LQfyrgIAADwtB0rCAgAAPC0HxnYCAAA8LQbuggIAADwtB96uAgAAPC0GQsYCAAA8LQdexgIAADwtBoq2AgAAPC0HUp4CAAA8LQeCrgIAADwtBn6yAgAAPC0HrsYCAAA8LQdWfgIAADwtByrGAgAAPC0HepYCAAA8LQdSegIAADwtB9JyAgAAPC0GnsoCAAA8LQbGdgIAADwtBoJ2AgAAPC0G5sYCAAA8LQbywgIAADwtBkqGAgAAPC0GzpoCAAA8LQemsgIAADwtBrJ6AgAAPC0HUq4CAAA8LQfemgIAADwtBgKaAgAAPC0GwoYCAAA8LQf6egIAADwtBjaOAgAAPC0GJrYCAAA8LQfeigIAADwtBoLGAgAAPC0Gun4CAAA8LQcalgIAADwtB6J6AgAAPC0GTooCAAA8LQcKvgIAADwtBw52AgAAPC0GLrICAAA8LQeGdgIAADwtBja+AgAAPC0HqoYCAAA8LQbStgIAADwtB0q+AgAAPC0HfsoCAAA8LQdKygIAADwtB8LCAgAAPC0GpooCAAA8LQfmjgIAADwtBmZ6AgAAPC0G1rICAAA8LQZuwgIAADwtBkrKAgAAPC0G2q4CAAA8LQcKigIAADwtB+LKAgAAPC0GepYCAAA8LQdCigIAADwtBup6AgAAPC0GBnoCAAA8LEMqAgIAAAAtB1qGAgAAhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAgAiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCBCIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQcaRgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIwIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAggiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2ioCAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCNCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIMIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZqAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAjgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCECIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZWQgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAI8IgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAhQiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEGqm4CAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCQCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIYIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZOAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCJCIERQ0AIAAgBBGAgICAAAAhAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIsIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAigiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2iICAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCUCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIcIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABBwpmAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCICIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZSUgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAJMIgRFDQAgACAEEYCAgIAAACEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAlQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCWCIERQ0AIAAgBBGAgICAAAAhAwsgAwtFAQF/AkACQCAALwEwQRRxQRRHDQBBASEDIAAtAChBAUYNASAALwEyQeUARiEDDAELIAAtAClBBUYhAwsgACADOgAuQQAL/gEBA39BASEDAkAgAC8BMCIEQQhxDQAgACkDIEIAUiEDCwJAAkAgAC0ALkUNAEEBIQUgAC0AKUEFRg0BQQEhBSAEQcAAcUUgA3FBAUcNAQtBACEFIARBwABxDQBBAiEFIARB//8DcSIDQQhxDQACQCADQYAEcUUNAAJAIAAtAChBAUcNACAALQAtQQpxDQBBBQ8LQQQPCwJAIANBIHENAAJAIAAtAChBAUYNACAALwEyQf//A3EiAEGcf2pB5ABJDQAgAEHMAUYNACAAQbACRg0AQQQhBSAEQShxRQ0CIANBiARxQYAERg0CC0EADwtBAEEDIAApAyBQGyEFCyAFC2IBAn9BACEBAkAgAC0AKEEBRg0AIAAvATJB//8DcSICQZx/akHkAEkNACACQcwBRg0AIAJBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhASAAQYgEcUGABEYNACAAQShxRSEBCyABC6cBAQN/AkACQAJAIAAtACpFDQAgAC0AK0UNAEEAIQMgAC8BMCIEQQJxRQ0BDAILQQAhAyAALwEwIgRBAXFFDQELQQEhAyAALQAoQQFGDQAgAC8BMkH//wNxIgVBnH9qQeQASQ0AIAVBzAFGDQAgBUGwAkYNACAEQcAAcQ0AQQAhAyAEQYgEcUGABEYNACAEQShxQQBHIQMLIABBADsBMCAAQQA6AC8gAwuZAQECfwJAAkACQCAALQAqRQ0AIAAtACtFDQBBACEBIAAvATAiAkECcUUNAQwCC0EAIQEgAC8BMCICQQFxRQ0BC0EBIQEgAC0AKEEBRg0AIAAvATJB//8DcSIAQZx/akHkAEkNACAAQcwBRg0AIABBsAJGDQAgAkHAAHENAEEAIQEgAkGIBHFBgARGDQAgAkEocUEARyEBCyABC0kBAXsgAEEQav0MAAAAAAAAAAAAAAAAAAAAACIB/QsDACAAIAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AcsBygG4AckBuQHIAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBANwBC0EAIRAMxgELQQ4hEAzFAQtBDSEQDMQBC0EPIRAMwwELQRAhEAzCAQtBEyEQDMEBC0EUIRAMwAELQRUhEAy/AQtBFiEQDL4BC0EXIRAMvQELQRghEAy8AQtBGSEQDLsBC0EaIRAMugELQRshEAy5AQtBHCEQDLgBC0EIIRAMtwELQR0hEAy2AQtBICEQDLUBC0EfIRAMtAELQQchEAyzAQtBISEQDLIBC0EiIRAMsQELQR4hEAywAQtBIyEQDK8BC0ESIRAMrgELQREhEAytAQtBJCEQDKwBC0ElIRAMqwELQSYhEAyqAQtBJyEQDKkBC0HDASEQDKgBC0EpIRAMpwELQSshEAymAQtBLCEQDKUBC0EtIRAMpAELQS4hEAyjAQtBLyEQDKIBC0HEASEQDKEBC0EwIRAMoAELQTQhEAyfAQtBDCEQDJ4BC0ExIRAMnQELQTIhEAycAQtBMyEQDJsBC0E5IRAMmgELQTUhEAyZAQtBxQEhEAyYAQtBCyEQDJcBC0E6IRAMlgELQTYhEAyVAQtBCiEQDJQBC0E3IRAMkwELQTghEAySAQtBPCEQDJEBC0E7IRAMkAELQT0hEAyPAQtBCSEQDI4BC0EoIRAMjQELQT4hEAyMAQtBPyEQDIsBC0HAACEQDIoBC0HBACEQDIkBC0HCACEQDIgBC0HDACEQDIcBC0HEACEQDIYBC0HFACEQDIUBC0HGACEQDIQBC0EqIRAMgwELQccAIRAMggELQcgAIRAMgQELQckAIRAMgAELQcoAIRAMfwtBywAhEAx+C0HNACEQDH0LQcwAIRAMfAtBzgAhEAx7C0HPACEQDHoLQdAAIRAMeQtB0QAhEAx4C0HSACEQDHcLQdMAIRAMdgtB1AAhEAx1C0HWACEQDHQLQdUAIRAMcwtBBiEQDHILQdcAIRAMcQtBBSEQDHALQdgAIRAMbwtBBCEQDG4LQdkAIRAMbQtB2gAhEAxsC0HbACEQDGsLQdwAIRAMagtBAyEQDGkLQd0AIRAMaAtB3gAhEAxnC0HfACEQDGYLQeEAIRAMZQtB4AAhEAxkC0HiACEQDGMLQeMAIRAMYgtBAiEQDGELQeQAIRAMYAtB5QAhEAxfC0HmACEQDF4LQecAIRAMXQtB6AAhEAxcC0HpACEQDFsLQeoAIRAMWgtB6wAhEAxZC0HsACEQDFgLQe0AIRAMVwtB7gAhEAxWC0HvACEQDFULQfAAIRAMVAtB8QAhEAxTC0HyACEQDFILQfMAIRAMUQtB9AAhEAxQC0H1ACEQDE8LQfYAIRAMTgtB9wAhEAxNC0H4ACEQDEwLQfkAIRAMSwtB+gAhEAxKC0H7ACEQDEkLQfwAIRAMSAtB/QAhEAxHC0H+ACEQDEYLQf8AIRAMRQtBgAEhEAxEC0GBASEQDEMLQYIBIRAMQgtBgwEhEAxBC0GEASEQDEALQYUBIRAMPwtBhgEhEAw+C0GHASEQDD0LQYgBIRAMPAtBiQEhEAw7C0GKASEQDDoLQYsBIRAMOQtBjAEhEAw4C0GNASEQDDcLQY4BIRAMNgtBjwEhEAw1C0GQASEQDDQLQZEBIRAMMwtBkgEhEAwyC0GTASEQDDELQZQBIRAMMAtBlQEhEAwvC0GWASEQDC4LQZcBIRAMLQtBmAEhEAwsC0GZASEQDCsLQZoBIRAMKgtBmwEhEAwpC0GcASEQDCgLQZ0BIRAMJwtBngEhEAwmC0GfASEQDCULQaABIRAMJAtBoQEhEAwjC0GiASEQDCILQaMBIRAMIQtBpAEhEAwgC0GlASEQDB8LQaYBIRAMHgtBpwEhEAwdC0GoASEQDBwLQakBIRAMGwtBqgEhEAwaC0GrASEQDBkLQawBIRAMGAtBrQEhEAwXC0GuASEQDBYLQQEhEAwVC0GvASEQDBQLQbABIRAMEwtBsQEhEAwSC0GzASEQDBELQbIBIRAMEAtBtAEhEAwPC0G1ASEQDA4LQbYBIRAMDQtBtwEhEAwMC0G4ASEQDAsLQbkBIRAMCgtBugEhEAwJC0G7ASEQDAgLQcYBIRAMBwtBvAEhEAwGC0G9ASEQDAULQb4BIRAMBAtBvwEhEAwDC0HAASEQDAILQcIBIRAMAQtBwQEhEAsDQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB4fICEjJSg/QEFERUZHSElKS0xNT1BRUlPeA1dZW1xdYGJlZmdoaWprbG1vcHFyc3R1dnd4eXp7fH1+gAGCAYUBhgGHAYkBiwGMAY0BjgGPAZABkQGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMBmQKkArAC/gL+AgsgASIEIAJHDfMBQd0BIRAM/wMLIAEiECACRw3dAUHDASEQDP4DCyABIgEgAkcNkAFB9wAhEAz9AwsgASIBIAJHDYYBQe8AIRAM/AMLIAEiASACRw1/QeoAIRAM+wMLIAEiASACRw17QegAIRAM+gMLIAEiASACRw14QeYAIRAM+QMLIAEiASACRw0aQRghEAz4AwsgASIBIAJHDRRBEiEQDPcDCyABIgEgAkcNWUHFACEQDPYDCyABIgEgAkcNSkE/IRAM9QMLIAEiASACRw1IQTwhEAz0AwsgASIBIAJHDUFBMSEQDPMDCyAALQAuQQFGDesDDIcCCyAAIAEiASACEMCAgIAAQQFHDeYBIABCADcDIAznAQsgACABIgEgAhC0gICAACIQDecBIAEhAQz1AgsCQCABIgEgAkcNAEEGIRAM8AMLIAAgAUEBaiIBIAIQu4CAgAAiEA3oASABIQEMMQsgAEIANwMgQRIhEAzVAwsgASIQIAJHDStBHSEQDO0DCwJAIAEiASACRg0AIAFBAWohAUEQIRAM1AMLQQchEAzsAwsgAEIAIAApAyAiESACIAEiEGutIhJ9IhMgEyARVhs3AyAgESASViIURQ3lAUEIIRAM6wMLAkAgASIBIAJGDQAgAEGJgICAADYCCCAAIAE2AgQgASEBQRQhEAzSAwtBCSEQDOoDCyABIQEgACkDIFAN5AEgASEBDPICCwJAIAEiASACRw0AQQshEAzpAwsgACABQQFqIgEgAhC2gICAACIQDeUBIAEhAQzyAgsgACABIgEgAhC4gICAACIQDeUBIAEhAQzyAgsgACABIgEgAhC4gICAACIQDeYBIAEhAQwNCyAAIAEiASACELqAgIAAIhAN5wEgASEBDPACCwJAIAEiASACRw0AQQ8hEAzlAwsgAS0AACIQQTtGDQggEEENRw3oASABQQFqIQEM7wILIAAgASIBIAIQuoCAgAAiEA3oASABIQEM8gILA0ACQCABLQAAQfC1gIAAai0AACIQQQFGDQAgEEECRw3rASAAKAIEIRAgAEEANgIEIAAgECABQQFqIgEQuYCAgAAiEA3qASABIQEM9AILIAFBAWoiASACRw0AC0ESIRAM4gMLIAAgASIBIAIQuoCAgAAiEA3pASABIQEMCgsgASIBIAJHDQZBGyEQDOADCwJAIAEiASACRw0AQRYhEAzgAwsgAEGKgICAADYCCCAAIAE2AgQgACABIAIQuICAgAAiEA3qASABIQFBICEQDMYDCwJAIAEiASACRg0AA0ACQCABLQAAQfC3gIAAai0AACIQQQJGDQACQCAQQX9qDgTlAewBAOsB7AELIAFBAWohAUEIIRAMyAMLIAFBAWoiASACRw0AC0EVIRAM3wMLQRUhEAzeAwsDQAJAIAEtAABB8LmAgABqLQAAIhBBAkYNACAQQX9qDgTeAewB4AHrAewBCyABQQFqIgEgAkcNAAtBGCEQDN0DCwJAIAEiASACRg0AIABBi4CAgAA2AgggACABNgIEIAEhAUEHIRAMxAMLQRkhEAzcAwsgAUEBaiEBDAILAkAgASIUIAJHDQBBGiEQDNsDCyAUIQECQCAULQAAQXNqDhTdAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAgDuAgtBACEQIABBADYCHCAAQa+LgIAANgIQIABBAjYCDCAAIBRBAWo2AhQM2gMLAkAgAS0AACIQQTtGDQAgEEENRw3oASABQQFqIQEM5QILIAFBAWohAQtBIiEQDL8DCwJAIAEiECACRw0AQRwhEAzYAwtCACERIBAhASAQLQAAQVBqDjfnAeYBAQIDBAUGBwgAAAAAAAAACQoLDA0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPEBESExQAC0EeIRAMvQMLQgIhEQzlAQtCAyERDOQBC0IEIREM4wELQgUhEQziAQtCBiERDOEBC0IHIREM4AELQgghEQzfAQtCCSERDN4BC0IKIREM3QELQgshEQzcAQtCDCERDNsBC0INIREM2gELQg4hEQzZAQtCDyERDNgBC0IKIREM1wELQgshEQzWAQtCDCERDNUBC0INIREM1AELQg4hEQzTAQtCDyERDNIBC0IAIRECQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAtAABBUGoON+UB5AEAAQIDBAUGB+YB5gHmAeYB5gHmAeYBCAkKCwwN5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAQ4PEBESE+YBC0ICIREM5AELQgMhEQzjAQtCBCERDOIBC0IFIREM4QELQgYhEQzgAQtCByERDN8BC0IIIREM3gELQgkhEQzdAQtCCiERDNwBC0ILIREM2wELQgwhEQzaAQtCDSERDNkBC0IOIREM2AELQg8hEQzXAQtCCiERDNYBC0ILIREM1QELQgwhEQzUAQtCDSERDNMBC0IOIREM0gELQg8hEQzRAQsgAEIAIAApAyAiESACIAEiEGutIhJ9IhMgEyARVhs3AyAgESASViIURQ3SAUEfIRAMwAMLAkAgASIBIAJGDQAgAEGJgICAADYCCCAAIAE2AgQgASEBQSQhEAynAwtBICEQDL8DCyAAIAEiECACEL6AgIAAQX9qDgW2AQDFAgHRAdIBC0ERIRAMpAMLIABBAToALyAQIQEMuwMLIAEiASACRw3SAUEkIRAMuwMLIAEiDSACRw0eQcYAIRAMugMLIAAgASIBIAIQsoCAgAAiEA3UASABIQEMtQELIAEiECACRw0mQdAAIRAMuAMLAkAgASIBIAJHDQBBKCEQDLgDCyAAQQA2AgQgAEGMgICAADYCCCAAIAEgARCxgICAACIQDdMBIAEhAQzYAQsCQCABIhAgAkcNAEEpIRAMtwMLIBAtAAAiAUEgRg0UIAFBCUcN0wEgEEEBaiEBDBULAkAgASIBIAJGDQAgAUEBaiEBDBcLQSohEAy1AwsCQCABIhAgAkcNAEErIRAMtQMLAkAgEC0AACIBQQlGDQAgAUEgRw3VAQsgAC0ALEEIRg3TASAQIQEMkQMLAkAgASIBIAJHDQBBLCEQDLQDCyABLQAAQQpHDdUBIAFBAWohAQzJAgsgASIOIAJHDdUBQS8hEAyyAwsDQAJAIAEtAAAiEEEgRg0AAkAgEEF2ag4EANwB3AEA2gELIAEhAQzgAQsgAUEBaiIBIAJHDQALQTEhEAyxAwtBMiEQIAEiFCACRg2wAyACIBRrIAAoAgAiAWohFSAUIAFrQQNqIRYCQANAIBQtAAAiF0EgciAXIBdBv39qQf8BcUEaSRtB/wFxIAFB8LuAgABqLQAARw0BAkAgAUEDRw0AQQYhAQyWAwsgAUEBaiEBIBRBAWoiFCACRw0ACyAAIBU2AgAMsQMLIABBADYCACAUIQEM2QELQTMhECABIhQgAkYNrwMgAiAUayAAKAIAIgFqIRUgFCABa0EIaiEWAkADQCAULQAAIhdBIHIgFyAXQb9/akH/AXFBGkkbQf8BcSABQfS7gIAAai0AAEcNAQJAIAFBCEcNAEEFIQEMlQMLIAFBAWohASAUQQFqIhQgAkcNAAsgACAVNgIADLADCyAAQQA2AgAgFCEBDNgBC0E0IRAgASIUIAJGDa4DIAIgFGsgACgCACIBaiEVIBQgAWtBBWohFgJAA0AgFC0AACIXQSByIBcgF0G/f2pB/wFxQRpJG0H/AXEgAUHQwoCAAGotAABHDQECQCABQQVHDQBBByEBDJQDCyABQQFqIQEgFEEBaiIUIAJHDQALIAAgFTYCAAyvAwsgAEEANgIAIBQhAQzXAQsCQCABIgEgAkYNAANAAkAgAS0AAEGAvoCAAGotAAAiEEEBRg0AIBBBAkYNCiABIQEM3QELIAFBAWoiASACRw0AC0EwIRAMrgMLQTAhEAytAwsCQCABIgEgAkYNAANAAkAgAS0AACIQQSBGDQAgEEF2ag4E2QHaAdoB2QHaAQsgAUEBaiIBIAJHDQALQTghEAytAwtBOCEQDKwDCwNAAkAgAS0AACIQQSBGDQAgEEEJRw0DCyABQQFqIgEgAkcNAAtBPCEQDKsDCwNAAkAgAS0AACIQQSBGDQACQAJAIBBBdmoOBNoBAQHaAQALIBBBLEYN2wELIAEhAQwECyABQQFqIgEgAkcNAAtBPyEQDKoDCyABIQEM2wELQcAAIRAgASIUIAJGDagDIAIgFGsgACgCACIBaiEWIBQgAWtBBmohFwJAA0AgFC0AAEEgciABQYDAgIAAai0AAEcNASABQQZGDY4DIAFBAWohASAUQQFqIhQgAkcNAAsgACAWNgIADKkDCyAAQQA2AgAgFCEBC0E2IRAMjgMLAkAgASIPIAJHDQBBwQAhEAynAwsgAEGMgICAADYCCCAAIA82AgQgDyEBIAAtACxBf2oOBM0B1QHXAdkBhwMLIAFBAWohAQzMAQsCQCABIgEgAkYNAANAAkAgAS0AACIQQSByIBAgEEG/f2pB/wFxQRpJG0H/AXEiEEEJRg0AIBBBIEYNAAJAAkACQAJAIBBBnX9qDhMAAwMDAwMDAwEDAwMDAwMDAwMCAwsgAUEBaiEBQTEhEAyRAwsgAUEBaiEBQTIhEAyQAwsgAUEBaiEBQTMhEAyPAwsgASEBDNABCyABQQFqIgEgAkcNAAtBNSEQDKUDC0E1IRAMpAMLAkAgASIBIAJGDQADQAJAIAEtAABBgLyAgABqLQAAQQFGDQAgASEBDNMBCyABQQFqIgEgAkcNAAtBPSEQDKQDC0E9IRAMowMLIAAgASIBIAIQsICAgAAiEA3WASABIQEMAQsgEEEBaiEBC0E8IRAMhwMLAkAgASIBIAJHDQBBwgAhEAygAwsCQANAAkAgAS0AAEF3ag4YAAL+Av4ChAP+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gIA/gILIAFBAWoiASACRw0AC0HCACEQDKADCyABQQFqIQEgAC0ALUEBcUUNvQEgASEBC0EsIRAMhQMLIAEiASACRw3TAUHEACEQDJ0DCwNAAkAgAS0AAEGQwICAAGotAABBAUYNACABIQEMtwILIAFBAWoiASACRw0AC0HFACEQDJwDCyANLQAAIhBBIEYNswEgEEE6Rw2BAyAAKAIEIQEgAEEANgIEIAAgASANEK+AgIAAIgEN0AEgDUEBaiEBDLMCC0HHACEQIAEiDSACRg2aAyACIA1rIAAoAgAiAWohFiANIAFrQQVqIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQZDCgIAAai0AAEcNgAMgAUEFRg30AiABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyaAwtByAAhECABIg0gAkYNmQMgAiANayAAKAIAIgFqIRYgDSABa0EJaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUGWwoCAAGotAABHDf8CAkAgAUEJRw0AQQIhAQz1AgsgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMmQMLAkAgASINIAJHDQBByQAhEAyZAwsCQAJAIA0tAAAiAUEgciABIAFBv39qQf8BcUEaSRtB/wFxQZJ/ag4HAIADgAOAA4ADgAMBgAMLIA1BAWohAUE+IRAMgAMLIA1BAWohAUE/IRAM/wILQcoAIRAgASINIAJGDZcDIAIgDWsgACgCACIBaiEWIA0gAWtBAWohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFBoMKAgABqLQAARw39AiABQQFGDfACIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJcDC0HLACEQIAEiDSACRg2WAyACIA1rIAAoAgAiAWohFiANIAFrQQ5qIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQaLCgIAAai0AAEcN/AIgAUEORg3wAiABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyWAwtBzAAhECABIg0gAkYNlQMgAiANayAAKAIAIgFqIRYgDSABa0EPaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUHAwoCAAGotAABHDfsCAkAgAUEPRw0AQQMhAQzxAgsgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMlQMLQc0AIRAgASINIAJGDZQDIAIgDWsgACgCACIBaiEWIA0gAWtBBWohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFB0MKAgABqLQAARw36AgJAIAFBBUcNAEEEIQEM8AILIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJQDCwJAIAEiDSACRw0AQc4AIRAMlAMLAkACQAJAAkAgDS0AACIBQSByIAEgAUG/f2pB/wFxQRpJG0H/AXFBnX9qDhMA/QL9Av0C/QL9Av0C/QL9Av0C/QL9Av0CAf0C/QL9AgID/QILIA1BAWohAUHBACEQDP0CCyANQQFqIQFBwgAhEAz8AgsgDUEBaiEBQcMAIRAM+wILIA1BAWohAUHEACEQDPoCCwJAIAEiASACRg0AIABBjYCAgAA2AgggACABNgIEIAEhAUHFACEQDPoCC0HPACEQDJIDCyAQIQECQAJAIBAtAABBdmoOBAGoAqgCAKgCCyAQQQFqIQELQSchEAz4AgsCQCABIgEgAkcNAEHRACEQDJEDCwJAIAEtAABBIEYNACABIQEMjQELIAFBAWohASAALQAtQQFxRQ3HASABIQEMjAELIAEiFyACRw3IAUHSACEQDI8DC0HTACEQIAEiFCACRg2OAyACIBRrIAAoAgAiAWohFiAUIAFrQQFqIRcDQCAULQAAIAFB1sKAgABqLQAARw3MASABQQFGDccBIAFBAWohASAUQQFqIhQgAkcNAAsgACAWNgIADI4DCwJAIAEiASACRw0AQdUAIRAMjgMLIAEtAABBCkcNzAEgAUEBaiEBDMcBCwJAIAEiASACRw0AQdYAIRAMjQMLAkACQCABLQAAQXZqDgQAzQHNAQHNAQsgAUEBaiEBDMcBCyABQQFqIQFBygAhEAzzAgsgACABIgEgAhCugICAACIQDcsBIAEhAUHNACEQDPICCyAALQApQSJGDYUDDKYCCwJAIAEiASACRw0AQdsAIRAMigMLQQAhFEEBIRdBASEWQQAhEAJAAkACQAJAAkACQAJAAkACQCABLQAAQVBqDgrUAdMBAAECAwQFBgjVAQtBAiEQDAYLQQMhEAwFC0EEIRAMBAtBBSEQDAMLQQYhEAwCC0EHIRAMAQtBCCEQC0EAIRdBACEWQQAhFAzMAQtBCSEQQQEhFEEAIRdBACEWDMsBCwJAIAEiASACRw0AQd0AIRAMiQMLIAEtAABBLkcNzAEgAUEBaiEBDKYCCyABIgEgAkcNzAFB3wAhEAyHAwsCQCABIgEgAkYNACAAQY6AgIAANgIIIAAgATYCBCABIQFB0AAhEAzuAgtB4AAhEAyGAwtB4QAhECABIgEgAkYNhQMgAiABayAAKAIAIhRqIRYgASAUa0EDaiEXA0AgAS0AACAUQeLCgIAAai0AAEcNzQEgFEEDRg3MASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyFAwtB4gAhECABIgEgAkYNhAMgAiABayAAKAIAIhRqIRYgASAUa0ECaiEXA0AgAS0AACAUQebCgIAAai0AAEcNzAEgFEECRg3OASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyEAwtB4wAhECABIgEgAkYNgwMgAiABayAAKAIAIhRqIRYgASAUa0EDaiEXA0AgAS0AACAUQenCgIAAai0AAEcNywEgFEEDRg3OASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyDAwsCQCABIgEgAkcNAEHlACEQDIMDCyAAIAFBAWoiASACEKiAgIAAIhANzQEgASEBQdYAIRAM6QILAkAgASIBIAJGDQADQAJAIAEtAAAiEEEgRg0AAkACQAJAIBBBuH9qDgsAAc8BzwHPAc8BzwHPAc8BzwECzwELIAFBAWohAUHSACEQDO0CCyABQQFqIQFB0wAhEAzsAgsgAUEBaiEBQdQAIRAM6wILIAFBAWoiASACRw0AC0HkACEQDIIDC0HkACEQDIEDCwNAAkAgAS0AAEHwwoCAAGotAAAiEEEBRg0AIBBBfmoOA88B0AHRAdIBCyABQQFqIgEgAkcNAAtB5gAhEAyAAwsCQCABIgEgAkYNACABQQFqIQEMAwtB5wAhEAz/AgsDQAJAIAEtAABB8MSAgABqLQAAIhBBAUYNAAJAIBBBfmoOBNIB0wHUAQDVAQsgASEBQdcAIRAM5wILIAFBAWoiASACRw0AC0HoACEQDP4CCwJAIAEiASACRw0AQekAIRAM/gILAkAgAS0AACIQQXZqDhq6AdUB1QG8AdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAcoB1QHVAQDTAQsgAUEBaiEBC0EGIRAM4wILA0ACQCABLQAAQfDGgIAAai0AAEEBRg0AIAEhAQyeAgsgAUEBaiIBIAJHDQALQeoAIRAM+wILAkAgASIBIAJGDQAgAUEBaiEBDAMLQesAIRAM+gILAkAgASIBIAJHDQBB7AAhEAz6AgsgAUEBaiEBDAELAkAgASIBIAJHDQBB7QAhEAz5AgsgAUEBaiEBC0EEIRAM3gILAkAgASIUIAJHDQBB7gAhEAz3AgsgFCEBAkACQAJAIBQtAABB8MiAgABqLQAAQX9qDgfUAdUB1gEAnAIBAtcBCyAUQQFqIQEMCgsgFEEBaiEBDM0BC0EAIRAgAEEANgIcIABBm5KAgAA2AhAgAEEHNgIMIAAgFEEBajYCFAz2AgsCQANAAkAgAS0AAEHwyICAAGotAAAiEEEERg0AAkACQCAQQX9qDgfSAdMB1AHZAQAEAdkBCyABIQFB2gAhEAzgAgsgAUEBaiEBQdwAIRAM3wILIAFBAWoiASACRw0AC0HvACEQDPYCCyABQQFqIQEMywELAkAgASIUIAJHDQBB8AAhEAz1AgsgFC0AAEEvRw3UASAUQQFqIQEMBgsCQCABIhQgAkcNAEHxACEQDPQCCwJAIBQtAAAiAUEvRw0AIBRBAWohAUHdACEQDNsCCyABQXZqIgRBFksN0wFBASAEdEGJgIACcUUN0wEMygILAkAgASIBIAJGDQAgAUEBaiEBQd4AIRAM2gILQfIAIRAM8gILAkAgASIUIAJHDQBB9AAhEAzyAgsgFCEBAkAgFC0AAEHwzICAAGotAABBf2oOA8kClAIA1AELQeEAIRAM2AILAkAgASIUIAJGDQADQAJAIBQtAABB8MqAgABqLQAAIgFBA0YNAAJAIAFBf2oOAssCANUBCyAUIQFB3wAhEAzaAgsgFEEBaiIUIAJHDQALQfMAIRAM8QILQfMAIRAM8AILAkAgASIBIAJGDQAgAEGPgICAADYCCCAAIAE2AgQgASEBQeAAIRAM1wILQfUAIRAM7wILAkAgASIBIAJHDQBB9gAhEAzvAgsgAEGPgICAADYCCCAAIAE2AgQgASEBC0EDIRAM1AILA0AgAS0AAEEgRw3DAiABQQFqIgEgAkcNAAtB9wAhEAzsAgsCQCABIgEgAkcNAEH4ACEQDOwCCyABLQAAQSBHDc4BIAFBAWohAQzvAQsgACABIgEgAhCsgICAACIQDc4BIAEhAQyOAgsCQCABIgQgAkcNAEH6ACEQDOoCCyAELQAAQcwARw3RASAEQQFqIQFBEyEQDM8BCwJAIAEiBCACRw0AQfsAIRAM6QILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEANAIAQtAAAgAUHwzoCAAGotAABHDdABIAFBBUYNzgEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBB+wAhEAzoAgsCQCABIgQgAkcNAEH8ACEQDOgCCwJAAkAgBC0AAEG9f2oODADRAdEB0QHRAdEB0QHRAdEB0QHRAQHRAQsgBEEBaiEBQeYAIRAMzwILIARBAWohAUHnACEQDM4CCwJAIAEiBCACRw0AQf0AIRAM5wILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNzwEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf0AIRAM5wILIABBADYCACAQQQFqIQFBECEQDMwBCwJAIAEiBCACRw0AQf4AIRAM5gILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQfbOgIAAai0AAEcNzgEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf4AIRAM5gILIABBADYCACAQQQFqIQFBFiEQDMsBCwJAIAEiBCACRw0AQf8AIRAM5QILIAIgBGsgACgCACIBaiEUIAQgAWtBA2ohEAJAA0AgBC0AACABQfzOgIAAai0AAEcNzQEgAUEDRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf8AIRAM5QILIABBADYCACAQQQFqIQFBBSEQDMoBCwJAIAEiBCACRw0AQYABIRAM5AILIAQtAABB2QBHDcsBIARBAWohAUEIIRAMyQELAkAgASIEIAJHDQBBgQEhEAzjAgsCQAJAIAQtAABBsn9qDgMAzAEBzAELIARBAWohAUHrACEQDMoCCyAEQQFqIQFB7AAhEAzJAgsCQCABIgQgAkcNAEGCASEQDOICCwJAAkAgBC0AAEG4f2oOCADLAcsBywHLAcsBywEBywELIARBAWohAUHqACEQDMkCCyAEQQFqIQFB7QAhEAzIAgsCQCABIgQgAkcNAEGDASEQDOECCyACIARrIAAoAgAiAWohECAEIAFrQQJqIRQCQANAIAQtAAAgAUGAz4CAAGotAABHDckBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgEDYCAEGDASEQDOECC0EAIRAgAEEANgIAIBRBAWohAQzGAQsCQCABIgQgAkcNAEGEASEQDOACCyACIARrIAAoAgAiAWohFCAEIAFrQQRqIRACQANAIAQtAAAgAUGDz4CAAGotAABHDcgBIAFBBEYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGEASEQDOACCyAAQQA2AgAgEEEBaiEBQSMhEAzFAQsCQCABIgQgAkcNAEGFASEQDN8CCwJAAkAgBC0AAEG0f2oOCADIAcgByAHIAcgByAEByAELIARBAWohAUHvACEQDMYCCyAEQQFqIQFB8AAhEAzFAgsCQCABIgQgAkcNAEGGASEQDN4CCyAELQAAQcUARw3FASAEQQFqIQEMgwILAkAgASIEIAJHDQBBhwEhEAzdAgsgAiAEayAAKAIAIgFqIRQgBCABa0EDaiEQAkADQCAELQAAIAFBiM+AgABqLQAARw3FASABQQNGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBhwEhEAzdAgsgAEEANgIAIBBBAWohAUEtIRAMwgELAkAgASIEIAJHDQBBiAEhEAzcAgsgAiAEayAAKAIAIgFqIRQgBCABa0EIaiEQAkADQCAELQAAIAFB0M+AgABqLQAARw3EASABQQhGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBiAEhEAzcAgsgAEEANgIAIBBBAWohAUEpIRAMwQELAkAgASIBIAJHDQBBiQEhEAzbAgtBASEQIAEtAABB3wBHDcABIAFBAWohAQyBAgsCQCABIgQgAkcNAEGKASEQDNoCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRADQCAELQAAIAFBjM+AgABqLQAARw3BASABQQFGDa8CIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYoBIRAM2QILAkAgASIEIAJHDQBBiwEhEAzZAgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFBjs+AgABqLQAARw3BASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBiwEhEAzZAgsgAEEANgIAIBBBAWohAUECIRAMvgELAkAgASIEIAJHDQBBjAEhEAzYAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8M+AgABqLQAARw3AASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBjAEhEAzYAgsgAEEANgIAIBBBAWohAUEfIRAMvQELAkAgASIEIAJHDQBBjQEhEAzXAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8s+AgABqLQAARw2/ASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBjQEhEAzXAgsgAEEANgIAIBBBAWohAUEJIRAMvAELAkAgASIEIAJHDQBBjgEhEAzWAgsCQAJAIAQtAABBt39qDgcAvwG/Ab8BvwG/AQG/AQsgBEEBaiEBQfgAIRAMvQILIARBAWohAUH5ACEQDLwCCwJAIAEiBCACRw0AQY8BIRAM1QILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQZHPgIAAai0AAEcNvQEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQY8BIRAM1QILIABBADYCACAQQQFqIQFBGCEQDLoBCwJAIAEiBCACRw0AQZABIRAM1AILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQZfPgIAAai0AAEcNvAEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZABIRAM1AILIABBADYCACAQQQFqIQFBFyEQDLkBCwJAIAEiBCACRw0AQZEBIRAM0wILIAIgBGsgACgCACIBaiEUIAQgAWtBBmohEAJAA0AgBC0AACABQZrPgIAAai0AAEcNuwEgAUEGRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZEBIRAM0wILIABBADYCACAQQQFqIQFBFSEQDLgBCwJAIAEiBCACRw0AQZIBIRAM0gILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQaHPgIAAai0AAEcNugEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZIBIRAM0gILIABBADYCACAQQQFqIQFBHiEQDLcBCwJAIAEiBCACRw0AQZMBIRAM0QILIAQtAABBzABHDbgBIARBAWohAUEKIRAMtgELAkAgBCACRw0AQZQBIRAM0AILAkACQCAELQAAQb9/ag4PALkBuQG5AbkBuQG5AbkBuQG5AbkBuQG5AbkBAbkBCyAEQQFqIQFB/gAhEAy3AgsgBEEBaiEBQf8AIRAMtgILAkAgBCACRw0AQZUBIRAMzwILAkACQCAELQAAQb9/ag4DALgBAbgBCyAEQQFqIQFB/QAhEAy2AgsgBEEBaiEEQYABIRAMtQILAkAgBCACRw0AQZYBIRAMzgILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQafPgIAAai0AAEcNtgEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZYBIRAMzgILIABBADYCACAQQQFqIQFBCyEQDLMBCwJAIAQgAkcNAEGXASEQDM0CCwJAAkACQAJAIAQtAABBU2oOIwC4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBAbgBuAG4AbgBuAECuAG4AbgBA7gBCyAEQQFqIQFB+wAhEAy2AgsgBEEBaiEBQfwAIRAMtQILIARBAWohBEGBASEQDLQCCyAEQQFqIQRBggEhEAyzAgsCQCAEIAJHDQBBmAEhEAzMAgsgAiAEayAAKAIAIgFqIRQgBCABa0EEaiEQAkADQCAELQAAIAFBqc+AgABqLQAARw20ASABQQRGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBmAEhEAzMAgsgAEEANgIAIBBBAWohAUEZIRAMsQELAkAgBCACRw0AQZkBIRAMywILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQa7PgIAAai0AAEcNswEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZkBIRAMywILIABBADYCACAQQQFqIQFBBiEQDLABCwJAIAQgAkcNAEGaASEQDMoCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUG0z4CAAGotAABHDbIBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGaASEQDMoCCyAAQQA2AgAgEEEBaiEBQRwhEAyvAQsCQCAEIAJHDQBBmwEhEAzJAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBts+AgABqLQAARw2xASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBmwEhEAzJAgsgAEEANgIAIBBBAWohAUEnIRAMrgELAkAgBCACRw0AQZwBIRAMyAILAkACQCAELQAAQax/ag4CAAGxAQsgBEEBaiEEQYYBIRAMrwILIARBAWohBEGHASEQDK4CCwJAIAQgAkcNAEGdASEQDMcCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUG4z4CAAGotAABHDa8BIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGdASEQDMcCCyAAQQA2AgAgEEEBaiEBQSYhEAysAQsCQCAEIAJHDQBBngEhEAzGAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBus+AgABqLQAARw2uASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBngEhEAzGAgsgAEEANgIAIBBBAWohAUEDIRAMqwELAkAgBCACRw0AQZ8BIRAMxQILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNrQEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZ8BIRAMxQILIABBADYCACAQQQFqIQFBDCEQDKoBCwJAIAQgAkcNAEGgASEQDMQCCyACIARrIAAoAgAiAWohFCAEIAFrQQNqIRACQANAIAQtAAAgAUG8z4CAAGotAABHDawBIAFBA0YNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGgASEQDMQCCyAAQQA2AgAgEEEBaiEBQQ0hEAypAQsCQCAEIAJHDQBBoQEhEAzDAgsCQAJAIAQtAABBun9qDgsArAGsAawBrAGsAawBrAGsAawBAawBCyAEQQFqIQRBiwEhEAyqAgsgBEEBaiEEQYwBIRAMqQILAkAgBCACRw0AQaIBIRAMwgILIAQtAABB0ABHDakBIARBAWohBAzpAQsCQCAEIAJHDQBBowEhEAzBAgsCQAJAIAQtAABBt39qDgcBqgGqAaoBqgGqAQCqAQsgBEEBaiEEQY4BIRAMqAILIARBAWohAUEiIRAMpgELAkAgBCACRw0AQaQBIRAMwAILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQcDPgIAAai0AAEcNqAEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQaQBIRAMwAILIABBADYCACAQQQFqIQFBHSEQDKUBCwJAIAQgAkcNAEGlASEQDL8CCwJAAkAgBC0AAEGuf2oOAwCoAQGoAQsgBEEBaiEEQZABIRAMpgILIARBAWohAUEEIRAMpAELAkAgBCACRw0AQaYBIRAMvgILAkACQAJAAkACQCAELQAAQb9/ag4VAKoBqgGqAaoBqgGqAaoBqgGqAaoBAaoBqgECqgGqAQOqAaoBBKoBCyAEQQFqIQRBiAEhEAyoAgsgBEEBaiEEQYkBIRAMpwILIARBAWohBEGKASEQDKYCCyAEQQFqIQRBjwEhEAylAgsgBEEBaiEEQZEBIRAMpAILAkAgBCACRw0AQacBIRAMvQILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNpQEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQacBIRAMvQILIABBADYCACAQQQFqIQFBESEQDKIBCwJAIAQgAkcNAEGoASEQDLwCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHCz4CAAGotAABHDaQBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGoASEQDLwCCyAAQQA2AgAgEEEBaiEBQSwhEAyhAQsCQCAEIAJHDQBBqQEhEAy7AgsgAiAEayAAKAIAIgFqIRQgBCABa0EEaiEQAkADQCAELQAAIAFBxc+AgABqLQAARw2jASABQQRGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBqQEhEAy7AgsgAEEANgIAIBBBAWohAUErIRAMoAELAkAgBCACRw0AQaoBIRAMugILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQcrPgIAAai0AAEcNogEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQaoBIRAMugILIABBADYCACAQQQFqIQFBFCEQDJ8BCwJAIAQgAkcNAEGrASEQDLkCCwJAAkACQAJAIAQtAABBvn9qDg8AAQKkAaQBpAGkAaQBpAGkAaQBpAGkAaQBA6QBCyAEQQFqIQRBkwEhEAyiAgsgBEEBaiEEQZQBIRAMoQILIARBAWohBEGVASEQDKACCyAEQQFqIQRBlgEhEAyfAgsCQCAEIAJHDQBBrAEhEAy4AgsgBC0AAEHFAEcNnwEgBEEBaiEEDOABCwJAIAQgAkcNAEGtASEQDLcCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHNz4CAAGotAABHDZ8BIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGtASEQDLcCCyAAQQA2AgAgEEEBaiEBQQ4hEAycAQsCQCAEIAJHDQBBrgEhEAy2AgsgBC0AAEHQAEcNnQEgBEEBaiEBQSUhEAybAQsCQCAEIAJHDQBBrwEhEAy1AgsgAiAEayAAKAIAIgFqIRQgBCABa0EIaiEQAkADQCAELQAAIAFB0M+AgABqLQAARw2dASABQQhGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBrwEhEAy1AgsgAEEANgIAIBBBAWohAUEqIRAMmgELAkAgBCACRw0AQbABIRAMtAILAkACQCAELQAAQat/ag4LAJ0BnQGdAZ0BnQGdAZ0BnQGdAQGdAQsgBEEBaiEEQZoBIRAMmwILIARBAWohBEGbASEQDJoCCwJAIAQgAkcNAEGxASEQDLMCCwJAAkAgBC0AAEG/f2oOFACcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAEBnAELIARBAWohBEGZASEQDJoCCyAEQQFqIQRBnAEhEAyZAgsCQCAEIAJHDQBBsgEhEAyyAgsgAiAEayAAKAIAIgFqIRQgBCABa0EDaiEQAkADQCAELQAAIAFB2c+AgABqLQAARw2aASABQQNGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBsgEhEAyyAgsgAEEANgIAIBBBAWohAUEhIRAMlwELAkAgBCACRw0AQbMBIRAMsQILIAIgBGsgACgCACIBaiEUIAQgAWtBBmohEAJAA0AgBC0AACABQd3PgIAAai0AAEcNmQEgAUEGRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbMBIRAMsQILIABBADYCACAQQQFqIQFBGiEQDJYBCwJAIAQgAkcNAEG0ASEQDLACCwJAAkACQCAELQAAQbt/ag4RAJoBmgGaAZoBmgGaAZoBmgGaAQGaAZoBmgGaAZoBApoBCyAEQQFqIQRBnQEhEAyYAgsgBEEBaiEEQZ4BIRAMlwILIARBAWohBEGfASEQDJYCCwJAIAQgAkcNAEG1ASEQDK8CCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUHkz4CAAGotAABHDZcBIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG1ASEQDK8CCyAAQQA2AgAgEEEBaiEBQSghEAyUAQsCQCAEIAJHDQBBtgEhEAyuAgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFB6s+AgABqLQAARw2WASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBtgEhEAyuAgsgAEEANgIAIBBBAWohAUEHIRAMkwELAkAgBCACRw0AQbcBIRAMrQILAkACQCAELQAAQbt/ag4OAJYBlgGWAZYBlgGWAZYBlgGWAZYBlgGWAQGWAQsgBEEBaiEEQaEBIRAMlAILIARBAWohBEGiASEQDJMCCwJAIAQgAkcNAEG4ASEQDKwCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDZQBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG4ASEQDKwCCyAAQQA2AgAgEEEBaiEBQRIhEAyRAQsCQCAEIAJHDQBBuQEhEAyrAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8M+AgABqLQAARw2TASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBuQEhEAyrAgsgAEEANgIAIBBBAWohAUEgIRAMkAELAkAgBCACRw0AQboBIRAMqgILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfLPgIAAai0AAEcNkgEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQboBIRAMqgILIABBADYCACAQQQFqIQFBDyEQDI8BCwJAIAQgAkcNAEG7ASEQDKkCCwJAAkAgBC0AAEG3f2oOBwCSAZIBkgGSAZIBAZIBCyAEQQFqIQRBpQEhEAyQAgsgBEEBaiEEQaYBIRAMjwILAkAgBCACRw0AQbwBIRAMqAILIAIgBGsgACgCACIBaiEUIAQgAWtBB2ohEAJAA0AgBC0AACABQfTPgIAAai0AAEcNkAEgAUEHRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbwBIRAMqAILIABBADYCACAQQQFqIQFBGyEQDI0BCwJAIAQgAkcNAEG9ASEQDKcCCwJAAkACQCAELQAAQb5/ag4SAJEBkQGRAZEBkQGRAZEBkQGRAQGRAZEBkQGRAZEBkQECkQELIARBAWohBEGkASEQDI8CCyAEQQFqIQRBpwEhEAyOAgsgBEEBaiEEQagBIRAMjQILAkAgBCACRw0AQb4BIRAMpgILIAQtAABBzgBHDY0BIARBAWohBAzPAQsCQCAEIAJHDQBBvwEhEAylAgsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAELQAAQb9/ag4VAAECA5wBBAUGnAGcAZwBBwgJCgucAQwNDg+cAQsgBEEBaiEBQegAIRAMmgILIARBAWohAUHpACEQDJkCCyAEQQFqIQFB7gAhEAyYAgsgBEEBaiEBQfIAIRAMlwILIARBAWohAUHzACEQDJYCCyAEQQFqIQFB9gAhEAyVAgsgBEEBaiEBQfcAIRAMlAILIARBAWohAUH6ACEQDJMCCyAEQQFqIQRBgwEhEAySAgsgBEEBaiEEQYQBIRAMkQILIARBAWohBEGFASEQDJACCyAEQQFqIQRBkgEhEAyPAgsgBEEBaiEEQZgBIRAMjgILIARBAWohBEGgASEQDI0CCyAEQQFqIQRBowEhEAyMAgsgBEEBaiEEQaoBIRAMiwILAkAgBCACRg0AIABBkICAgAA2AgggACAENgIEQasBIRAMiwILQcABIRAMowILIAAgBSACEKqAgIAAIgENiwEgBSEBDFwLAkAgBiACRg0AIAZBAWohBQyNAQtBwgEhEAyhAgsDQAJAIBAtAABBdmoOBIwBAACPAQALIBBBAWoiECACRw0AC0HDASEQDKACCwJAIAcgAkYNACAAQZGAgIAANgIIIAAgBzYCBCAHIQFBASEQDIcCC0HEASEQDJ8CCwJAIAcgAkcNAEHFASEQDJ8CCwJAAkAgBy0AAEF2ag4EAc4BzgEAzgELIAdBAWohBgyNAQsgB0EBaiEFDIkBCwJAIAcgAkcNAEHGASEQDJ4CCwJAAkAgBy0AAEF2ag4XAY8BjwEBjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BAI8BCyAHQQFqIQcLQbABIRAMhAILAkAgCCACRw0AQcgBIRAMnQILIAgtAABBIEcNjQEgAEEAOwEyIAhBAWohAUGzASEQDIMCCyABIRcCQANAIBciByACRg0BIActAABBUGpB/wFxIhBBCk8NzAECQCAALwEyIhRBmTNLDQAgACAUQQpsIhQ7ATIgEEH//wNzIBRB/v8DcUkNACAHQQFqIRcgACAUIBBqIhA7ATIgEEH//wNxQegHSQ0BCwtBACEQIABBADYCHCAAQcGJgIAANgIQIABBDTYCDCAAIAdBAWo2AhQMnAILQccBIRAMmwILIAAgCCACEK6AgIAAIhBFDcoBIBBBFUcNjAEgAEHIATYCHCAAIAg2AhQgAEHJl4CAADYCECAAQRU2AgxBACEQDJoCCwJAIAkgAkcNAEHMASEQDJoCC0EAIRRBASEXQQEhFkEAIRACQAJAAkACQAJAAkACQAJAAkAgCS0AAEFQag4KlgGVAQABAgMEBQYIlwELQQIhEAwGC0EDIRAMBQtBBCEQDAQLQQUhEAwDC0EGIRAMAgtBByEQDAELQQghEAtBACEXQQAhFkEAIRQMjgELQQkhEEEBIRRBACEXQQAhFgyNAQsCQCAKIAJHDQBBzgEhEAyZAgsgCi0AAEEuRw2OASAKQQFqIQkMygELIAsgAkcNjgFB0AEhEAyXAgsCQCALIAJGDQAgAEGOgICAADYCCCAAIAs2AgRBtwEhEAz+AQtB0QEhEAyWAgsCQCAEIAJHDQBB0gEhEAyWAgsgAiAEayAAKAIAIhBqIRQgBCAQa0EEaiELA0AgBC0AACAQQfzPgIAAai0AAEcNjgEgEEEERg3pASAQQQFqIRAgBEEBaiIEIAJHDQALIAAgFDYCAEHSASEQDJUCCyAAIAwgAhCsgICAACIBDY0BIAwhAQy4AQsCQCAEIAJHDQBB1AEhEAyUAgsgAiAEayAAKAIAIhBqIRQgBCAQa0EBaiEMA0AgBC0AACAQQYHQgIAAai0AAEcNjwEgEEEBRg2OASAQQQFqIRAgBEEBaiIEIAJHDQALIAAgFDYCAEHUASEQDJMCCwJAIAQgAkcNAEHWASEQDJMCCyACIARrIAAoAgAiEGohFCAEIBBrQQJqIQsDQCAELQAAIBBBg9CAgABqLQAARw2OASAQQQJGDZABIBBBAWohECAEQQFqIgQgAkcNAAsgACAUNgIAQdYBIRAMkgILAkAgBCACRw0AQdcBIRAMkgILAkACQCAELQAAQbt/ag4QAI8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwEBjwELIARBAWohBEG7ASEQDPkBCyAEQQFqIQRBvAEhEAz4AQsCQCAEIAJHDQBB2AEhEAyRAgsgBC0AAEHIAEcNjAEgBEEBaiEEDMQBCwJAIAQgAkYNACAAQZCAgIAANgIIIAAgBDYCBEG+ASEQDPcBC0HZASEQDI8CCwJAIAQgAkcNAEHaASEQDI8CCyAELQAAQcgARg3DASAAQQE6ACgMuQELIABBAjoALyAAIAQgAhCmgICAACIQDY0BQcIBIRAM9AELIAAtAChBf2oOArcBuQG4AQsDQAJAIAQtAABBdmoOBACOAY4BAI4BCyAEQQFqIgQgAkcNAAtB3QEhEAyLAgsgAEEAOgAvIAAtAC1BBHFFDYQCCyAAQQA6AC8gAEEBOgA0IAEhAQyMAQsgEEEVRg3aASAAQQA2AhwgACABNgIUIABBp46AgAA2AhAgAEESNgIMQQAhEAyIAgsCQCAAIBAgAhC0gICAACIEDQAgECEBDIECCwJAIARBFUcNACAAQQM2AhwgACAQNgIUIABBsJiAgAA2AhAgAEEVNgIMQQAhEAyIAgsgAEEANgIcIAAgEDYCFCAAQaeOgIAANgIQIABBEjYCDEEAIRAMhwILIBBBFUYN1gEgAEEANgIcIAAgATYCFCAAQdqNgIAANgIQIABBFDYCDEEAIRAMhgILIAAoAgQhFyAAQQA2AgQgECARp2oiFiEBIAAgFyAQIBYgFBsiEBC1gICAACIURQ2NASAAQQc2AhwgACAQNgIUIAAgFDYCDEEAIRAMhQILIAAgAC8BMEGAAXI7ATAgASEBC0EqIRAM6gELIBBBFUYN0QEgAEEANgIcIAAgATYCFCAAQYOMgIAANgIQIABBEzYCDEEAIRAMggILIBBBFUYNzwEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAMgQILIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDI0BCyAAQQw2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAMgAILIBBBFUYNzAEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAM/wELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDIwBCyAAQQ02AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM/gELIBBBFUYNyQEgAEEANgIcIAAgATYCFCAAQcaMgIAANgIQIABBIzYCDEEAIRAM/QELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC5gICAACIQDQAgAUEBaiEBDIsBCyAAQQ42AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM/AELIABBADYCHCAAIAE2AhQgAEHAlYCAADYCECAAQQI2AgxBACEQDPsBCyAQQRVGDcUBIABBADYCHCAAIAE2AhQgAEHGjICAADYCECAAQSM2AgxBACEQDPoBCyAAQRA2AhwgACABNgIUIAAgEDYCDEEAIRAM+QELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC5gICAACIEDQAgAUEBaiEBDPEBCyAAQRE2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM+AELIBBBFUYNwQEgAEEANgIcIAAgATYCFCAAQcaMgIAANgIQIABBIzYCDEEAIRAM9wELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC5gICAACIQDQAgAUEBaiEBDIgBCyAAQRM2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM9gELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC5gICAACIEDQAgAUEBaiEBDO0BCyAAQRQ2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM9QELIBBBFUYNvQEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAM9AELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDIYBCyAAQRY2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM8wELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC3gICAACIEDQAgAUEBaiEBDOkBCyAAQRc2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM8gELIABBADYCHCAAIAE2AhQgAEHNk4CAADYCECAAQQw2AgxBACEQDPEBC0IBIRELIBBBAWohAQJAIAApAyAiEkL//////////w9WDQAgACASQgSGIBGENwMgIAEhAQyEAQsgAEEANgIcIAAgATYCFCAAQa2JgIAANgIQIABBDDYCDEEAIRAM7wELIABBADYCHCAAIBA2AhQgAEHNk4CAADYCECAAQQw2AgxBACEQDO4BCyAAKAIEIRcgAEEANgIEIBAgEadqIhYhASAAIBcgECAWIBQbIhAQtYCAgAAiFEUNcyAAQQU2AhwgACAQNgIUIAAgFDYCDEEAIRAM7QELIABBADYCHCAAIBA2AhQgAEGqnICAADYCECAAQQ82AgxBACEQDOwBCyAAIBAgAhC0gICAACIBDQEgECEBC0EOIRAM0QELAkAgAUEVRw0AIABBAjYCHCAAIBA2AhQgAEGwmICAADYCECAAQRU2AgxBACEQDOoBCyAAQQA2AhwgACAQNgIUIABBp46AgAA2AhAgAEESNgIMQQAhEAzpAQsgAUEBaiEQAkAgAC8BMCIBQYABcUUNAAJAIAAgECACELuAgIAAIgENACAQIQEMcAsgAUEVRw26ASAAQQU2AhwgACAQNgIUIABB+ZeAgAA2AhAgAEEVNgIMQQAhEAzpAQsCQCABQaAEcUGgBEcNACAALQAtQQJxDQAgAEEANgIcIAAgEDYCFCAAQZaTgIAANgIQIABBBDYCDEEAIRAM6QELIAAgECACEL2AgIAAGiAQIQECQAJAAkACQAJAIAAgECACELOAgIAADhYCAQAEBAQEBAQEBAQEBAQEBAQEBAQDBAsgAEEBOgAuCyAAIAAvATBBwAByOwEwIBAhAQtBJiEQDNEBCyAAQSM2AhwgACAQNgIUIABBpZaAgAA2AhAgAEEVNgIMQQAhEAzpAQsgAEEANgIcIAAgEDYCFCAAQdWLgIAANgIQIABBETYCDEEAIRAM6AELIAAtAC1BAXFFDQFBwwEhEAzOAQsCQCANIAJGDQADQAJAIA0tAABBIEYNACANIQEMxAELIA1BAWoiDSACRw0AC0ElIRAM5wELQSUhEAzmAQsgACgCBCEEIABBADYCBCAAIAQgDRCvgICAACIERQ2tASAAQSY2AhwgACAENgIMIAAgDUEBajYCFEEAIRAM5QELIBBBFUYNqwEgAEEANgIcIAAgATYCFCAAQf2NgIAANgIQIABBHTYCDEEAIRAM5AELIABBJzYCHCAAIAE2AhQgACAQNgIMQQAhEAzjAQsgECEBQQEhFAJAAkACQAJAAkACQAJAIAAtACxBfmoOBwYFBQMBAgAFCyAAIAAvATBBCHI7ATAMAwtBAiEUDAELQQQhFAsgAEEBOgAsIAAgAC8BMCAUcjsBMAsgECEBC0ErIRAMygELIABBADYCHCAAIBA2AhQgAEGrkoCAADYCECAAQQs2AgxBACEQDOIBCyAAQQA2AhwgACABNgIUIABB4Y+AgAA2AhAgAEEKNgIMQQAhEAzhAQsgAEEAOgAsIBAhAQy9AQsgECEBQQEhFAJAAkACQAJAAkAgAC0ALEF7ag4EAwECAAULIAAgAC8BMEEIcjsBMAwDC0ECIRQMAQtBBCEUCyAAQQE6ACwgACAALwEwIBRyOwEwCyAQIQELQSkhEAzFAQsgAEEANgIcIAAgATYCFCAAQfCUgIAANgIQIABBAzYCDEEAIRAM3QELAkAgDi0AAEENRw0AIAAoAgQhASAAQQA2AgQCQCAAIAEgDhCxgICAACIBDQAgDkEBaiEBDHULIABBLDYCHCAAIAE2AgwgACAOQQFqNgIUQQAhEAzdAQsgAC0ALUEBcUUNAUHEASEQDMMBCwJAIA4gAkcNAEEtIRAM3AELAkACQANAAkAgDi0AAEF2ag4EAgAAAwALIA5BAWoiDiACRw0AC0EtIRAM3QELIAAoAgQhASAAQQA2AgQCQCAAIAEgDhCxgICAACIBDQAgDiEBDHQLIABBLDYCHCAAIA42AhQgACABNgIMQQAhEAzcAQsgACgCBCEBIABBADYCBAJAIAAgASAOELGAgIAAIgENACAOQQFqIQEMcwsgAEEsNgIcIAAgATYCDCAAIA5BAWo2AhRBACEQDNsBCyAAKAIEIQQgAEEANgIEIAAgBCAOELGAgIAAIgQNoAEgDiEBDM4BCyAQQSxHDQEgAUEBaiEQQQEhAQJAAkACQAJAAkAgAC0ALEF7ag4EAwECBAALIBAhAQwEC0ECIQEMAQtBBCEBCyAAQQE6ACwgACAALwEwIAFyOwEwIBAhAQwBCyAAIAAvATBBCHI7ATAgECEBC0E5IRAMvwELIABBADoALCABIQELQTQhEAy9AQsgACAALwEwQSByOwEwIAEhAQwCCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQsYCAgAAiBA0AIAEhAQzHAQsgAEE3NgIcIAAgATYCFCAAIAQ2AgxBACEQDNQBCyAAQQg6ACwgASEBC0EwIRAMuQELAkAgAC0AKEEBRg0AIAEhAQwECyAALQAtQQhxRQ2TASABIQEMAwsgAC0AMEEgcQ2UAUHFASEQDLcBCwJAIA8gAkYNAAJAA0ACQCAPLQAAQVBqIgFB/wFxQQpJDQAgDyEBQTUhEAy6AQsgACkDICIRQpmz5syZs+bMGVYNASAAIBFCCn4iETcDICARIAGtQv8BgyISQn+FVg0BIAAgESASfDcDICAPQQFqIg8gAkcNAAtBOSEQDNEBCyAAKAIEIQIgAEEANgIEIAAgAiAPQQFqIgQQsYCAgAAiAg2VASAEIQEMwwELQTkhEAzPAQsCQCAALwEwIgFBCHFFDQAgAC0AKEEBRw0AIAAtAC1BCHFFDZABCyAAIAFB9/sDcUGABHI7ATAgDyEBC0E3IRAMtAELIAAgAC8BMEEQcjsBMAyrAQsgEEEVRg2LASAAQQA2AhwgACABNgIUIABB8I6AgAA2AhAgAEEcNgIMQQAhEAzLAQsgAEHDADYCHCAAIAE2AgwgACANQQFqNgIUQQAhEAzKAQsCQCABLQAAQTpHDQAgACgCBCEQIABBADYCBAJAIAAgECABEK+AgIAAIhANACABQQFqIQEMYwsgAEHDADYCHCAAIBA2AgwgACABQQFqNgIUQQAhEAzKAQsgAEEANgIcIAAgATYCFCAAQbGRgIAANgIQIABBCjYCDEEAIRAMyQELIABBADYCHCAAIAE2AhQgAEGgmYCAADYCECAAQR42AgxBACEQDMgBCyAAQQA2AgALIABBgBI7ASogACAXQQFqIgEgAhCogICAACIQDQEgASEBC0HHACEQDKwBCyAQQRVHDYMBIABB0QA2AhwgACABNgIUIABB45eAgAA2AhAgAEEVNgIMQQAhEAzEAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMXgsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAzDAQsgAEEANgIcIAAgFDYCFCAAQcGogIAANgIQIABBBzYCDCAAQQA2AgBBACEQDMIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxdCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDMEBC0EAIRAgAEEANgIcIAAgATYCFCAAQYCRgIAANgIQIABBCTYCDAzAAQsgEEEVRg19IABBADYCHCAAIAE2AhQgAEGUjYCAADYCECAAQSE2AgxBACEQDL8BC0EBIRZBACEXQQAhFEEBIRALIAAgEDoAKyABQQFqIQECQAJAIAAtAC1BEHENAAJAAkACQCAALQAqDgMBAAIECyAWRQ0DDAILIBQNAQwCCyAXRQ0BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQrYCAgAAiEA0AIAEhAQxcCyAAQdgANgIcIAAgATYCFCAAIBA2AgxBACEQDL4BCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQrYCAgAAiBA0AIAEhAQytAQsgAEHZADYCHCAAIAE2AhQgACAENgIMQQAhEAy9AQsgACgCBCEEIABBADYCBAJAIAAgBCABEK2AgIAAIgQNACABIQEMqwELIABB2gA2AhwgACABNgIUIAAgBDYCDEEAIRAMvAELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCtgICAACIEDQAgASEBDKkBCyAAQdwANgIcIAAgATYCFCAAIAQ2AgxBACEQDLsBCwJAIAEtAABBUGoiEEH/AXFBCk8NACAAIBA6ACogAUEBaiEBQc8AIRAMogELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCtgICAACIEDQAgASEBDKcBCyAAQd4ANgIcIAAgATYCFCAAIAQ2AgxBACEQDLoBCyAAQQA2AgAgF0EBaiEBAkAgAC0AKUEjTw0AIAEhAQxZCyAAQQA2AhwgACABNgIUIABB04mAgAA2AhAgAEEINgIMQQAhEAy5AQsgAEEANgIAC0EAIRAgAEEANgIcIAAgATYCFCAAQZCzgIAANgIQIABBCDYCDAy3AQsgAEEANgIAIBdBAWohAQJAIAAtAClBIUcNACABIQEMVgsgAEEANgIcIAAgATYCFCAAQZuKgIAANgIQIABBCDYCDEEAIRAMtgELIABBADYCACAXQQFqIQECQCAALQApIhBBXWpBC08NACABIQEMVQsCQCAQQQZLDQBBASAQdEHKAHFFDQAgASEBDFULQQAhECAAQQA2AhwgACABNgIUIABB94mAgAA2AhAgAEEINgIMDLUBCyAQQRVGDXEgAEEANgIcIAAgATYCFCAAQbmNgIAANgIQIABBGjYCDEEAIRAMtAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDFQLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMswELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDE0LIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMsgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDE0LIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMsQELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDFELIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMsAELIABBADYCHCAAIAE2AhQgAEHGioCAADYCECAAQQc2AgxBACEQDK8BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxJCyAAQdIANgIcIAAgATYCFCAAIBA2AgxBACEQDK4BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxJCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDK0BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDKwBCyAAQQA2AhwgACABNgIUIABB3IiAgAA2AhAgAEEHNgIMQQAhEAyrAQsgEEE/Rw0BIAFBAWohAQtBBSEQDJABC0EAIRAgAEEANgIcIAAgATYCFCAAQf2SgIAANgIQIABBBzYCDAyoAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMQgsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAynAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMQgsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAymAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMRgsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAylAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMPwsgAEHSADYCHCAAIBQ2AhQgACABNgIMQQAhEAykAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMPwsgAEHTADYCHCAAIBQ2AhQgACABNgIMQQAhEAyjAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMQwsgAEHlADYCHCAAIBQ2AhQgACABNgIMQQAhEAyiAQsgAEEANgIcIAAgFDYCFCAAQcOPgIAANgIQIABBBzYCDEEAIRAMoQELIABBADYCHCAAIAE2AhQgAEHDj4CAADYCECAAQQc2AgxBACEQDKABC0EAIRAgAEEANgIcIAAgFDYCFCAAQYycgIAANgIQIABBBzYCDAyfAQsgAEEANgIcIAAgFDYCFCAAQYycgIAANgIQIABBBzYCDEEAIRAMngELIABBADYCHCAAIBQ2AhQgAEH+kYCAADYCECAAQQc2AgxBACEQDJ0BCyAAQQA2AhwgACABNgIUIABBjpuAgAA2AhAgAEEGNgIMQQAhEAycAQsgEEEVRg1XIABBADYCHCAAIAE2AhQgAEHMjoCAADYCECAAQSA2AgxBACEQDJsBCyAAQQA2AgAgEEEBaiEBQSQhEAsgACAQOgApIAAoAgQhECAAQQA2AgQgACAQIAEQq4CAgAAiEA1UIAEhAQw+CyAAQQA2AgALQQAhECAAQQA2AhwgACAENgIUIABB8ZuAgAA2AhAgAEEGNgIMDJcBCyABQRVGDVAgAEEANgIcIAAgBTYCFCAAQfCMgIAANgIQIABBGzYCDEEAIRAMlgELIAAoAgQhBSAAQQA2AgQgACAFIBAQqYCAgAAiBQ0BIBBBAWohBQtBrQEhEAx7CyAAQcEBNgIcIAAgBTYCDCAAIBBBAWo2AhRBACEQDJMBCyAAKAIEIQYgAEEANgIEIAAgBiAQEKmAgIAAIgYNASAQQQFqIQYLQa4BIRAMeAsgAEHCATYCHCAAIAY2AgwgACAQQQFqNgIUQQAhEAyQAQsgAEEANgIcIAAgBzYCFCAAQZeLgIAANgIQIABBDTYCDEEAIRAMjwELIABBADYCHCAAIAg2AhQgAEHjkICAADYCECAAQQk2AgxBACEQDI4BCyAAQQA2AhwgACAINgIUIABBlI2AgAA2AhAgAEEhNgIMQQAhEAyNAQtBASEWQQAhF0EAIRRBASEQCyAAIBA6ACsgCUEBaiEIAkACQCAALQAtQRBxDQACQAJAAkAgAC0AKg4DAQACBAsgFkUNAwwCCyAUDQEMAgsgF0UNAQsgACgCBCEQIABBADYCBCAAIBAgCBCtgICAACIQRQ09IABByQE2AhwgACAINgIUIAAgEDYCDEEAIRAMjAELIAAoAgQhBCAAQQA2AgQgACAEIAgQrYCAgAAiBEUNdiAAQcoBNgIcIAAgCDYCFCAAIAQ2AgxBACEQDIsBCyAAKAIEIQQgAEEANgIEIAAgBCAJEK2AgIAAIgRFDXQgAEHLATYCHCAAIAk2AhQgACAENgIMQQAhEAyKAQsgACgCBCEEIABBADYCBCAAIAQgChCtgICAACIERQ1yIABBzQE2AhwgACAKNgIUIAAgBDYCDEEAIRAMiQELAkAgCy0AAEFQaiIQQf8BcUEKTw0AIAAgEDoAKiALQQFqIQpBtgEhEAxwCyAAKAIEIQQgAEEANgIEIAAgBCALEK2AgIAAIgRFDXAgAEHPATYCHCAAIAs2AhQgACAENgIMQQAhEAyIAQsgAEEANgIcIAAgBDYCFCAAQZCzgIAANgIQIABBCDYCDCAAQQA2AgBBACEQDIcBCyABQRVGDT8gAEEANgIcIAAgDDYCFCAAQcyOgIAANgIQIABBIDYCDEEAIRAMhgELIABBgQQ7ASggACgCBCEQIABCADcDACAAIBAgDEEBaiIMEKuAgIAAIhBFDTggAEHTATYCHCAAIAw2AhQgACAQNgIMQQAhEAyFAQsgAEEANgIAC0EAIRAgAEEANgIcIAAgBDYCFCAAQdibgIAANgIQIABBCDYCDAyDAQsgACgCBCEQIABCADcDACAAIBAgC0EBaiILEKuAgIAAIhANAUHGASEQDGkLIABBAjoAKAxVCyAAQdUBNgIcIAAgCzYCFCAAIBA2AgxBACEQDIABCyAQQRVGDTcgAEEANgIcIAAgBDYCFCAAQaSMgIAANgIQIABBEDYCDEEAIRAMfwsgAC0ANEEBRw00IAAgBCACELyAgIAAIhBFDTQgEEEVRw01IABB3AE2AhwgACAENgIUIABB1ZaAgAA2AhAgAEEVNgIMQQAhEAx+C0EAIRAgAEEANgIcIABBr4uAgAA2AhAgAEECNgIMIAAgFEEBajYCFAx9C0EAIRAMYwtBAiEQDGILQQ0hEAxhC0EPIRAMYAtBJSEQDF8LQRMhEAxeC0EVIRAMXQtBFiEQDFwLQRchEAxbC0EYIRAMWgtBGSEQDFkLQRohEAxYC0EbIRAMVwtBHCEQDFYLQR0hEAxVC0EfIRAMVAtBISEQDFMLQSMhEAxSC0HGACEQDFELQS4hEAxQC0EvIRAMTwtBOyEQDE4LQT0hEAxNC0HIACEQDEwLQckAIRAMSwtBywAhEAxKC0HMACEQDEkLQc4AIRAMSAtB0QAhEAxHC0HVACEQDEYLQdgAIRAMRQtB2QAhEAxEC0HbACEQDEMLQeQAIRAMQgtB5QAhEAxBC0HxACEQDEALQfQAIRAMPwtBjQEhEAw+C0GXASEQDD0LQakBIRAMPAtBrAEhEAw7C0HAASEQDDoLQbkBIRAMOQtBrwEhEAw4C0GxASEQDDcLQbIBIRAMNgtBtAEhEAw1C0G1ASEQDDQLQboBIRAMMwtBvQEhEAwyC0G/ASEQDDELQcEBIRAMMAsgAEEANgIcIAAgBDYCFCAAQemLgIAANgIQIABBHzYCDEEAIRAMSAsgAEHbATYCHCAAIAQ2AhQgAEH6loCAADYCECAAQRU2AgxBACEQDEcLIABB+AA2AhwgACAMNgIUIABBypiAgAA2AhAgAEEVNgIMQQAhEAxGCyAAQdEANgIcIAAgBTYCFCAAQbCXgIAANgIQIABBFTYCDEEAIRAMRQsgAEH5ADYCHCAAIAE2AhQgACAQNgIMQQAhEAxECyAAQfgANgIcIAAgATYCFCAAQcqYgIAANgIQIABBFTYCDEEAIRAMQwsgAEHkADYCHCAAIAE2AhQgAEHjl4CAADYCECAAQRU2AgxBACEQDEILIABB1wA2AhwgACABNgIUIABByZeAgAA2AhAgAEEVNgIMQQAhEAxBCyAAQQA2AhwgACABNgIUIABBuY2AgAA2AhAgAEEaNgIMQQAhEAxACyAAQcIANgIcIAAgATYCFCAAQeOYgIAANgIQIABBFTYCDEEAIRAMPwsgAEEANgIEIAAgDyAPELGAgIAAIgRFDQEgAEE6NgIcIAAgBDYCDCAAIA9BAWo2AhRBACEQDD4LIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCxgICAACIERQ0AIABBOzYCHCAAIAQ2AgwgACABQQFqNgIUQQAhEAw+CyABQQFqIQEMLQsgD0EBaiEBDC0LIABBADYCHCAAIA82AhQgAEHkkoCAADYCECAAQQQ2AgxBACEQDDsLIABBNjYCHCAAIAQ2AhQgACACNgIMQQAhEAw6CyAAQS42AhwgACAONgIUIAAgBDYCDEEAIRAMOQsgAEHQADYCHCAAIAE2AhQgAEGRmICAADYCECAAQRU2AgxBACEQDDgLIA1BAWohAQwsCyAAQRU2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAw2CyAAQRs2AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAw1CyAAQQ82AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAw0CyAAQQs2AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAwzCyAAQRo2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAwyCyAAQQs2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAwxCyAAQQo2AhwgACABNgIUIABB5JaAgAA2AhAgAEEVNgIMQQAhEAwwCyAAQR42AhwgACABNgIUIABB+ZeAgAA2AhAgAEEVNgIMQQAhEAwvCyAAQQA2AhwgACAQNgIUIABB2o2AgAA2AhAgAEEUNgIMQQAhEAwuCyAAQQQ2AhwgACABNgIUIABBsJiAgAA2AhAgAEEVNgIMQQAhEAwtCyAAQQA2AgAgC0EBaiELC0G4ASEQDBILIABBADYCACAQQQFqIQFB9QAhEAwRCyABIQECQCAALQApQQVHDQBB4wAhEAwRC0HiACEQDBALQQAhECAAQQA2AhwgAEHkkYCAADYCECAAQQc2AgwgACAUQQFqNgIUDCgLIABBADYCACAXQQFqIQFBwAAhEAwOC0EBIQELIAAgAToALCAAQQA2AgAgF0EBaiEBC0EoIRAMCwsgASEBC0E4IRAMCQsCQCABIg8gAkYNAANAAkAgDy0AAEGAvoCAAGotAAAiAUEBRg0AIAFBAkcNAyAPQQFqIQEMBAsgD0EBaiIPIAJHDQALQT4hEAwiC0E+IRAMIQsgAEEAOgAsIA8hAQwBC0ELIRAMBgtBOiEQDAULIAFBAWohAUEtIRAMBAsgACABOgAsIABBADYCACAWQQFqIQFBDCEQDAMLIABBADYCACAXQQFqIQFBCiEQDAILIABBADYCAAsgAEEAOgAsIA0hAUEJIRAMAAsLQQAhECAAQQA2AhwgACALNgIUIABBzZCAgAA2AhAgAEEJNgIMDBcLQQAhECAAQQA2AhwgACAKNgIUIABB6YqAgAA2AhAgAEEJNgIMDBYLQQAhECAAQQA2AhwgACAJNgIUIABBt5CAgAA2AhAgAEEJNgIMDBULQQAhECAAQQA2AhwgACAINgIUIABBnJGAgAA2AhAgAEEJNgIMDBQLQQAhECAAQQA2AhwgACABNgIUIABBzZCAgAA2AhAgAEEJNgIMDBMLQQAhECAAQQA2AhwgACABNgIUIABB6YqAgAA2AhAgAEEJNgIMDBILQQAhECAAQQA2AhwgACABNgIUIABBt5CAgAA2AhAgAEEJNgIMDBELQQAhECAAQQA2AhwgACABNgIUIABBnJGAgAA2AhAgAEEJNgIMDBALQQAhECAAQQA2AhwgACABNgIUIABBl5WAgAA2AhAgAEEPNgIMDA8LQQAhECAAQQA2AhwgACABNgIUIABBl5WAgAA2AhAgAEEPNgIMDA4LQQAhECAAQQA2AhwgACABNgIUIABBwJKAgAA2AhAgAEELNgIMDA0LQQAhECAAQQA2AhwgACABNgIUIABBlYmAgAA2AhAgAEELNgIMDAwLQQAhECAAQQA2AhwgACABNgIUIABB4Y+AgAA2AhAgAEEKNgIMDAsLQQAhECAAQQA2AhwgACABNgIUIABB+4+AgAA2AhAgAEEKNgIMDAoLQQAhECAAQQA2AhwgACABNgIUIABB8ZmAgAA2AhAgAEECNgIMDAkLQQAhECAAQQA2AhwgACABNgIUIABBxJSAgAA2AhAgAEECNgIMDAgLQQAhECAAQQA2AhwgACABNgIUIABB8pWAgAA2AhAgAEECNgIMDAcLIABBAjYCHCAAIAE2AhQgAEGcmoCAADYCECAAQRY2AgxBACEQDAYLQQEhEAwFC0HUACEQIAEiBCACRg0EIANBCGogACAEIAJB2MKAgABBChDFgICAACADKAIMIQQgAygCCA4DAQQCAAsQyoCAgAAACyAAQQA2AhwgAEG1moCAADYCECAAQRc2AgwgACAEQQFqNgIUQQAhEAwCCyAAQQA2AhwgACAENgIUIABBypqAgAA2AhAgAEEJNgIMQQAhEAwBCwJAIAEiBCACRw0AQSIhEAwBCyAAQYmAgIAANgIIIAAgBDYCBEEhIRALIANBEGokgICAgAAgEAuvAQECfyABKAIAIQYCQAJAIAIgA0YNACAEIAZqIQQgBiADaiACayEHIAIgBkF/cyAFaiIGaiEFA0ACQCACLQAAIAQtAABGDQBBAiEEDAMLAkAgBg0AQQAhBCAFIQIMAwsgBkF/aiEGIARBAWohBCACQQFqIgIgA0cNAAsgByEGIAMhAgsgAEEBNgIAIAEgBjYCACAAIAI2AgQPCyABQQA2AgAgACAENgIAIAAgAjYCBAsKACAAEMeAgIAAC/I2AQt/I4CAgIAAQRBrIgEkgICAgAACQEEAKAKg0ICAAA0AQQAQy4CAgABBgNSEgABrIgJB2QBJDQBBACEDAkBBACgC4NOAgAAiBA0AQQBCfzcC7NOAgABBAEKAgISAgIDAADcC5NOAgABBACABQQhqQXBxQdiq1aoFcyIENgLg04CAAEEAQQA2AvTTgIAAQQBBADYCxNOAgAALQQAgAjYCzNOAgABBAEGA1ISAADYCyNOAgABBAEGA1ISAADYCmNCAgABBACAENgKs0ICAAEEAQX82AqjQgIAAA0AgA0HE0ICAAGogA0G40ICAAGoiBDYCACAEIANBsNCAgABqIgU2AgAgA0G80ICAAGogBTYCACADQczQgIAAaiADQcDQgIAAaiIFNgIAIAUgBDYCACADQdTQgIAAaiADQcjQgIAAaiIENgIAIAQgBTYCACADQdDQgIAAaiAENgIAIANBIGoiA0GAAkcNAAtBgNSEgABBeEGA1ISAAGtBD3FBAEGA1ISAAEEIakEPcRsiA2oiBEEEaiACQUhqIgUgA2siA0EBcjYCAEEAQQAoAvDTgIAANgKk0ICAAEEAIAM2ApTQgIAAQQAgBDYCoNCAgABBgNSEgAAgBWpBODYCBAsCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEHsAUsNAAJAQQAoAojQgIAAIgZBECAAQRNqQXBxIABBC0kbIgJBA3YiBHYiA0EDcUUNAAJAAkAgA0EBcSAEckEBcyIFQQN0IgRBsNCAgABqIgMgBEG40ICAAGooAgAiBCgCCCICRw0AQQAgBkF+IAV3cTYCiNCAgAAMAQsgAyACNgIIIAIgAzYCDAsgBEEIaiEDIAQgBUEDdCIFQQNyNgIEIAQgBWoiBCAEKAIEQQFyNgIEDAwLIAJBACgCkNCAgAAiB00NAQJAIANFDQACQAJAIAMgBHRBAiAEdCIDQQAgA2tycSIDQQAgA2txQX9qIgMgA0EMdkEQcSIDdiIEQQV2QQhxIgUgA3IgBCAFdiIDQQJ2QQRxIgRyIAMgBHYiA0EBdkECcSIEciADIAR2IgNBAXZBAXEiBHIgAyAEdmoiBEEDdCIDQbDQgIAAaiIFIANBuNCAgABqKAIAIgMoAggiAEcNAEEAIAZBfiAEd3EiBjYCiNCAgAAMAQsgBSAANgIIIAAgBTYCDAsgAyACQQNyNgIEIAMgBEEDdCIEaiAEIAJrIgU2AgAgAyACaiIAIAVBAXI2AgQCQCAHRQ0AIAdBeHFBsNCAgABqIQJBACgCnNCAgAAhBAJAAkAgBkEBIAdBA3Z0IghxDQBBACAGIAhyNgKI0ICAACACIQgMAQsgAigCCCEICyAIIAQ2AgwgAiAENgIIIAQgAjYCDCAEIAg2AggLIANBCGohA0EAIAA2ApzQgIAAQQAgBTYCkNCAgAAMDAtBACgCjNCAgAAiCUUNASAJQQAgCWtxQX9qIgMgA0EMdkEQcSIDdiIEQQV2QQhxIgUgA3IgBCAFdiIDQQJ2QQRxIgRyIAMgBHYiA0EBdkECcSIEciADIAR2IgNBAXZBAXEiBHIgAyAEdmpBAnRBuNKAgABqKAIAIgAoAgRBeHEgAmshBCAAIQUCQANAAkAgBSgCECIDDQAgBUEUaigCACIDRQ0CCyADKAIEQXhxIAJrIgUgBCAFIARJIgUbIQQgAyAAIAUbIQAgAyEFDAALCyAAKAIYIQoCQCAAKAIMIgggAEYNACAAKAIIIgNBACgCmNCAgABJGiAIIAM2AgggAyAINgIMDAsLAkAgAEEUaiIFKAIAIgMNACAAKAIQIgNFDQMgAEEQaiEFCwNAIAUhCyADIghBFGoiBSgCACIDDQAgCEEQaiEFIAgoAhAiAw0ACyALQQA2AgAMCgtBfyECIABBv39LDQAgAEETaiIDQXBxIQJBACgCjNCAgAAiB0UNAEEAIQsCQCACQYACSQ0AQR8hCyACQf///wdLDQAgA0EIdiIDIANBgP4/akEQdkEIcSIDdCIEIARBgOAfakEQdkEEcSIEdCIFIAVBgIAPakEQdkECcSIFdEEPdiADIARyIAVyayIDQQF0IAIgA0EVanZBAXFyQRxqIQsLQQAgAmshBAJAAkACQAJAIAtBAnRBuNKAgABqKAIAIgUNAEEAIQNBACEIDAELQQAhAyACQQBBGSALQQF2ayALQR9GG3QhAEEAIQgDQAJAIAUoAgRBeHEgAmsiBiAETw0AIAYhBCAFIQggBg0AQQAhBCAFIQggBSEDDAMLIAMgBUEUaigCACIGIAYgBSAAQR12QQRxakEQaigCACIFRhsgAyAGGyEDIABBAXQhACAFDQALCwJAIAMgCHINAEEAIQhBAiALdCIDQQAgA2tyIAdxIgNFDQMgA0EAIANrcUF/aiIDIANBDHZBEHEiA3YiBUEFdkEIcSIAIANyIAUgAHYiA0ECdkEEcSIFciADIAV2IgNBAXZBAnEiBXIgAyAFdiIDQQF2QQFxIgVyIAMgBXZqQQJ0QbjSgIAAaigCACEDCyADRQ0BCwNAIAMoAgRBeHEgAmsiBiAESSEAAkAgAygCECIFDQAgA0EUaigCACEFCyAGIAQgABshBCADIAggABshCCAFIQMgBQ0ACwsgCEUNACAEQQAoApDQgIAAIAJrTw0AIAgoAhghCwJAIAgoAgwiACAIRg0AIAgoAggiA0EAKAKY0ICAAEkaIAAgAzYCCCADIAA2AgwMCQsCQCAIQRRqIgUoAgAiAw0AIAgoAhAiA0UNAyAIQRBqIQULA0AgBSEGIAMiAEEUaiIFKAIAIgMNACAAQRBqIQUgACgCECIDDQALIAZBADYCAAwICwJAQQAoApDQgIAAIgMgAkkNAEEAKAKc0ICAACEEAkACQCADIAJrIgVBEEkNACAEIAJqIgAgBUEBcjYCBEEAIAU2ApDQgIAAQQAgADYCnNCAgAAgBCADaiAFNgIAIAQgAkEDcjYCBAwBCyAEIANBA3I2AgQgBCADaiIDIAMoAgRBAXI2AgRBAEEANgKc0ICAAEEAQQA2ApDQgIAACyAEQQhqIQMMCgsCQEEAKAKU0ICAACIAIAJNDQBBACgCoNCAgAAiAyACaiIEIAAgAmsiBUEBcjYCBEEAIAU2ApTQgIAAQQAgBDYCoNCAgAAgAyACQQNyNgIEIANBCGohAwwKCwJAAkBBACgC4NOAgABFDQBBACgC6NOAgAAhBAwBC0EAQn83AuzTgIAAQQBCgICEgICAwAA3AuTTgIAAQQAgAUEMakFwcUHYqtWqBXM2AuDTgIAAQQBBADYC9NOAgABBAEEANgLE04CAAEGAgAQhBAtBACEDAkAgBCACQccAaiIHaiIGQQAgBGsiC3EiCCACSw0AQQBBMDYC+NOAgAAMCgsCQEEAKALA04CAACIDRQ0AAkBBACgCuNOAgAAiBCAIaiIFIARNDQAgBSADTQ0BC0EAIQNBAEEwNgL404CAAAwKC0EALQDE04CAAEEEcQ0EAkACQAJAQQAoAqDQgIAAIgRFDQBByNOAgAAhAwNAAkAgAygCACIFIARLDQAgBSADKAIEaiAESw0DCyADKAIIIgMNAAsLQQAQy4CAgAAiAEF/Rg0FIAghBgJAQQAoAuTTgIAAIgNBf2oiBCAAcUUNACAIIABrIAQgAGpBACADa3FqIQYLIAYgAk0NBSAGQf7///8HSw0FAkBBACgCwNOAgAAiA0UNAEEAKAK404CAACIEIAZqIgUgBE0NBiAFIANLDQYLIAYQy4CAgAAiAyAARw0BDAcLIAYgAGsgC3EiBkH+////B0sNBCAGEMuAgIAAIgAgAygCACADKAIEakYNAyAAIQMLAkAgA0F/Rg0AIAJByABqIAZNDQACQCAHIAZrQQAoAujTgIAAIgRqQQAgBGtxIgRB/v///wdNDQAgAyEADAcLAkAgBBDLgICAAEF/Rg0AIAQgBmohBiADIQAMBwtBACAGaxDLgICAABoMBAsgAyEAIANBf0cNBQwDC0EAIQgMBwtBACEADAULIABBf0cNAgtBAEEAKALE04CAAEEEcjYCxNOAgAALIAhB/v///wdLDQEgCBDLgICAACEAQQAQy4CAgAAhAyAAQX9GDQEgA0F/Rg0BIAAgA08NASADIABrIgYgAkE4ak0NAQtBAEEAKAK404CAACAGaiIDNgK404CAAAJAIANBACgCvNOAgABNDQBBACADNgK804CAAAsCQAJAAkACQEEAKAKg0ICAACIERQ0AQcjTgIAAIQMDQCAAIAMoAgAiBSADKAIEIghqRg0CIAMoAggiAw0ADAMLCwJAAkBBACgCmNCAgAAiA0UNACAAIANPDQELQQAgADYCmNCAgAALQQAhA0EAIAY2AszTgIAAQQAgADYCyNOAgABBAEF/NgKo0ICAAEEAQQAoAuDTgIAANgKs0ICAAEEAQQA2AtTTgIAAA0AgA0HE0ICAAGogA0G40ICAAGoiBDYCACAEIANBsNCAgABqIgU2AgAgA0G80ICAAGogBTYCACADQczQgIAAaiADQcDQgIAAaiIFNgIAIAUgBDYCACADQdTQgIAAaiADQcjQgIAAaiIENgIAIAQgBTYCACADQdDQgIAAaiAENgIAIANBIGoiA0GAAkcNAAsgAEF4IABrQQ9xQQAgAEEIakEPcRsiA2oiBCAGQUhqIgUgA2siA0EBcjYCBEEAQQAoAvDTgIAANgKk0ICAAEEAIAM2ApTQgIAAQQAgBDYCoNCAgAAgACAFakE4NgIEDAILIAMtAAxBCHENACAEIAVJDQAgBCAATw0AIARBeCAEa0EPcUEAIARBCGpBD3EbIgVqIgBBACgClNCAgAAgBmoiCyAFayIFQQFyNgIEIAMgCCAGajYCBEEAQQAoAvDTgIAANgKk0ICAAEEAIAU2ApTQgIAAQQAgADYCoNCAgAAgBCALakE4NgIEDAELAkAgAEEAKAKY0ICAACIITw0AQQAgADYCmNCAgAAgACEICyAAIAZqIQVByNOAgAAhAwJAAkACQAJAAkACQAJAA0AgAygCACAFRg0BIAMoAggiAw0ADAILCyADLQAMQQhxRQ0BC0HI04CAACEDA0ACQCADKAIAIgUgBEsNACAFIAMoAgRqIgUgBEsNAwsgAygCCCEDDAALCyADIAA2AgAgAyADKAIEIAZqNgIEIABBeCAAa0EPcUEAIABBCGpBD3EbaiILIAJBA3I2AgQgBUF4IAVrQQ9xQQAgBUEIakEPcRtqIgYgCyACaiICayEDAkAgBiAERw0AQQAgAjYCoNCAgABBAEEAKAKU0ICAACADaiIDNgKU0ICAACACIANBAXI2AgQMAwsCQCAGQQAoApzQgIAARw0AQQAgAjYCnNCAgABBAEEAKAKQ0ICAACADaiIDNgKQ0ICAACACIANBAXI2AgQgAiADaiADNgIADAMLAkAgBigCBCIEQQNxQQFHDQAgBEF4cSEHAkACQCAEQf8BSw0AIAYoAggiBSAEQQN2IghBA3RBsNCAgABqIgBGGgJAIAYoAgwiBCAFRw0AQQBBACgCiNCAgABBfiAId3E2AojQgIAADAILIAQgAEYaIAQgBTYCCCAFIAQ2AgwMAQsgBigCGCEJAkACQCAGKAIMIgAgBkYNACAGKAIIIgQgCEkaIAAgBDYCCCAEIAA2AgwMAQsCQCAGQRRqIgQoAgAiBQ0AIAZBEGoiBCgCACIFDQBBACEADAELA0AgBCEIIAUiAEEUaiIEKAIAIgUNACAAQRBqIQQgACgCECIFDQALIAhBADYCAAsgCUUNAAJAAkAgBiAGKAIcIgVBAnRBuNKAgABqIgQoAgBHDQAgBCAANgIAIAANAUEAQQAoAozQgIAAQX4gBXdxNgKM0ICAAAwCCyAJQRBBFCAJKAIQIAZGG2ogADYCACAARQ0BCyAAIAk2AhgCQCAGKAIQIgRFDQAgACAENgIQIAQgADYCGAsgBigCFCIERQ0AIABBFGogBDYCACAEIAA2AhgLIAcgA2ohAyAGIAdqIgYoAgQhBAsgBiAEQX5xNgIEIAIgA2ogAzYCACACIANBAXI2AgQCQCADQf8BSw0AIANBeHFBsNCAgABqIQQCQAJAQQAoAojQgIAAIgVBASADQQN2dCIDcQ0AQQAgBSADcjYCiNCAgAAgBCEDDAELIAQoAgghAwsgAyACNgIMIAQgAjYCCCACIAQ2AgwgAiADNgIIDAMLQR8hBAJAIANB////B0sNACADQQh2IgQgBEGA/j9qQRB2QQhxIgR0IgUgBUGA4B9qQRB2QQRxIgV0IgAgAEGAgA9qQRB2QQJxIgB0QQ92IAQgBXIgAHJrIgRBAXQgAyAEQRVqdkEBcXJBHGohBAsgAiAENgIcIAJCADcCECAEQQJ0QbjSgIAAaiEFAkBBACgCjNCAgAAiAEEBIAR0IghxDQAgBSACNgIAQQAgACAIcjYCjNCAgAAgAiAFNgIYIAIgAjYCCCACIAI2AgwMAwsgA0EAQRkgBEEBdmsgBEEfRht0IQQgBSgCACEAA0AgACIFKAIEQXhxIANGDQIgBEEddiEAIARBAXQhBCAFIABBBHFqQRBqIggoAgAiAA0ACyAIIAI2AgAgAiAFNgIYIAIgAjYCDCACIAI2AggMAgsgAEF4IABrQQ9xQQAgAEEIakEPcRsiA2oiCyAGQUhqIgggA2siA0EBcjYCBCAAIAhqQTg2AgQgBCAFQTcgBWtBD3FBACAFQUlqQQ9xG2pBQWoiCCAIIARBEGpJGyIIQSM2AgRBAEEAKALw04CAADYCpNCAgABBACADNgKU0ICAAEEAIAs2AqDQgIAAIAhBEGpBACkC0NOAgAA3AgAgCEEAKQLI04CAADcCCEEAIAhBCGo2AtDTgIAAQQAgBjYCzNOAgABBACAANgLI04CAAEEAQQA2AtTTgIAAIAhBJGohAwNAIANBBzYCACADQQRqIgMgBUkNAAsgCCAERg0DIAggCCgCBEF+cTYCBCAIIAggBGsiADYCACAEIABBAXI2AgQCQCAAQf8BSw0AIABBeHFBsNCAgABqIQMCQAJAQQAoAojQgIAAIgVBASAAQQN2dCIAcQ0AQQAgBSAAcjYCiNCAgAAgAyEFDAELIAMoAgghBQsgBSAENgIMIAMgBDYCCCAEIAM2AgwgBCAFNgIIDAQLQR8hAwJAIABB////B0sNACAAQQh2IgMgA0GA/j9qQRB2QQhxIgN0IgUgBUGA4B9qQRB2QQRxIgV0IgggCEGAgA9qQRB2QQJxIgh0QQ92IAMgBXIgCHJrIgNBAXQgACADQRVqdkEBcXJBHGohAwsgBCADNgIcIARCADcCECADQQJ0QbjSgIAAaiEFAkBBACgCjNCAgAAiCEEBIAN0IgZxDQAgBSAENgIAQQAgCCAGcjYCjNCAgAAgBCAFNgIYIAQgBDYCCCAEIAQ2AgwMBAsgAEEAQRkgA0EBdmsgA0EfRht0IQMgBSgCACEIA0AgCCIFKAIEQXhxIABGDQMgA0EddiEIIANBAXQhAyAFIAhBBHFqQRBqIgYoAgAiCA0ACyAGIAQ2AgAgBCAFNgIYIAQgBDYCDCAEIAQ2AggMAwsgBSgCCCIDIAI2AgwgBSACNgIIIAJBADYCGCACIAU2AgwgAiADNgIICyALQQhqIQMMBQsgBSgCCCIDIAQ2AgwgBSAENgIIIARBADYCGCAEIAU2AgwgBCADNgIIC0EAKAKU0ICAACIDIAJNDQBBACgCoNCAgAAiBCACaiIFIAMgAmsiA0EBcjYCBEEAIAM2ApTQgIAAQQAgBTYCoNCAgAAgBCACQQNyNgIEIARBCGohAwwDC0EAIQNBAEEwNgL404CAAAwCCwJAIAtFDQACQAJAIAggCCgCHCIFQQJ0QbjSgIAAaiIDKAIARw0AIAMgADYCACAADQFBACAHQX4gBXdxIgc2AozQgIAADAILIAtBEEEUIAsoAhAgCEYbaiAANgIAIABFDQELIAAgCzYCGAJAIAgoAhAiA0UNACAAIAM2AhAgAyAANgIYCyAIQRRqKAIAIgNFDQAgAEEUaiADNgIAIAMgADYCGAsCQAJAIARBD0sNACAIIAQgAmoiA0EDcjYCBCAIIANqIgMgAygCBEEBcjYCBAwBCyAIIAJqIgAgBEEBcjYCBCAIIAJBA3I2AgQgACAEaiAENgIAAkAgBEH/AUsNACAEQXhxQbDQgIAAaiEDAkACQEEAKAKI0ICAACIFQQEgBEEDdnQiBHENAEEAIAUgBHI2AojQgIAAIAMhBAwBCyADKAIIIQQLIAQgADYCDCADIAA2AgggACADNgIMIAAgBDYCCAwBC0EfIQMCQCAEQf///wdLDQAgBEEIdiIDIANBgP4/akEQdkEIcSIDdCIFIAVBgOAfakEQdkEEcSIFdCICIAJBgIAPakEQdkECcSICdEEPdiADIAVyIAJyayIDQQF0IAQgA0EVanZBAXFyQRxqIQMLIAAgAzYCHCAAQgA3AhAgA0ECdEG40oCAAGohBQJAIAdBASADdCICcQ0AIAUgADYCAEEAIAcgAnI2AozQgIAAIAAgBTYCGCAAIAA2AgggACAANgIMDAELIARBAEEZIANBAXZrIANBH0YbdCEDIAUoAgAhAgJAA0AgAiIFKAIEQXhxIARGDQEgA0EddiECIANBAXQhAyAFIAJBBHFqQRBqIgYoAgAiAg0ACyAGIAA2AgAgACAFNgIYIAAgADYCDCAAIAA2AggMAQsgBSgCCCIDIAA2AgwgBSAANgIIIABBADYCGCAAIAU2AgwgACADNgIICyAIQQhqIQMMAQsCQCAKRQ0AAkACQCAAIAAoAhwiBUECdEG40oCAAGoiAygCAEcNACADIAg2AgAgCA0BQQAgCUF+IAV3cTYCjNCAgAAMAgsgCkEQQRQgCigCECAARhtqIAg2AgAgCEUNAQsgCCAKNgIYAkAgACgCECIDRQ0AIAggAzYCECADIAg2AhgLIABBFGooAgAiA0UNACAIQRRqIAM2AgAgAyAINgIYCwJAAkAgBEEPSw0AIAAgBCACaiIDQQNyNgIEIAAgA2oiAyADKAIEQQFyNgIEDAELIAAgAmoiBSAEQQFyNgIEIAAgAkEDcjYCBCAFIARqIAQ2AgACQCAHRQ0AIAdBeHFBsNCAgABqIQJBACgCnNCAgAAhAwJAAkBBASAHQQN2dCIIIAZxDQBBACAIIAZyNgKI0ICAACACIQgMAQsgAigCCCEICyAIIAM2AgwgAiADNgIIIAMgAjYCDCADIAg2AggLQQAgBTYCnNCAgABBACAENgKQ0ICAAAsgAEEIaiEDCyABQRBqJICAgIAAIAMLCgAgABDJgICAAAviDQEHfwJAIABFDQAgAEF4aiIBIABBfGooAgAiAkF4cSIAaiEDAkAgAkEBcQ0AIAJBA3FFDQEgASABKAIAIgJrIgFBACgCmNCAgAAiBEkNASACIABqIQACQCABQQAoApzQgIAARg0AAkAgAkH/AUsNACABKAIIIgQgAkEDdiIFQQN0QbDQgIAAaiIGRhoCQCABKAIMIgIgBEcNAEEAQQAoAojQgIAAQX4gBXdxNgKI0ICAAAwDCyACIAZGGiACIAQ2AgggBCACNgIMDAILIAEoAhghBwJAAkAgASgCDCIGIAFGDQAgASgCCCICIARJGiAGIAI2AgggAiAGNgIMDAELAkAgAUEUaiICKAIAIgQNACABQRBqIgIoAgAiBA0AQQAhBgwBCwNAIAIhBSAEIgZBFGoiAigCACIEDQAgBkEQaiECIAYoAhAiBA0ACyAFQQA2AgALIAdFDQECQAJAIAEgASgCHCIEQQJ0QbjSgIAAaiICKAIARw0AIAIgBjYCACAGDQFBAEEAKAKM0ICAAEF+IAR3cTYCjNCAgAAMAwsgB0EQQRQgBygCECABRhtqIAY2AgAgBkUNAgsgBiAHNgIYAkAgASgCECICRQ0AIAYgAjYCECACIAY2AhgLIAEoAhQiAkUNASAGQRRqIAI2AgAgAiAGNgIYDAELIAMoAgQiAkEDcUEDRw0AIAMgAkF+cTYCBEEAIAA2ApDQgIAAIAEgAGogADYCACABIABBAXI2AgQPCyABIANPDQAgAygCBCICQQFxRQ0AAkACQCACQQJxDQACQCADQQAoAqDQgIAARw0AQQAgATYCoNCAgABBAEEAKAKU0ICAACAAaiIANgKU0ICAACABIABBAXI2AgQgAUEAKAKc0ICAAEcNA0EAQQA2ApDQgIAAQQBBADYCnNCAgAAPCwJAIANBACgCnNCAgABHDQBBACABNgKc0ICAAEEAQQAoApDQgIAAIABqIgA2ApDQgIAAIAEgAEEBcjYCBCABIABqIAA2AgAPCyACQXhxIABqIQACQAJAIAJB/wFLDQAgAygCCCIEIAJBA3YiBUEDdEGw0ICAAGoiBkYaAkAgAygCDCICIARHDQBBAEEAKAKI0ICAAEF+IAV3cTYCiNCAgAAMAgsgAiAGRhogAiAENgIIIAQgAjYCDAwBCyADKAIYIQcCQAJAIAMoAgwiBiADRg0AIAMoAggiAkEAKAKY0ICAAEkaIAYgAjYCCCACIAY2AgwMAQsCQCADQRRqIgIoAgAiBA0AIANBEGoiAigCACIEDQBBACEGDAELA0AgAiEFIAQiBkEUaiICKAIAIgQNACAGQRBqIQIgBigCECIEDQALIAVBADYCAAsgB0UNAAJAAkAgAyADKAIcIgRBAnRBuNKAgABqIgIoAgBHDQAgAiAGNgIAIAYNAUEAQQAoAozQgIAAQX4gBHdxNgKM0ICAAAwCCyAHQRBBFCAHKAIQIANGG2ogBjYCACAGRQ0BCyAGIAc2AhgCQCADKAIQIgJFDQAgBiACNgIQIAIgBjYCGAsgAygCFCICRQ0AIAZBFGogAjYCACACIAY2AhgLIAEgAGogADYCACABIABBAXI2AgQgAUEAKAKc0ICAAEcNAUEAIAA2ApDQgIAADwsgAyACQX5xNgIEIAEgAGogADYCACABIABBAXI2AgQLAkAgAEH/AUsNACAAQXhxQbDQgIAAaiECAkACQEEAKAKI0ICAACIEQQEgAEEDdnQiAHENAEEAIAQgAHI2AojQgIAAIAIhAAwBCyACKAIIIQALIAAgATYCDCACIAE2AgggASACNgIMIAEgADYCCA8LQR8hAgJAIABB////B0sNACAAQQh2IgIgAkGA/j9qQRB2QQhxIgJ0IgQgBEGA4B9qQRB2QQRxIgR0IgYgBkGAgA9qQRB2QQJxIgZ0QQ92IAIgBHIgBnJrIgJBAXQgACACQRVqdkEBcXJBHGohAgsgASACNgIcIAFCADcCECACQQJ0QbjSgIAAaiEEAkACQEEAKAKM0ICAACIGQQEgAnQiA3ENACAEIAE2AgBBACAGIANyNgKM0ICAACABIAQ2AhggASABNgIIIAEgATYCDAwBCyAAQQBBGSACQQF2ayACQR9GG3QhAiAEKAIAIQYCQANAIAYiBCgCBEF4cSAARg0BIAJBHXYhBiACQQF0IQIgBCAGQQRxakEQaiIDKAIAIgYNAAsgAyABNgIAIAEgBDYCGCABIAE2AgwgASABNgIIDAELIAQoAggiACABNgIMIAQgATYCCCABQQA2AhggASAENgIMIAEgADYCCAtBAEEAKAKo0ICAAEF/aiIBQX8gARs2AqjQgIAACwsEAAAAC04AAkAgAA0APwBBEHQPCwJAIABB//8DcQ0AIABBf0wNAAJAIABBEHZAACIAQX9HDQBBAEEwNgL404CAAEF/DwsgAEEQdA8LEMqAgIAAAAvyAgIDfwF+AkAgAkUNACAAIAE6AAAgAiAAaiIDQX9qIAE6AAAgAkEDSQ0AIAAgAToAAiAAIAE6AAEgA0F9aiABOgAAIANBfmogAToAACACQQdJDQAgACABOgADIANBfGogAToAACACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiATYCACADIAIgBGtBfHEiBGoiAkF8aiABNgIAIARBCUkNACADIAE2AgggAyABNgIEIAJBeGogATYCACACQXRqIAE2AgAgBEEZSQ0AIAMgATYCGCADIAE2AhQgAyABNgIQIAMgATYCDCACQXBqIAE2AgAgAkFsaiABNgIAIAJBaGogATYCACACQWRqIAE2AgAgBCADQQRxQRhyIgVrIgJBIEkNACABrUKBgICAEH4hBiADIAVqIQEDQCABIAY3AxggASAGNwMQIAEgBjcDCCABIAY3AwAgAUEgaiEBIAJBYGoiAkEfSw0ACwsgAAsLjkgBAEGACAuGSAEAAAACAAAAAwAAAAAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAYAAAAHAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==' + + +/***/ }), + +/***/ 172: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.enumToMap = void 0; +function enumToMap(obj) { + const res = {}; + Object.keys(obj).forEach((key) => { + const value = obj[key]; + if (typeof value === 'number') { + res[key] = value; + } + }); + return res; +} +exports.enumToMap = enumToMap; +//# sourceMappingURL=utils.js.map + +/***/ }), + +/***/ 7501: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { kClients } = __nccwpck_require__(6443) +const Agent = __nccwpck_require__(9965) +const { + kAgent, + kMockAgentSet, + kMockAgentGet, + kDispatches, + kIsMockActive, + kNetConnect, + kGetNetConnect, + kOptions, + kFactory +} = __nccwpck_require__(1117) +const MockClient = __nccwpck_require__(7365) +const MockPool = __nccwpck_require__(4004) +const { matchValue, buildMockOptions } = __nccwpck_require__(3397) +const { InvalidArgumentError, UndiciError } = __nccwpck_require__(8707) +const Dispatcher = __nccwpck_require__(992) +const Pluralizer = __nccwpck_require__(1529) +const PendingInterceptorsFormatter = __nccwpck_require__(6142) + +class FakeWeakRef { + constructor (value) { + this.value = value + } + + deref () { + return this.value + } +} + +class MockAgent extends Dispatcher { + constructor (opts) { + super(opts) + + this[kNetConnect] = true + this[kIsMockActive] = true + + // Instantiate Agent and encapsulate + if ((opts && opts.agent && typeof opts.agent.dispatch !== 'function')) { + throw new InvalidArgumentError('Argument opts.agent must implement Agent') + } + const agent = opts && opts.agent ? opts.agent : new Agent(opts) + this[kAgent] = agent + + this[kClients] = agent[kClients] + this[kOptions] = buildMockOptions(opts) + } + + get (origin) { + let dispatcher = this[kMockAgentGet](origin) + + if (!dispatcher) { + dispatcher = this[kFactory](origin) + this[kMockAgentSet](origin, dispatcher) + } + return dispatcher + } + + dispatch (opts, handler) { + // Call MockAgent.get to perform additional setup before dispatching as normal + this.get(opts.origin) + return this[kAgent].dispatch(opts, handler) + } + + async close () { + await this[kAgent].close() + this[kClients].clear() + } + + deactivate () { + this[kIsMockActive] = false + } + + activate () { + this[kIsMockActive] = true + } + + enableNetConnect (matcher) { + if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) { + if (Array.isArray(this[kNetConnect])) { + this[kNetConnect].push(matcher) + } else { + this[kNetConnect] = [matcher] + } + } else if (typeof matcher === 'undefined') { + this[kNetConnect] = true + } else { + throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.') + } + } + + disableNetConnect () { + this[kNetConnect] = false + } + + // This is required to bypass issues caused by using global symbols - see: + // https://github.com/nodejs/undici/issues/1447 + get isMockActive () { + return this[kIsMockActive] + } + + [kMockAgentSet] (origin, dispatcher) { + this[kClients].set(origin, new FakeWeakRef(dispatcher)) + } + + [kFactory] (origin) { + const mockOptions = Object.assign({ agent: this }, this[kOptions]) + return this[kOptions] && this[kOptions].connections === 1 + ? new MockClient(origin, mockOptions) + : new MockPool(origin, mockOptions) + } + + [kMockAgentGet] (origin) { + // First check if we can immediately find it + const ref = this[kClients].get(origin) + if (ref) { + return ref.deref() + } + + // If the origin is not a string create a dummy parent pool and return to user + if (typeof origin !== 'string') { + const dispatcher = this[kFactory]('http://localhost:9999') + this[kMockAgentSet](origin, dispatcher) + return dispatcher + } + + // If we match, create a pool and assign the same dispatches + for (const [keyMatcher, nonExplicitRef] of Array.from(this[kClients])) { + const nonExplicitDispatcher = nonExplicitRef.deref() + if (nonExplicitDispatcher && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) { + const dispatcher = this[kFactory](origin) + this[kMockAgentSet](origin, dispatcher) + dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches] + return dispatcher + } + } + } + + [kGetNetConnect] () { + return this[kNetConnect] + } + + pendingInterceptors () { + const mockAgentClients = this[kClients] + + return Array.from(mockAgentClients.entries()) + .flatMap(([origin, scope]) => scope.deref()[kDispatches].map(dispatch => ({ ...dispatch, origin }))) + .filter(({ pending }) => pending) + } + + assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) { + const pending = this.pendingInterceptors() + + if (pending.length === 0) { + return + } + + const pluralizer = new Pluralizer('interceptor', 'interceptors').pluralize(pending.length) + + throw new UndiciError(` +${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending: + +${pendingInterceptorsFormatter.format(pending)} +`.trim()) + } +} + +module.exports = MockAgent + + +/***/ }), + +/***/ 7365: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { promisify } = __nccwpck_require__(9023) +const Client = __nccwpck_require__(6197) +const { buildMockDispatch } = __nccwpck_require__(3397) +const { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected +} = __nccwpck_require__(1117) +const { MockInterceptor } = __nccwpck_require__(1511) +const Symbols = __nccwpck_require__(6443) +const { InvalidArgumentError } = __nccwpck_require__(8707) + +/** + * MockClient provides an API that extends the Client to influence the mockDispatches. + */ +class MockClient extends Client { + constructor (origin, opts) { + super(origin, opts) + + if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') { + throw new InvalidArgumentError('Argument opts.agent must implement Agent') + } + + this[kMockAgent] = opts.agent + this[kOrigin] = origin + this[kDispatches] = [] + this[kConnected] = 1 + this[kOriginalDispatch] = this.dispatch + this[kOriginalClose] = this.close.bind(this) + + this.dispatch = buildMockDispatch.call(this) + this.close = this[kClose] + } + + get [Symbols.kConnected] () { + return this[kConnected] + } + + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept (opts) { + return new MockInterceptor(opts, this[kDispatches]) + } + + async [kClose] () { + await promisify(this[kOriginalClose])() + this[kConnected] = 0 + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]) + } +} + +module.exports = MockClient + + +/***/ }), + +/***/ 2429: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { UndiciError } = __nccwpck_require__(8707) + +class MockNotMatchedError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, MockNotMatchedError) + this.name = 'MockNotMatchedError' + this.message = message || 'The request does not match any registered mock dispatches' + this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED' + } +} + +module.exports = { + MockNotMatchedError +} + + +/***/ }), + +/***/ 1511: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { getResponseData, buildKey, addMockDispatch } = __nccwpck_require__(3397) +const { + kDispatches, + kDispatchKey, + kDefaultHeaders, + kDefaultTrailers, + kContentLength, + kMockDispatch +} = __nccwpck_require__(1117) +const { InvalidArgumentError } = __nccwpck_require__(8707) +const { buildURL } = __nccwpck_require__(3440) + +/** + * Defines the scope API for an interceptor reply + */ +class MockScope { + constructor (mockDispatch) { + this[kMockDispatch] = mockDispatch + } + + /** + * Delay a reply by a set amount in ms. + */ + delay (waitInMs) { + if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) { + throw new InvalidArgumentError('waitInMs must be a valid integer > 0') + } + + this[kMockDispatch].delay = waitInMs + return this + } + + /** + * For a defined reply, never mark as consumed. + */ + persist () { + this[kMockDispatch].persist = true + return this + } + + /** + * Allow one to define a reply for a set amount of matching requests. + */ + times (repeatTimes) { + if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) { + throw new InvalidArgumentError('repeatTimes must be a valid integer > 0') + } + + this[kMockDispatch].times = repeatTimes + return this + } +} + +/** + * Defines an interceptor for a Mock + */ +class MockInterceptor { + constructor (opts, mockDispatches) { + if (typeof opts !== 'object') { + throw new InvalidArgumentError('opts must be an object') + } + if (typeof opts.path === 'undefined') { + throw new InvalidArgumentError('opts.path must be defined') + } + if (typeof opts.method === 'undefined') { + opts.method = 'GET' + } + // See https://github.com/nodejs/undici/issues/1245 + // As per RFC 3986, clients are not supposed to send URI + // fragments to servers when they retrieve a document, + if (typeof opts.path === 'string') { + if (opts.query) { + opts.path = buildURL(opts.path, opts.query) + } else { + // Matches https://github.com/nodejs/undici/blob/main/lib/fetch/index.js#L1811 + const parsedURL = new URL(opts.path, 'data://') + opts.path = parsedURL.pathname + parsedURL.search + } + } + if (typeof opts.method === 'string') { + opts.method = opts.method.toUpperCase() + } + + this[kDispatchKey] = buildKey(opts) + this[kDispatches] = mockDispatches + this[kDefaultHeaders] = {} + this[kDefaultTrailers] = {} + this[kContentLength] = false + } + + createMockScopeDispatchData (statusCode, data, responseOptions = {}) { + const responseData = getResponseData(data) + const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {} + const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers } + const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers } + + return { statusCode, data, headers, trailers } + } + + validateReplyParameters (statusCode, data, responseOptions) { + if (typeof statusCode === 'undefined') { + throw new InvalidArgumentError('statusCode must be defined') + } + if (typeof data === 'undefined') { + throw new InvalidArgumentError('data must be defined') + } + if (typeof responseOptions !== 'object') { + throw new InvalidArgumentError('responseOptions must be an object') + } + } + + /** + * Mock an undici request with a defined reply. + */ + reply (replyData) { + // Values of reply aren't available right now as they + // can only be available when the reply callback is invoked. + if (typeof replyData === 'function') { + // We'll first wrap the provided callback in another function, + // this function will properly resolve the data from the callback + // when invoked. + const wrappedDefaultsCallback = (opts) => { + // Our reply options callback contains the parameter for statusCode, data and options. + const resolvedData = replyData(opts) + + // Check if it is in the right format + if (typeof resolvedData !== 'object') { + throw new InvalidArgumentError('reply options callback must return an object') + } + + const { statusCode, data = '', responseOptions = {} } = resolvedData + this.validateReplyParameters(statusCode, data, responseOptions) + // Since the values can be obtained immediately we return them + // from this higher order function that will be resolved later. + return { + ...this.createMockScopeDispatchData(statusCode, data, responseOptions) + } + } + + // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data. + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback) + return new MockScope(newMockDispatch) + } + + // We can have either one or three parameters, if we get here, + // we should have 1-3 parameters. So we spread the arguments of + // this function to obtain the parameters, since replyData will always + // just be the statusCode. + const [statusCode, data = '', responseOptions = {}] = [...arguments] + this.validateReplyParameters(statusCode, data, responseOptions) + + // Send in-already provided data like usual + const dispatchData = this.createMockScopeDispatchData(statusCode, data, responseOptions) + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData) + return new MockScope(newMockDispatch) + } + + /** + * Mock an undici request with a defined error. + */ + replyWithError (error) { + if (typeof error === 'undefined') { + throw new InvalidArgumentError('error must be defined') + } + + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }) + return new MockScope(newMockDispatch) + } + + /** + * Set default reply headers on the interceptor for subsequent replies + */ + defaultReplyHeaders (headers) { + if (typeof headers === 'undefined') { + throw new InvalidArgumentError('headers must be defined') + } + + this[kDefaultHeaders] = headers + return this + } + + /** + * Set default reply trailers on the interceptor for subsequent replies + */ + defaultReplyTrailers (trailers) { + if (typeof trailers === 'undefined') { + throw new InvalidArgumentError('trailers must be defined') + } + + this[kDefaultTrailers] = trailers + return this + } + + /** + * Set reply content length header for replies on the interceptor + */ + replyContentLength () { + this[kContentLength] = true + return this + } +} + +module.exports.MockInterceptor = MockInterceptor +module.exports.MockScope = MockScope + + +/***/ }), + +/***/ 4004: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { promisify } = __nccwpck_require__(9023) +const Pool = __nccwpck_require__(5076) +const { buildMockDispatch } = __nccwpck_require__(3397) +const { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected +} = __nccwpck_require__(1117) +const { MockInterceptor } = __nccwpck_require__(1511) +const Symbols = __nccwpck_require__(6443) +const { InvalidArgumentError } = __nccwpck_require__(8707) + +/** + * MockPool provides an API that extends the Pool to influence the mockDispatches. + */ +class MockPool extends Pool { + constructor (origin, opts) { + super(origin, opts) + + if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') { + throw new InvalidArgumentError('Argument opts.agent must implement Agent') + } + + this[kMockAgent] = opts.agent + this[kOrigin] = origin + this[kDispatches] = [] + this[kConnected] = 1 + this[kOriginalDispatch] = this.dispatch + this[kOriginalClose] = this.close.bind(this) + + this.dispatch = buildMockDispatch.call(this) + this.close = this[kClose] + } + + get [Symbols.kConnected] () { + return this[kConnected] + } + + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept (opts) { + return new MockInterceptor(opts, this[kDispatches]) + } + + async [kClose] () { + await promisify(this[kOriginalClose])() + this[kConnected] = 0 + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]) + } +} + +module.exports = MockPool + + +/***/ }), + +/***/ 1117: +/***/ ((module) => { + +"use strict"; + + +module.exports = { + kAgent: Symbol('agent'), + kOptions: Symbol('options'), + kFactory: Symbol('factory'), + kDispatches: Symbol('dispatches'), + kDispatchKey: Symbol('dispatch key'), + kDefaultHeaders: Symbol('default headers'), + kDefaultTrailers: Symbol('default trailers'), + kContentLength: Symbol('content length'), + kMockAgent: Symbol('mock agent'), + kMockAgentSet: Symbol('mock agent set'), + kMockAgentGet: Symbol('mock agent get'), + kMockDispatch: Symbol('mock dispatch'), + kClose: Symbol('close'), + kOriginalClose: Symbol('original agent close'), + kOrigin: Symbol('origin'), + kIsMockActive: Symbol('is mock active'), + kNetConnect: Symbol('net connect'), + kGetNetConnect: Symbol('get net connect'), + kConnected: Symbol('connected') +} + + +/***/ }), + +/***/ 3397: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { MockNotMatchedError } = __nccwpck_require__(2429) +const { + kDispatches, + kMockAgent, + kOriginalDispatch, + kOrigin, + kGetNetConnect +} = __nccwpck_require__(1117) +const { buildURL, nop } = __nccwpck_require__(3440) +const { STATUS_CODES } = __nccwpck_require__(8611) +const { + types: { + isPromise + } +} = __nccwpck_require__(9023) + +function matchValue (match, value) { + if (typeof match === 'string') { + return match === value + } + if (match instanceof RegExp) { + return match.test(value) + } + if (typeof match === 'function') { + return match(value) === true + } + return false +} + +function lowerCaseEntries (headers) { + return Object.fromEntries( + Object.entries(headers).map(([headerName, headerValue]) => { + return [headerName.toLocaleLowerCase(), headerValue] + }) + ) +} + +/** + * @param {import('../../index').Headers|string[]|Record} headers + * @param {string} key + */ +function getHeaderByName (headers, key) { + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) { + return headers[i + 1] + } + } + + return undefined + } else if (typeof headers.get === 'function') { + return headers.get(key) + } else { + return lowerCaseEntries(headers)[key.toLocaleLowerCase()] + } +} + +/** @param {string[]} headers */ +function buildHeadersFromArray (headers) { // fetch HeadersList + const clone = headers.slice() + const entries = [] + for (let index = 0; index < clone.length; index += 2) { + entries.push([clone[index], clone[index + 1]]) + } + return Object.fromEntries(entries) +} + +function matchHeaders (mockDispatch, headers) { + if (typeof mockDispatch.headers === 'function') { + if (Array.isArray(headers)) { // fetch HeadersList + headers = buildHeadersFromArray(headers) + } + return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {}) + } + if (typeof mockDispatch.headers === 'undefined') { + return true + } + if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') { + return false + } + + for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) { + const headerValue = getHeaderByName(headers, matchHeaderName) + + if (!matchValue(matchHeaderValue, headerValue)) { + return false + } + } + return true +} + +function safeUrl (path) { + if (typeof path !== 'string') { + return path + } + + const pathSegments = path.split('?') + + if (pathSegments.length !== 2) { + return path + } + + const qp = new URLSearchParams(pathSegments.pop()) + qp.sort() + return [...pathSegments, qp.toString()].join('?') +} + +function matchKey (mockDispatch, { path, method, body, headers }) { + const pathMatch = matchValue(mockDispatch.path, path) + const methodMatch = matchValue(mockDispatch.method, method) + const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true + const headersMatch = matchHeaders(mockDispatch, headers) + return pathMatch && methodMatch && bodyMatch && headersMatch +} + +function getResponseData (data) { + if (Buffer.isBuffer(data)) { + return data + } else if (typeof data === 'object') { + return JSON.stringify(data) + } else { + return data.toString() + } +} + +function getMockDispatch (mockDispatches, key) { + const basePath = key.query ? buildURL(key.path, key.query) : key.path + const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath + + // Match path + let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path }) => matchValue(safeUrl(path), resolvedPath)) + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`) + } + + // Match method + matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)) + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}'`) + } + + // Match body + matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true) + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}'`) + } + + // Match headers + matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers)) + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for headers '${typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers}'`) + } + + return matchedMockDispatches[0] +} + +function addMockDispatch (mockDispatches, key, data) { + const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false } + const replyData = typeof data === 'function' ? { callback: data } : { ...data } + const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } } + mockDispatches.push(newMockDispatch) + return newMockDispatch +} + +function deleteMockDispatch (mockDispatches, key) { + const index = mockDispatches.findIndex(dispatch => { + if (!dispatch.consumed) { + return false + } + return matchKey(dispatch, key) + }) + if (index !== -1) { + mockDispatches.splice(index, 1) + } +} + +function buildKey (opts) { + const { path, method, body, headers, query } = opts + return { + path, + method, + body, + headers, + query + } +} + +function generateKeyValues (data) { + return Object.entries(data).reduce((keyValuePairs, [key, value]) => [ + ...keyValuePairs, + Buffer.from(`${key}`), + Array.isArray(value) ? value.map(x => Buffer.from(`${x}`)) : Buffer.from(`${value}`) + ], []) +} + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status + * @param {number} statusCode + */ +function getStatusText (statusCode) { + return STATUS_CODES[statusCode] || 'unknown' +} + +async function getResponse (body) { + const buffers = [] + for await (const data of body) { + buffers.push(data) + } + return Buffer.concat(buffers).toString('utf8') +} + +/** + * Mock dispatch function used to simulate undici dispatches + */ +function mockDispatch (opts, handler) { + // Get mock dispatch from built key + const key = buildKey(opts) + const mockDispatch = getMockDispatch(this[kDispatches], key) + + mockDispatch.timesInvoked++ + + // Here's where we resolve a callback if a callback is present for the dispatch data. + if (mockDispatch.data.callback) { + mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) } + } + + // Parse mockDispatch data + const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch + const { timesInvoked, times } = mockDispatch + + // If it's used up and not persistent, mark as consumed + mockDispatch.consumed = !persist && timesInvoked >= times + mockDispatch.pending = timesInvoked < times + + // If specified, trigger dispatch error + if (error !== null) { + deleteMockDispatch(this[kDispatches], key) + handler.onError(error) + return true + } + + // Handle the request with a delay if necessary + if (typeof delay === 'number' && delay > 0) { + setTimeout(() => { + handleReply(this[kDispatches]) + }, delay) + } else { + handleReply(this[kDispatches]) + } + + function handleReply (mockDispatches, _data = data) { + // fetch's HeadersList is a 1D string array + const optsHeaders = Array.isArray(opts.headers) + ? buildHeadersFromArray(opts.headers) + : opts.headers + const body = typeof _data === 'function' + ? _data({ ...opts, headers: optsHeaders }) + : _data + + // util.types.isPromise is likely needed for jest. + if (isPromise(body)) { + // If handleReply is asynchronous, throwing an error + // in the callback will reject the promise, rather than + // synchronously throw the error, which breaks some tests. + // Rather, we wait for the callback to resolve if it is a + // promise, and then re-run handleReply with the new body. + body.then((newData) => handleReply(mockDispatches, newData)) + return + } + + const responseData = getResponseData(body) + const responseHeaders = generateKeyValues(headers) + const responseTrailers = generateKeyValues(trailers) + + handler.abort = nop + handler.onHeaders(statusCode, responseHeaders, resume, getStatusText(statusCode)) + handler.onData(Buffer.from(responseData)) + handler.onComplete(responseTrailers) + deleteMockDispatch(mockDispatches, key) + } + + function resume () {} + + return true +} + +function buildMockDispatch () { + const agent = this[kMockAgent] + const origin = this[kOrigin] + const originalDispatch = this[kOriginalDispatch] + + return function dispatch (opts, handler) { + if (agent.isMockActive) { + try { + mockDispatch.call(this, opts, handler) + } catch (error) { + if (error instanceof MockNotMatchedError) { + const netConnect = agent[kGetNetConnect]() + if (netConnect === false) { + throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`) + } + if (checkNetConnect(netConnect, origin)) { + originalDispatch.call(this, opts, handler) + } else { + throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`) + } + } else { + throw error + } + } + } else { + originalDispatch.call(this, opts, handler) + } + } +} + +function checkNetConnect (netConnect, origin) { + const url = new URL(origin) + if (netConnect === true) { + return true + } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) { + return true + } + return false +} + +function buildMockOptions (opts) { + if (opts) { + const { agent, ...mockOptions } = opts + return mockOptions + } +} + +module.exports = { + getResponseData, + getMockDispatch, + addMockDispatch, + deleteMockDispatch, + buildKey, + generateKeyValues, + matchValue, + getResponse, + getStatusText, + mockDispatch, + buildMockDispatch, + checkNetConnect, + buildMockOptions, + getHeaderByName +} + + +/***/ }), + +/***/ 6142: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { Transform } = __nccwpck_require__(2203) +const { Console } = __nccwpck_require__(4236) + +/** + * Gets the output of `console.table(…)` as a string. + */ +module.exports = class PendingInterceptorsFormatter { + constructor ({ disableColors } = {}) { + this.transform = new Transform({ + transform (chunk, _enc, cb) { + cb(null, chunk) + } + }) + + this.logger = new Console({ + stdout: this.transform, + inspectOptions: { + colors: !disableColors && !process.env.CI + } + }) + } + + format (pendingInterceptors) { + const withPrettyHeaders = pendingInterceptors.map( + ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ + Method: method, + Origin: origin, + Path: path, + 'Status code': statusCode, + Persistent: persist ? '✅' : '❌', + Invocations: timesInvoked, + Remaining: persist ? Infinity : times - timesInvoked + })) + + this.logger.table(withPrettyHeaders) + return this.transform.read().toString() + } +} + + +/***/ }), + +/***/ 1529: +/***/ ((module) => { + +"use strict"; + + +const singulars = { + pronoun: 'it', + is: 'is', + was: 'was', + this: 'this' +} + +const plurals = { + pronoun: 'they', + is: 'are', + was: 'were', + this: 'these' +} + +module.exports = class Pluralizer { + constructor (singular, plural) { + this.singular = singular + this.plural = plural + } + + pluralize (count) { + const one = count === 1 + const keys = one ? singulars : plurals + const noun = one ? this.singular : this.plural + return { ...keys, count, noun } + } +} + + +/***/ }), + +/***/ 4869: +/***/ ((module) => { + +"use strict"; +/* eslint-disable */ + + + +// Extracted from node/lib/internal/fixed_queue.js + +// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two. +const kSize = 2048; +const kMask = kSize - 1; + +// The FixedQueue is implemented as a singly-linked list of fixed-size +// circular buffers. It looks something like this: +// +// head tail +// | | +// v v +// +-----------+ <-----\ +-----------+ <------\ +-----------+ +// | [null] | \----- | next | \------- | next | +// +-----------+ +-----------+ +-----------+ +// | item | <-- bottom | item | <-- bottom | [empty] | +// | item | | item | | [empty] | +// | item | | item | | [empty] | +// | item | | item | | [empty] | +// | item | | item | bottom --> | item | +// | item | | item | | item | +// | ... | | ... | | ... | +// | item | | item | | item | +// | item | | item | | item | +// | [empty] | <-- top | item | | item | +// | [empty] | | item | | item | +// | [empty] | | [empty] | <-- top top --> | [empty] | +// +-----------+ +-----------+ +-----------+ +// +// Or, if there is only one circular buffer, it looks something +// like either of these: +// +// head tail head tail +// | | | | +// v v v v +// +-----------+ +-----------+ +// | [null] | | [null] | +// +-----------+ +-----------+ +// | [empty] | | item | +// | [empty] | | item | +// | item | <-- bottom top --> | [empty] | +// | item | | [empty] | +// | [empty] | <-- top bottom --> | item | +// | [empty] | | item | +// +-----------+ +-----------+ +// +// Adding a value means moving `top` forward by one, removing means +// moving `bottom` forward by one. After reaching the end, the queue +// wraps around. +// +// When `top === bottom` the current queue is empty and when +// `top + 1 === bottom` it's full. This wastes a single space of storage +// but allows much quicker checks. + +class FixedCircularBuffer { + constructor() { + this.bottom = 0; + this.top = 0; + this.list = new Array(kSize); + this.next = null; + } + + isEmpty() { + return this.top === this.bottom; + } + + isFull() { + return ((this.top + 1) & kMask) === this.bottom; + } + + push(data) { + this.list[this.top] = data; + this.top = (this.top + 1) & kMask; + } + + shift() { + const nextItem = this.list[this.bottom]; + if (nextItem === undefined) + return null; + this.list[this.bottom] = undefined; + this.bottom = (this.bottom + 1) & kMask; + return nextItem; + } +} + +module.exports = class FixedQueue { + constructor() { + this.head = this.tail = new FixedCircularBuffer(); + } + + isEmpty() { + return this.head.isEmpty(); + } + + push(data) { + if (this.head.isFull()) { + // Head is full: Creates a new queue, sets the old queue's `.next` to it, + // and sets it as the new main queue. + this.head = this.head.next = new FixedCircularBuffer(); + } + this.head.push(data); + } + + shift() { + const tail = this.tail; + const next = tail.shift(); + if (tail.isEmpty() && tail.next !== null) { + // If there is another queue, it forms the new tail. + this.tail = tail.next; + } + return next; + } +}; + + +/***/ }), + +/***/ 8640: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const DispatcherBase = __nccwpck_require__(1) +const FixedQueue = __nccwpck_require__(4869) +const { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = __nccwpck_require__(6443) +const PoolStats = __nccwpck_require__(4622) + +const kClients = Symbol('clients') +const kNeedDrain = Symbol('needDrain') +const kQueue = Symbol('queue') +const kClosedResolve = Symbol('closed resolve') +const kOnDrain = Symbol('onDrain') +const kOnConnect = Symbol('onConnect') +const kOnDisconnect = Symbol('onDisconnect') +const kOnConnectionError = Symbol('onConnectionError') +const kGetDispatcher = Symbol('get dispatcher') +const kAddClient = Symbol('add client') +const kRemoveClient = Symbol('remove client') +const kStats = Symbol('stats') + +class PoolBase extends DispatcherBase { + constructor () { + super() + + this[kQueue] = new FixedQueue() + this[kClients] = [] + this[kQueued] = 0 + + const pool = this + + this[kOnDrain] = function onDrain (origin, targets) { + const queue = pool[kQueue] + + let needDrain = false + + while (!needDrain) { + const item = queue.shift() + if (!item) { + break + } + pool[kQueued]-- + needDrain = !this.dispatch(item.opts, item.handler) + } + + this[kNeedDrain] = needDrain + + if (!this[kNeedDrain] && pool[kNeedDrain]) { + pool[kNeedDrain] = false + pool.emit('drain', origin, [pool, ...targets]) + } + + if (pool[kClosedResolve] && queue.isEmpty()) { + Promise + .all(pool[kClients].map(c => c.close())) + .then(pool[kClosedResolve]) + } + } + + this[kOnConnect] = (origin, targets) => { + pool.emit('connect', origin, [pool, ...targets]) + } + + this[kOnDisconnect] = (origin, targets, err) => { + pool.emit('disconnect', origin, [pool, ...targets], err) + } + + this[kOnConnectionError] = (origin, targets, err) => { + pool.emit('connectionError', origin, [pool, ...targets], err) + } + + this[kStats] = new PoolStats(this) + } + + get [kBusy] () { + return this[kNeedDrain] + } + + get [kConnected] () { + return this[kClients].filter(client => client[kConnected]).length + } + + get [kFree] () { + return this[kClients].filter(client => client[kConnected] && !client[kNeedDrain]).length + } + + get [kPending] () { + let ret = this[kQueued] + for (const { [kPending]: pending } of this[kClients]) { + ret += pending + } + return ret + } + + get [kRunning] () { + let ret = 0 + for (const { [kRunning]: running } of this[kClients]) { + ret += running + } + return ret + } + + get [kSize] () { + let ret = this[kQueued] + for (const { [kSize]: size } of this[kClients]) { + ret += size + } + return ret + } + + get stats () { + return this[kStats] + } + + async [kClose] () { + if (this[kQueue].isEmpty()) { + return Promise.all(this[kClients].map(c => c.close())) + } else { + return new Promise((resolve) => { + this[kClosedResolve] = resolve + }) + } + } + + async [kDestroy] (err) { + while (true) { + const item = this[kQueue].shift() + if (!item) { + break + } + item.handler.onError(err) + } + + return Promise.all(this[kClients].map(c => c.destroy(err))) + } + + [kDispatch] (opts, handler) { + const dispatcher = this[kGetDispatcher]() + + if (!dispatcher) { + this[kNeedDrain] = true + this[kQueue].push({ opts, handler }) + this[kQueued]++ + } else if (!dispatcher.dispatch(opts, handler)) { + dispatcher[kNeedDrain] = true + this[kNeedDrain] = !this[kGetDispatcher]() + } + + return !this[kNeedDrain] + } + + [kAddClient] (client) { + client + .on('drain', this[kOnDrain]) + .on('connect', this[kOnConnect]) + .on('disconnect', this[kOnDisconnect]) + .on('connectionError', this[kOnConnectionError]) + + this[kClients].push(client) + + if (this[kNeedDrain]) { + process.nextTick(() => { + if (this[kNeedDrain]) { + this[kOnDrain](client[kUrl], [this, client]) + } + }) + } + + return this + } + + [kRemoveClient] (client) { + client.close(() => { + const idx = this[kClients].indexOf(client) + if (idx !== -1) { + this[kClients].splice(idx, 1) + } + }) + + this[kNeedDrain] = this[kClients].some(dispatcher => ( + !dispatcher[kNeedDrain] && + dispatcher.closed !== true && + dispatcher.destroyed !== true + )) + } +} + +module.exports = { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher +} + + +/***/ }), + +/***/ 4622: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const { kFree, kConnected, kPending, kQueued, kRunning, kSize } = __nccwpck_require__(6443) +const kPool = Symbol('pool') + +class PoolStats { + constructor (pool) { + this[kPool] = pool + } + + get connected () { + return this[kPool][kConnected] + } + + get free () { + return this[kPool][kFree] + } + + get pending () { + return this[kPool][kPending] + } + + get queued () { + return this[kPool][kQueued] + } + + get running () { + return this[kPool][kRunning] + } + + get size () { + return this[kPool][kSize] + } +} + +module.exports = PoolStats + + +/***/ }), + +/***/ 5076: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kGetDispatcher +} = __nccwpck_require__(8640) +const Client = __nccwpck_require__(6197) +const { + InvalidArgumentError +} = __nccwpck_require__(8707) +const util = __nccwpck_require__(3440) +const { kUrl, kInterceptors } = __nccwpck_require__(6443) +const buildConnector = __nccwpck_require__(9136) + +const kOptions = Symbol('options') +const kConnections = Symbol('connections') +const kFactory = Symbol('factory') + +function defaultFactory (origin, opts) { + return new Client(origin, opts) +} + +class Pool extends PoolBase { + constructor (origin, { + connections, + factory = defaultFactory, + connect, + connectTimeout, + tls, + maxCachedSessions, + socketPath, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + allowH2, + ...options + } = {}) { + super() + + if (connections != null && (!Number.isFinite(connections) || connections < 0)) { + throw new InvalidArgumentError('invalid connections') + } + + if (typeof factory !== 'function') { + throw new InvalidArgumentError('factory must be a function.') + } + + if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { + throw new InvalidArgumentError('connect must be a function or an object') + } + + if (typeof connect !== 'function') { + connect = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined), + ...connect + }) + } + + this[kInterceptors] = options.interceptors && options.interceptors.Pool && Array.isArray(options.interceptors.Pool) + ? options.interceptors.Pool + : [] + this[kConnections] = connections || null + this[kUrl] = util.parseOrigin(origin) + this[kOptions] = { ...util.deepClone(options), connect, allowH2 } + this[kOptions].interceptors = options.interceptors + ? { ...options.interceptors } + : undefined + this[kFactory] = factory + } + + [kGetDispatcher] () { + let dispatcher = this[kClients].find(dispatcher => !dispatcher[kNeedDrain]) + + if (dispatcher) { + return dispatcher + } + + if (!this[kConnections] || this[kClients].length < this[kConnections]) { + dispatcher = this[kFactory](this[kUrl], this[kOptions]) + this[kAddClient](dispatcher) + } + + return dispatcher + } +} + +module.exports = Pool + + +/***/ }), + +/***/ 2720: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { kProxy, kClose, kDestroy, kInterceptors } = __nccwpck_require__(6443) +const { URL } = __nccwpck_require__(7016) +const Agent = __nccwpck_require__(9965) +const Pool = __nccwpck_require__(5076) +const DispatcherBase = __nccwpck_require__(1) +const { InvalidArgumentError, RequestAbortedError } = __nccwpck_require__(8707) +const buildConnector = __nccwpck_require__(9136) + +const kAgent = Symbol('proxy agent') +const kClient = Symbol('proxy client') +const kProxyHeaders = Symbol('proxy headers') +const kRequestTls = Symbol('request tls settings') +const kProxyTls = Symbol('proxy tls settings') +const kConnectEndpoint = Symbol('connect endpoint function') + +function defaultProtocolPort (protocol) { + return protocol === 'https:' ? 443 : 80 +} + +function buildProxyOptions (opts) { + if (typeof opts === 'string') { + opts = { uri: opts } + } + + if (!opts || !opts.uri) { + throw new InvalidArgumentError('Proxy opts.uri is mandatory') + } + + return { + uri: opts.uri, + protocol: opts.protocol || 'https' + } +} + +function defaultFactory (origin, opts) { + return new Pool(origin, opts) +} + +class ProxyAgent extends DispatcherBase { + constructor (opts) { + super(opts) + this[kProxy] = buildProxyOptions(opts) + this[kAgent] = new Agent(opts) + this[kInterceptors] = opts.interceptors && opts.interceptors.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) + ? opts.interceptors.ProxyAgent + : [] + + if (typeof opts === 'string') { + opts = { uri: opts } + } + + if (!opts || !opts.uri) { + throw new InvalidArgumentError('Proxy opts.uri is mandatory') + } + + const { clientFactory = defaultFactory } = opts + + if (typeof clientFactory !== 'function') { + throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.') + } + + this[kRequestTls] = opts.requestTls + this[kProxyTls] = opts.proxyTls + this[kProxyHeaders] = opts.headers || {} + + const resolvedUrl = new URL(opts.uri) + const { origin, port, host, username, password } = resolvedUrl + + if (opts.auth && opts.token) { + throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token') + } else if (opts.auth) { + /* @deprecated in favour of opts.token */ + this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}` + } else if (opts.token) { + this[kProxyHeaders]['proxy-authorization'] = opts.token + } else if (username && password) { + this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}` + } + + const connect = buildConnector({ ...opts.proxyTls }) + this[kConnectEndpoint] = buildConnector({ ...opts.requestTls }) + this[kClient] = clientFactory(resolvedUrl, { connect }) + this[kAgent] = new Agent({ + ...opts, + connect: async (opts, callback) => { + let requestedHost = opts.host + if (!opts.port) { + requestedHost += `:${defaultProtocolPort(opts.protocol)}` + } + try { + const { socket, statusCode } = await this[kClient].connect({ + origin, + port, + path: requestedHost, + signal: opts.signal, + headers: { + ...this[kProxyHeaders], + host + } + }) + if (statusCode !== 200) { + socket.on('error', () => {}).destroy() + callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)) + } + if (opts.protocol !== 'https:') { + callback(null, socket) + return + } + let servername + if (this[kRequestTls]) { + servername = this[kRequestTls].servername + } else { + servername = opts.servername + } + this[kConnectEndpoint]({ ...opts, servername, httpSocket: socket }, callback) + } catch (err) { + callback(err) + } + } + }) + } + + dispatch (opts, handler) { + const { host } = new URL(opts.origin) + const headers = buildHeaders(opts.headers) + throwIfProxyAuthIsSent(headers) + return this[kAgent].dispatch( + { + ...opts, + headers: { + ...headers, + host + } + }, + handler + ) + } + + async [kClose] () { + await this[kAgent].close() + await this[kClient].close() + } + + async [kDestroy] () { + await this[kAgent].destroy() + await this[kClient].destroy() + } +} + +/** + * @param {string[] | Record} headers + * @returns {Record} + */ +function buildHeaders (headers) { + // When using undici.fetch, the headers list is stored + // as an array. + if (Array.isArray(headers)) { + /** @type {Record} */ + const headersPair = {} + + for (let i = 0; i < headers.length; i += 2) { + headersPair[headers[i]] = headers[i + 1] + } + + return headersPair + } + + return headers +} + +/** + * @param {Record} headers + * + * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers + * Nevertheless, it was changed and to avoid a security vulnerability by end users + * this check was created. + * It should be removed in the next major version for performance reasons + */ +function throwIfProxyAuthIsSent (headers) { + const existProxyAuth = headers && Object.keys(headers) + .find((key) => key.toLowerCase() === 'proxy-authorization') + if (existProxyAuth) { + throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor') + } +} + +module.exports = ProxyAgent + + +/***/ }), + +/***/ 8804: +/***/ ((module) => { + +"use strict"; + + +let fastNow = Date.now() +let fastNowTimeout + +const fastTimers = [] + +function onTimeout () { + fastNow = Date.now() + + let len = fastTimers.length + let idx = 0 + while (idx < len) { + const timer = fastTimers[idx] + + if (timer.state === 0) { + timer.state = fastNow + timer.delay + } else if (timer.state > 0 && fastNow >= timer.state) { + timer.state = -1 + timer.callback(timer.opaque) + } + + if (timer.state === -1) { + timer.state = -2 + if (idx !== len - 1) { + fastTimers[idx] = fastTimers.pop() + } else { + fastTimers.pop() + } + len -= 1 + } else { + idx += 1 + } + } + + if (fastTimers.length > 0) { + refreshTimeout() + } +} + +function refreshTimeout () { + if (fastNowTimeout && fastNowTimeout.refresh) { + fastNowTimeout.refresh() + } else { + clearTimeout(fastNowTimeout) + fastNowTimeout = setTimeout(onTimeout, 1e3) + if (fastNowTimeout.unref) { + fastNowTimeout.unref() + } + } +} + +class Timeout { + constructor (callback, delay, opaque) { + this.callback = callback + this.delay = delay + this.opaque = opaque + + // -2 not in timer list + // -1 in timer list but inactive + // 0 in timer list waiting for time + // > 0 in timer list waiting for time to expire + this.state = -2 + + this.refresh() + } + + refresh () { + if (this.state === -2) { + fastTimers.push(this) + if (!fastNowTimeout || fastTimers.length === 1) { + refreshTimeout() + } + } + + this.state = 0 + } + + clear () { + this.state = -1 + } +} + +module.exports = { + setTimeout (callback, delay, opaque) { + return delay < 1e3 + ? setTimeout(callback, delay, opaque) + : new Timeout(callback, delay, opaque) + }, + clearTimeout (timeout) { + if (timeout instanceof Timeout) { + timeout.clear() + } else { + clearTimeout(timeout) + } + } +} + + +/***/ }), + +/***/ 8550: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const diagnosticsChannel = __nccwpck_require__(1637) +const { uid, states } = __nccwpck_require__(5913) +const { + kReadyState, + kSentClose, + kByteParser, + kReceivedClose +} = __nccwpck_require__(2933) +const { fireEvent, failWebsocketConnection } = __nccwpck_require__(3574) +const { CloseEvent } = __nccwpck_require__(6255) +const { makeRequest } = __nccwpck_require__(5194) +const { fetching } = __nccwpck_require__(2315) +const { Headers } = __nccwpck_require__(6349) +const { getGlobalDispatcher } = __nccwpck_require__(2581) +const { kHeadersList } = __nccwpck_require__(6443) + +const channels = {} +channels.open = diagnosticsChannel.channel('undici:websocket:open') +channels.close = diagnosticsChannel.channel('undici:websocket:close') +channels.socketError = diagnosticsChannel.channel('undici:websocket:socket_error') + +/** @type {import('crypto')} */ +let crypto +try { + crypto = __nccwpck_require__(6982) +} catch { + +} + +/** + * @see https://websockets.spec.whatwg.org/#concept-websocket-establish + * @param {URL} url + * @param {string|string[]} protocols + * @param {import('./websocket').WebSocket} ws + * @param {(response: any) => void} onEstablish + * @param {Partial} options + */ +function establishWebSocketConnection (url, protocols, ws, onEstablish, options) { + // 1. Let requestURL be a copy of url, with its scheme set to "http", if url’s + // scheme is "ws", and to "https" otherwise. + const requestURL = url + + requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:' + + // 2. Let request be a new request, whose URL is requestURL, client is client, + // service-workers mode is "none", referrer is "no-referrer", mode is + // "websocket", credentials mode is "include", cache mode is "no-store" , + // and redirect mode is "error". + const request = makeRequest({ + urlList: [requestURL], + serviceWorkers: 'none', + referrer: 'no-referrer', + mode: 'websocket', + credentials: 'include', + cache: 'no-store', + redirect: 'error' + }) + + // Note: undici extension, allow setting custom headers. + if (options.headers) { + const headersList = new Headers(options.headers)[kHeadersList] + + request.headersList = headersList + } + + // 3. Append (`Upgrade`, `websocket`) to request’s header list. + // 4. Append (`Connection`, `Upgrade`) to request’s header list. + // Note: both of these are handled by undici currently. + // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397 + + // 5. Let keyValue be a nonce consisting of a randomly selected + // 16-byte value that has been forgiving-base64-encoded and + // isomorphic encoded. + const keyValue = crypto.randomBytes(16).toString('base64') + + // 6. Append (`Sec-WebSocket-Key`, keyValue) to request’s + // header list. + request.headersList.append('sec-websocket-key', keyValue) + + // 7. Append (`Sec-WebSocket-Version`, `13`) to request’s + // header list. + request.headersList.append('sec-websocket-version', '13') + + // 8. For each protocol in protocols, combine + // (`Sec-WebSocket-Protocol`, protocol) in request’s header + // list. + for (const protocol of protocols) { + request.headersList.append('sec-websocket-protocol', protocol) + } + + // 9. Let permessageDeflate be a user-agent defined + // "permessage-deflate" extension header value. + // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673 + // TODO: enable once permessage-deflate is supported + const permessageDeflate = '' // 'permessage-deflate; 15' + + // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to + // request’s header list. + // request.headersList.append('sec-websocket-extensions', permessageDeflate) + + // 11. Fetch request with useParallelQueue set to true, and + // processResponse given response being these steps: + const controller = fetching({ + request, + useParallelQueue: true, + dispatcher: options.dispatcher ?? getGlobalDispatcher(), + processResponse (response) { + // 1. If response is a network error or its status is not 101, + // fail the WebSocket connection. + if (response.type === 'error' || response.status !== 101) { + failWebsocketConnection(ws, 'Received network error or non-101 status code.') + return + } + + // 2. If protocols is not the empty list and extracting header + // list values given `Sec-WebSocket-Protocol` and response’s + // header list results in null, failure, or the empty byte + // sequence, then fail the WebSocket connection. + if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) { + failWebsocketConnection(ws, 'Server did not respond with sent protocols.') + return + } + + // 3. Follow the requirements stated step 2 to step 6, inclusive, + // of the last set of steps in section 4.1 of The WebSocket + // Protocol to validate response. This either results in fail + // the WebSocket connection or the WebSocket connection is + // established. + + // 2. If the response lacks an |Upgrade| header field or the |Upgrade| + // header field contains a value that is not an ASCII case- + // insensitive match for the value "websocket", the client MUST + // _Fail the WebSocket Connection_. + if (response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') { + failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".') + return + } + + // 3. If the response lacks a |Connection| header field or the + // |Connection| header field doesn't contain a token that is an + // ASCII case-insensitive match for the value "Upgrade", the client + // MUST _Fail the WebSocket Connection_. + if (response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') { + failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".') + return + } + + // 4. If the response lacks a |Sec-WebSocket-Accept| header field or + // the |Sec-WebSocket-Accept| contains a value other than the + // base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket- + // Key| (as a string, not base64-decoded) with the string "258EAFA5- + // E914-47DA-95CA-C5AB0DC85B11" but ignoring any leading and + // trailing whitespace, the client MUST _Fail the WebSocket + // Connection_. + const secWSAccept = response.headersList.get('Sec-WebSocket-Accept') + const digest = crypto.createHash('sha1').update(keyValue + uid).digest('base64') + if (secWSAccept !== digest) { + failWebsocketConnection(ws, 'Incorrect hash received in Sec-WebSocket-Accept header.') + return + } + + // 5. If the response includes a |Sec-WebSocket-Extensions| header + // field and this header field indicates the use of an extension + // that was not present in the client's handshake (the server has + // indicated an extension not requested by the client), the client + // MUST _Fail the WebSocket Connection_. (The parsing of this + // header field to determine which extensions are requested is + // discussed in Section 9.1.) + const secExtension = response.headersList.get('Sec-WebSocket-Extensions') + + if (secExtension !== null && secExtension !== permessageDeflate) { + failWebsocketConnection(ws, 'Received different permessage-deflate than the one set.') + return + } + + // 6. If the response includes a |Sec-WebSocket-Protocol| header field + // and this header field indicates the use of a subprotocol that was + // not present in the client's handshake (the server has indicated a + // subprotocol not requested by the client), the client MUST _Fail + // the WebSocket Connection_. + const secProtocol = response.headersList.get('Sec-WebSocket-Protocol') + + if (secProtocol !== null && secProtocol !== request.headersList.get('Sec-WebSocket-Protocol')) { + failWebsocketConnection(ws, 'Protocol was not set in the opening handshake.') + return + } + + response.socket.on('data', onSocketData) + response.socket.on('close', onSocketClose) + response.socket.on('error', onSocketError) + + if (channels.open.hasSubscribers) { + channels.open.publish({ + address: response.socket.address(), + protocol: secProtocol, + extensions: secExtension + }) + } + + onEstablish(response) + } + }) + + return controller +} + +/** + * @param {Buffer} chunk + */ +function onSocketData (chunk) { + if (!this.ws[kByteParser].write(chunk)) { + this.pause() + } +} + +/** + * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol + * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4 + */ +function onSocketClose () { + const { ws } = this + + // If the TCP connection was closed after the + // WebSocket closing handshake was completed, the WebSocket connection + // is said to have been closed _cleanly_. + const wasClean = ws[kSentClose] && ws[kReceivedClose] + + let code = 1005 + let reason = '' + + const result = ws[kByteParser].closingInfo + + if (result) { + code = result.code ?? 1005 + reason = result.reason + } else if (!ws[kSentClose]) { + // If _The WebSocket + // Connection is Closed_ and no Close control frame was received by the + // endpoint (such as could occur if the underlying transport connection + // is lost), _The WebSocket Connection Close Code_ is considered to be + // 1006. + code = 1006 + } + + // 1. Change the ready state to CLOSED (3). + ws[kReadyState] = states.CLOSED + + // 2. If the user agent was required to fail the WebSocket + // connection, or if the WebSocket connection was closed + // after being flagged as full, fire an event named error + // at the WebSocket object. + // TODO + + // 3. Fire an event named close at the WebSocket object, + // using CloseEvent, with the wasClean attribute + // initialized to true if the connection closed cleanly + // and false otherwise, the code attribute initialized to + // the WebSocket connection close code, and the reason + // attribute initialized to the result of applying UTF-8 + // decode without BOM to the WebSocket connection close + // reason. + fireEvent('close', ws, CloseEvent, { + wasClean, code, reason + }) + + if (channels.close.hasSubscribers) { + channels.close.publish({ + websocket: ws, + code, + reason + }) + } +} + +function onSocketError (error) { + const { ws } = this + + ws[kReadyState] = states.CLOSING + + if (channels.socketError.hasSubscribers) { + channels.socketError.publish(error) + } + + this.destroy() +} + +module.exports = { + establishWebSocketConnection +} + + +/***/ }), + +/***/ 5913: +/***/ ((module) => { + +"use strict"; + + +// This is a Globally Unique Identifier unique used +// to validate that the endpoint accepts websocket +// connections. +// See https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3 +const uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11' + +/** @type {PropertyDescriptor} */ +const staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false +} + +const states = { + CONNECTING: 0, + OPEN: 1, + CLOSING: 2, + CLOSED: 3 +} + +const opcodes = { + CONTINUATION: 0x0, + TEXT: 0x1, + BINARY: 0x2, + CLOSE: 0x8, + PING: 0x9, + PONG: 0xA +} + +const maxUnsigned16Bit = 2 ** 16 - 1 // 65535 + +const parserStates = { + INFO: 0, + PAYLOADLENGTH_16: 2, + PAYLOADLENGTH_64: 3, + READ_DATA: 4 +} + +const emptyBuffer = Buffer.allocUnsafe(0) + +module.exports = { + uid, + staticPropertyDescriptors, + states, + opcodes, + maxUnsigned16Bit, + parserStates, + emptyBuffer +} + + +/***/ }), + +/***/ 6255: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { webidl } = __nccwpck_require__(4222) +const { kEnumerableProperty } = __nccwpck_require__(3440) +const { MessagePort } = __nccwpck_require__(8167) + +/** + * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent + */ +class MessageEvent extends Event { + #eventInit + + constructor (type, eventInitDict = {}) { + webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent constructor' }) + + type = webidl.converters.DOMString(type) + eventInitDict = webidl.converters.MessageEventInit(eventInitDict) + + super(type, eventInitDict) + + this.#eventInit = eventInitDict + } + + get data () { + webidl.brandCheck(this, MessageEvent) + + return this.#eventInit.data + } + + get origin () { + webidl.brandCheck(this, MessageEvent) + + return this.#eventInit.origin + } + + get lastEventId () { + webidl.brandCheck(this, MessageEvent) + + return this.#eventInit.lastEventId + } + + get source () { + webidl.brandCheck(this, MessageEvent) + + return this.#eventInit.source + } + + get ports () { + webidl.brandCheck(this, MessageEvent) + + if (!Object.isFrozen(this.#eventInit.ports)) { + Object.freeze(this.#eventInit.ports) + } + + return this.#eventInit.ports + } + + initMessageEvent ( + type, + bubbles = false, + cancelable = false, + data = null, + origin = '', + lastEventId = '', + source = null, + ports = [] + ) { + webidl.brandCheck(this, MessageEvent) + + webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent.initMessageEvent' }) + + return new MessageEvent(type, { + bubbles, cancelable, data, origin, lastEventId, source, ports + }) + } +} + +/** + * @see https://websockets.spec.whatwg.org/#the-closeevent-interface + */ +class CloseEvent extends Event { + #eventInit + + constructor (type, eventInitDict = {}) { + webidl.argumentLengthCheck(arguments, 1, { header: 'CloseEvent constructor' }) + + type = webidl.converters.DOMString(type) + eventInitDict = webidl.converters.CloseEventInit(eventInitDict) + + super(type, eventInitDict) + + this.#eventInit = eventInitDict + } + + get wasClean () { + webidl.brandCheck(this, CloseEvent) + + return this.#eventInit.wasClean + } + + get code () { + webidl.brandCheck(this, CloseEvent) + + return this.#eventInit.code + } + + get reason () { + webidl.brandCheck(this, CloseEvent) + + return this.#eventInit.reason + } +} + +// https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface +class ErrorEvent extends Event { + #eventInit + + constructor (type, eventInitDict) { + webidl.argumentLengthCheck(arguments, 1, { header: 'ErrorEvent constructor' }) + + super(type, eventInitDict) + + type = webidl.converters.DOMString(type) + eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {}) + + this.#eventInit = eventInitDict + } + + get message () { + webidl.brandCheck(this, ErrorEvent) + + return this.#eventInit.message + } + + get filename () { + webidl.brandCheck(this, ErrorEvent) + + return this.#eventInit.filename + } + + get lineno () { + webidl.brandCheck(this, ErrorEvent) + + return this.#eventInit.lineno + } + + get colno () { + webidl.brandCheck(this, ErrorEvent) + + return this.#eventInit.colno + } + + get error () { + webidl.brandCheck(this, ErrorEvent) + + return this.#eventInit.error + } +} + +Object.defineProperties(MessageEvent.prototype, { + [Symbol.toStringTag]: { + value: 'MessageEvent', + configurable: true + }, + data: kEnumerableProperty, + origin: kEnumerableProperty, + lastEventId: kEnumerableProperty, + source: kEnumerableProperty, + ports: kEnumerableProperty, + initMessageEvent: kEnumerableProperty +}) + +Object.defineProperties(CloseEvent.prototype, { + [Symbol.toStringTag]: { + value: 'CloseEvent', + configurable: true + }, + reason: kEnumerableProperty, + code: kEnumerableProperty, + wasClean: kEnumerableProperty +}) + +Object.defineProperties(ErrorEvent.prototype, { + [Symbol.toStringTag]: { + value: 'ErrorEvent', + configurable: true + }, + message: kEnumerableProperty, + filename: kEnumerableProperty, + lineno: kEnumerableProperty, + colno: kEnumerableProperty, + error: kEnumerableProperty +}) + +webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort) + +webidl.converters['sequence'] = webidl.sequenceConverter( + webidl.converters.MessagePort +) + +const eventInit = [ + { + key: 'bubbles', + converter: webidl.converters.boolean, + defaultValue: false + }, + { + key: 'cancelable', + converter: webidl.converters.boolean, + defaultValue: false + }, + { + key: 'composed', + converter: webidl.converters.boolean, + defaultValue: false + } +] + +webidl.converters.MessageEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: 'data', + converter: webidl.converters.any, + defaultValue: null + }, + { + key: 'origin', + converter: webidl.converters.USVString, + defaultValue: '' + }, + { + key: 'lastEventId', + converter: webidl.converters.DOMString, + defaultValue: '' + }, + { + key: 'source', + // Node doesn't implement WindowProxy or ServiceWorker, so the only + // valid value for source is a MessagePort. + converter: webidl.nullableConverter(webidl.converters.MessagePort), + defaultValue: null + }, + { + key: 'ports', + converter: webidl.converters['sequence'], + get defaultValue () { + return [] + } + } +]) + +webidl.converters.CloseEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: 'wasClean', + converter: webidl.converters.boolean, + defaultValue: false + }, + { + key: 'code', + converter: webidl.converters['unsigned short'], + defaultValue: 0 + }, + { + key: 'reason', + converter: webidl.converters.USVString, + defaultValue: '' + } +]) + +webidl.converters.ErrorEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: 'message', + converter: webidl.converters.DOMString, + defaultValue: '' + }, + { + key: 'filename', + converter: webidl.converters.USVString, + defaultValue: '' + }, + { + key: 'lineno', + converter: webidl.converters['unsigned long'], + defaultValue: 0 + }, + { + key: 'colno', + converter: webidl.converters['unsigned long'], + defaultValue: 0 + }, + { + key: 'error', + converter: webidl.converters.any + } +]) + +module.exports = { + MessageEvent, + CloseEvent, + ErrorEvent +} + + +/***/ }), + +/***/ 1237: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { maxUnsigned16Bit } = __nccwpck_require__(5913) + +/** @type {import('crypto')} */ +let crypto +try { + crypto = __nccwpck_require__(6982) +} catch { + +} + +class WebsocketFrameSend { + /** + * @param {Buffer|undefined} data + */ + constructor (data) { + this.frameData = data + this.maskKey = crypto.randomBytes(4) + } + + createFrame (opcode) { + const bodyLength = this.frameData?.byteLength ?? 0 + + /** @type {number} */ + let payloadLength = bodyLength // 0-125 + let offset = 6 + + if (bodyLength > maxUnsigned16Bit) { + offset += 8 // payload length is next 8 bytes + payloadLength = 127 + } else if (bodyLength > 125) { + offset += 2 // payload length is next 2 bytes + payloadLength = 126 + } + + const buffer = Buffer.allocUnsafe(bodyLength + offset) + + // Clear first 2 bytes, everything else is overwritten + buffer[0] = buffer[1] = 0 + buffer[0] |= 0x80 // FIN + buffer[0] = (buffer[0] & 0xF0) + opcode // opcode + + /*! ws. MIT License. Einar Otto Stangvik */ + buffer[offset - 4] = this.maskKey[0] + buffer[offset - 3] = this.maskKey[1] + buffer[offset - 2] = this.maskKey[2] + buffer[offset - 1] = this.maskKey[3] + + buffer[1] = payloadLength + + if (payloadLength === 126) { + buffer.writeUInt16BE(bodyLength, 2) + } else if (payloadLength === 127) { + // Clear extended payload length + buffer[2] = buffer[3] = 0 + buffer.writeUIntBE(bodyLength, 4, 6) + } + + buffer[1] |= 0x80 // MASK + + // mask body + for (let i = 0; i < bodyLength; i++) { + buffer[offset + i] = this.frameData[i] ^ this.maskKey[i % 4] + } + + return buffer + } +} + +module.exports = { + WebsocketFrameSend +} + + +/***/ }), + +/***/ 3171: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { Writable } = __nccwpck_require__(2203) +const diagnosticsChannel = __nccwpck_require__(1637) +const { parserStates, opcodes, states, emptyBuffer } = __nccwpck_require__(5913) +const { kReadyState, kSentClose, kResponse, kReceivedClose } = __nccwpck_require__(2933) +const { isValidStatusCode, failWebsocketConnection, websocketMessageReceived } = __nccwpck_require__(3574) +const { WebsocketFrameSend } = __nccwpck_require__(1237) + +// This code was influenced by ws released under the MIT license. +// Copyright (c) 2011 Einar Otto Stangvik +// Copyright (c) 2013 Arnout Kazemier and contributors +// Copyright (c) 2016 Luigi Pinca and contributors + +const channels = {} +channels.ping = diagnosticsChannel.channel('undici:websocket:ping') +channels.pong = diagnosticsChannel.channel('undici:websocket:pong') + +class ByteParser extends Writable { + #buffers = [] + #byteOffset = 0 + + #state = parserStates.INFO + + #info = {} + #fragments = [] + + constructor (ws) { + super() + + this.ws = ws + } + + /** + * @param {Buffer} chunk + * @param {() => void} callback + */ + _write (chunk, _, callback) { + this.#buffers.push(chunk) + this.#byteOffset += chunk.length + + this.run(callback) + } + + /** + * Runs whenever a new chunk is received. + * Callback is called whenever there are no more chunks buffering, + * or not enough bytes are buffered to parse. + */ + run (callback) { + while (true) { + if (this.#state === parserStates.INFO) { + // If there aren't enough bytes to parse the payload length, etc. + if (this.#byteOffset < 2) { + return callback() + } + + const buffer = this.consume(2) + + this.#info.fin = (buffer[0] & 0x80) !== 0 + this.#info.opcode = buffer[0] & 0x0F + + // If we receive a fragmented message, we use the type of the first + // frame to parse the full message as binary/text, when it's terminated + this.#info.originalOpcode ??= this.#info.opcode + + this.#info.fragmented = !this.#info.fin && this.#info.opcode !== opcodes.CONTINUATION + + if (this.#info.fragmented && this.#info.opcode !== opcodes.BINARY && this.#info.opcode !== opcodes.TEXT) { + // Only text and binary frames can be fragmented + failWebsocketConnection(this.ws, 'Invalid frame type was fragmented.') + return + } + + const payloadLength = buffer[1] & 0x7F + + if (payloadLength <= 125) { + this.#info.payloadLength = payloadLength + this.#state = parserStates.READ_DATA + } else if (payloadLength === 126) { + this.#state = parserStates.PAYLOADLENGTH_16 + } else if (payloadLength === 127) { + this.#state = parserStates.PAYLOADLENGTH_64 + } + + if (this.#info.fragmented && payloadLength > 125) { + // A fragmented frame can't be fragmented itself + failWebsocketConnection(this.ws, 'Fragmented frame exceeded 125 bytes.') + return + } else if ( + (this.#info.opcode === opcodes.PING || + this.#info.opcode === opcodes.PONG || + this.#info.opcode === opcodes.CLOSE) && + payloadLength > 125 + ) { + // Control frames can have a payload length of 125 bytes MAX + failWebsocketConnection(this.ws, 'Payload length for control frame exceeded 125 bytes.') + return + } else if (this.#info.opcode === opcodes.CLOSE) { + if (payloadLength === 1) { + failWebsocketConnection(this.ws, 'Received close frame with a 1-byte body.') + return + } + + const body = this.consume(payloadLength) + + this.#info.closeInfo = this.parseCloseBody(false, body) + + if (!this.ws[kSentClose]) { + // If an endpoint receives a Close frame and did not previously send a + // Close frame, the endpoint MUST send a Close frame in response. (When + // sending a Close frame in response, the endpoint typically echos the + // status code it received.) + const body = Buffer.allocUnsafe(2) + body.writeUInt16BE(this.#info.closeInfo.code, 0) + const closeFrame = new WebsocketFrameSend(body) + + this.ws[kResponse].socket.write( + closeFrame.createFrame(opcodes.CLOSE), + (err) => { + if (!err) { + this.ws[kSentClose] = true + } + } + ) + } + + // Upon either sending or receiving a Close control frame, it is said + // that _The WebSocket Closing Handshake is Started_ and that the + // WebSocket connection is in the CLOSING state. + this.ws[kReadyState] = states.CLOSING + this.ws[kReceivedClose] = true + + this.end() + + return + } else if (this.#info.opcode === opcodes.PING) { + // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in + // response, unless it already received a Close frame. + // A Pong frame sent in response to a Ping frame must have identical + // "Application data" + + const body = this.consume(payloadLength) + + if (!this.ws[kReceivedClose]) { + const frame = new WebsocketFrameSend(body) + + this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG)) + + if (channels.ping.hasSubscribers) { + channels.ping.publish({ + payload: body + }) + } + } + + this.#state = parserStates.INFO + + if (this.#byteOffset > 0) { + continue + } else { + callback() + return + } + } else if (this.#info.opcode === opcodes.PONG) { + // A Pong frame MAY be sent unsolicited. This serves as a + // unidirectional heartbeat. A response to an unsolicited Pong frame is + // not expected. + + const body = this.consume(payloadLength) + + if (channels.pong.hasSubscribers) { + channels.pong.publish({ + payload: body + }) + } + + if (this.#byteOffset > 0) { + continue + } else { + callback() + return + } + } + } else if (this.#state === parserStates.PAYLOADLENGTH_16) { + if (this.#byteOffset < 2) { + return callback() + } + + const buffer = this.consume(2) + + this.#info.payloadLength = buffer.readUInt16BE(0) + this.#state = parserStates.READ_DATA + } else if (this.#state === parserStates.PAYLOADLENGTH_64) { + if (this.#byteOffset < 8) { + return callback() + } + + const buffer = this.consume(8) + const upper = buffer.readUInt32BE(0) + + // 2^31 is the maxinimum bytes an arraybuffer can contain + // on 32-bit systems. Although, on 64-bit systems, this is + // 2^53-1 bytes. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length + // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275 + // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e + if (upper > 2 ** 31 - 1) { + failWebsocketConnection(this.ws, 'Received payload length > 2^31 bytes.') + return + } + + const lower = buffer.readUInt32BE(4) + + this.#info.payloadLength = (upper << 8) + lower + this.#state = parserStates.READ_DATA + } else if (this.#state === parserStates.READ_DATA) { + if (this.#byteOffset < this.#info.payloadLength) { + // If there is still more data in this chunk that needs to be read + return callback() + } else if (this.#byteOffset >= this.#info.payloadLength) { + // If the server sent multiple frames in a single chunk + + const body = this.consume(this.#info.payloadLength) + + this.#fragments.push(body) + + // If the frame is unfragmented, or a fragmented frame was terminated, + // a message was received + if (!this.#info.fragmented || (this.#info.fin && this.#info.opcode === opcodes.CONTINUATION)) { + const fullMessage = Buffer.concat(this.#fragments) + + websocketMessageReceived(this.ws, this.#info.originalOpcode, fullMessage) + + this.#info = {} + this.#fragments.length = 0 + } + + this.#state = parserStates.INFO + } + } + + if (this.#byteOffset > 0) { + continue + } else { + callback() + break + } + } + } + + /** + * Take n bytes from the buffered Buffers + * @param {number} n + * @returns {Buffer|null} + */ + consume (n) { + if (n > this.#byteOffset) { + return null + } else if (n === 0) { + return emptyBuffer + } + + if (this.#buffers[0].length === n) { + this.#byteOffset -= this.#buffers[0].length + return this.#buffers.shift() + } + + const buffer = Buffer.allocUnsafe(n) + let offset = 0 + + while (offset !== n) { + const next = this.#buffers[0] + const { length } = next + + if (length + offset === n) { + buffer.set(this.#buffers.shift(), offset) + break + } else if (length + offset > n) { + buffer.set(next.subarray(0, n - offset), offset) + this.#buffers[0] = next.subarray(n - offset) + break + } else { + buffer.set(this.#buffers.shift(), offset) + offset += next.length + } + } + + this.#byteOffset -= n + + return buffer + } + + parseCloseBody (onlyCode, data) { + // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5 + /** @type {number|undefined} */ + let code + + if (data.length >= 2) { + // _The WebSocket Connection Close Code_ is + // defined as the status code (Section 7.4) contained in the first Close + // control frame received by the application + code = data.readUInt16BE(0) + } + + if (onlyCode) { + if (!isValidStatusCode(code)) { + return null + } + + return { code } + } + + // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6 + /** @type {Buffer} */ + let reason = data.subarray(2) + + // Remove BOM + if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) { + reason = reason.subarray(3) + } + + if (code !== undefined && !isValidStatusCode(code)) { + return null + } + + try { + // TODO: optimize this + reason = new TextDecoder('utf-8', { fatal: true }).decode(reason) + } catch { + return null + } + + return { code, reason } + } + + get closingInfo () { + return this.#info.closeInfo + } +} + +module.exports = { + ByteParser +} + + +/***/ }), + +/***/ 2933: +/***/ ((module) => { + +"use strict"; + + +module.exports = { + kWebSocketURL: Symbol('url'), + kReadyState: Symbol('ready state'), + kController: Symbol('controller'), + kResponse: Symbol('response'), + kBinaryType: Symbol('binary type'), + kSentClose: Symbol('sent close'), + kReceivedClose: Symbol('received close'), + kByteParser: Symbol('byte parser') +} + + +/***/ }), + +/***/ 3574: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = __nccwpck_require__(2933) +const { states, opcodes } = __nccwpck_require__(5913) +const { MessageEvent, ErrorEvent } = __nccwpck_require__(6255) + +/* globals Blob */ + +/** + * @param {import('./websocket').WebSocket} ws + */ +function isEstablished (ws) { + // If the server's response is validated as provided for above, it is + // said that _The WebSocket Connection is Established_ and that the + // WebSocket Connection is in the OPEN state. + return ws[kReadyState] === states.OPEN +} + +/** + * @param {import('./websocket').WebSocket} ws + */ +function isClosing (ws) { + // Upon either sending or receiving a Close control frame, it is said + // that _The WebSocket Closing Handshake is Started_ and that the + // WebSocket connection is in the CLOSING state. + return ws[kReadyState] === states.CLOSING +} + +/** + * @param {import('./websocket').WebSocket} ws + */ +function isClosed (ws) { + return ws[kReadyState] === states.CLOSED +} + +/** + * @see https://dom.spec.whatwg.org/#concept-event-fire + * @param {string} e + * @param {EventTarget} target + * @param {EventInit | undefined} eventInitDict + */ +function fireEvent (e, target, eventConstructor = Event, eventInitDict) { + // 1. If eventConstructor is not given, then let eventConstructor be Event. + + // 2. Let event be the result of creating an event given eventConstructor, + // in the relevant realm of target. + // 3. Initialize event’s type attribute to e. + const event = new eventConstructor(e, eventInitDict) // eslint-disable-line new-cap + + // 4. Initialize any other IDL attributes of event as described in the + // invocation of this algorithm. + + // 5. Return the result of dispatching event at target, with legacy target + // override flag set if set. + target.dispatchEvent(event) +} + +/** + * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol + * @param {import('./websocket').WebSocket} ws + * @param {number} type Opcode + * @param {Buffer} data application data + */ +function websocketMessageReceived (ws, type, data) { + // 1. If ready state is not OPEN (1), then return. + if (ws[kReadyState] !== states.OPEN) { + return + } + + // 2. Let dataForEvent be determined by switching on type and binary type: + let dataForEvent + + if (type === opcodes.TEXT) { + // -> type indicates that the data is Text + // a new DOMString containing data + try { + dataForEvent = new TextDecoder('utf-8', { fatal: true }).decode(data) + } catch { + failWebsocketConnection(ws, 'Received invalid UTF-8 in text frame.') + return + } + } else if (type === opcodes.BINARY) { + if (ws[kBinaryType] === 'blob') { + // -> type indicates that the data is Binary and binary type is "blob" + // a new Blob object, created in the relevant Realm of the WebSocket + // object, that represents data as its raw data + dataForEvent = new Blob([data]) + } else { + // -> type indicates that the data is Binary and binary type is "arraybuffer" + // a new ArrayBuffer object, created in the relevant Realm of the + // WebSocket object, whose contents are data + dataForEvent = new Uint8Array(data).buffer + } + } + + // 3. Fire an event named message at the WebSocket object, using MessageEvent, + // with the origin attribute initialized to the serialization of the WebSocket + // object’s url's origin, and the data attribute initialized to dataForEvent. + fireEvent('message', ws, MessageEvent, { + origin: ws[kWebSocketURL].origin, + data: dataForEvent + }) +} + +/** + * @see https://datatracker.ietf.org/doc/html/rfc6455 + * @see https://datatracker.ietf.org/doc/html/rfc2616 + * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407 + * @param {string} protocol + */ +function isValidSubprotocol (protocol) { + // If present, this value indicates one + // or more comma-separated subprotocol the client wishes to speak, + // ordered by preference. The elements that comprise this value + // MUST be non-empty strings with characters in the range U+0021 to + // U+007E not including separator characters as defined in + // [RFC2616] and MUST all be unique strings. + if (protocol.length === 0) { + return false + } + + for (const char of protocol) { + const code = char.charCodeAt(0) + + if ( + code < 0x21 || + code > 0x7E || + char === '(' || + char === ')' || + char === '<' || + char === '>' || + char === '@' || + char === ',' || + char === ';' || + char === ':' || + char === '\\' || + char === '"' || + char === '/' || + char === '[' || + char === ']' || + char === '?' || + char === '=' || + char === '{' || + char === '}' || + code === 32 || // SP + code === 9 // HT + ) { + return false + } + } + + return true +} + +/** + * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4 + * @param {number} code + */ +function isValidStatusCode (code) { + if (code >= 1000 && code < 1015) { + return ( + code !== 1004 && // reserved + code !== 1005 && // "MUST NOT be set as a status code" + code !== 1006 // "MUST NOT be set as a status code" + ) + } + + return code >= 3000 && code <= 4999 +} + +/** + * @param {import('./websocket').WebSocket} ws + * @param {string|undefined} reason + */ +function failWebsocketConnection (ws, reason) { + const { [kController]: controller, [kResponse]: response } = ws + + controller.abort() + + if (response?.socket && !response.socket.destroyed) { + response.socket.destroy() + } + + if (reason) { + fireEvent('error', ws, ErrorEvent, { + error: new Error(reason) + }) + } +} + +module.exports = { + isEstablished, + isClosing, + isClosed, + fireEvent, + isValidSubprotocol, + isValidStatusCode, + failWebsocketConnection, + websocketMessageReceived +} + + +/***/ }), + +/***/ 5171: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const { webidl } = __nccwpck_require__(4222) +const { DOMException } = __nccwpck_require__(7326) +const { URLSerializer } = __nccwpck_require__(4322) +const { getGlobalOrigin } = __nccwpck_require__(5628) +const { staticPropertyDescriptors, states, opcodes, emptyBuffer } = __nccwpck_require__(5913) +const { + kWebSocketURL, + kReadyState, + kController, + kBinaryType, + kResponse, + kSentClose, + kByteParser +} = __nccwpck_require__(2933) +const { isEstablished, isClosing, isValidSubprotocol, failWebsocketConnection, fireEvent } = __nccwpck_require__(3574) +const { establishWebSocketConnection } = __nccwpck_require__(8550) +const { WebsocketFrameSend } = __nccwpck_require__(1237) +const { ByteParser } = __nccwpck_require__(3171) +const { kEnumerableProperty, isBlobLike } = __nccwpck_require__(3440) +const { getGlobalDispatcher } = __nccwpck_require__(2581) +const { types } = __nccwpck_require__(9023) + +let experimentalWarned = false + +// https://websockets.spec.whatwg.org/#interface-definition +class WebSocket extends EventTarget { + #events = { + open: null, + error: null, + close: null, + message: null + } + + #bufferedAmount = 0 + #protocol = '' + #extensions = '' + + /** + * @param {string} url + * @param {string|string[]} protocols + */ + constructor (url, protocols = []) { + super() + + webidl.argumentLengthCheck(arguments, 1, { header: 'WebSocket constructor' }) + + if (!experimentalWarned) { + experimentalWarned = true + process.emitWarning('WebSockets are experimental, expect them to change at any time.', { + code: 'UNDICI-WS' + }) + } + + const options = webidl.converters['DOMString or sequence or WebSocketInit'](protocols) + + url = webidl.converters.USVString(url) + protocols = options.protocols + + // 1. Let baseURL be this's relevant settings object's API base URL. + const baseURL = getGlobalOrigin() + + // 1. Let urlRecord be the result of applying the URL parser to url with baseURL. + let urlRecord + + try { + urlRecord = new URL(url, baseURL) + } catch (e) { + // 3. If urlRecord is failure, then throw a "SyntaxError" DOMException. + throw new DOMException(e, 'SyntaxError') + } + + // 4. If urlRecord’s scheme is "http", then set urlRecord’s scheme to "ws". + if (urlRecord.protocol === 'http:') { + urlRecord.protocol = 'ws:' + } else if (urlRecord.protocol === 'https:') { + // 5. Otherwise, if urlRecord’s scheme is "https", set urlRecord’s scheme to "wss". + urlRecord.protocol = 'wss:' + } + + // 6. If urlRecord’s scheme is not "ws" or "wss", then throw a "SyntaxError" DOMException. + if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') { + throw new DOMException( + `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, + 'SyntaxError' + ) + } + + // 7. If urlRecord’s fragment is non-null, then throw a "SyntaxError" + // DOMException. + if (urlRecord.hash || urlRecord.href.endsWith('#')) { + throw new DOMException('Got fragment', 'SyntaxError') + } + + // 8. If protocols is a string, set protocols to a sequence consisting + // of just that string. + if (typeof protocols === 'string') { + protocols = [protocols] + } + + // 9. If any of the values in protocols occur more than once or otherwise + // fail to match the requirements for elements that comprise the value + // of `Sec-WebSocket-Protocol` fields as defined by The WebSocket + // protocol, then throw a "SyntaxError" DOMException. + if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) { + throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError') + } + + if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) { + throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError') + } + + // 10. Set this's url to urlRecord. + this[kWebSocketURL] = new URL(urlRecord.href) + + // 11. Let client be this's relevant settings object. + + // 12. Run this step in parallel: + + // 1. Establish a WebSocket connection given urlRecord, protocols, + // and client. + this[kController] = establishWebSocketConnection( + urlRecord, + protocols, + this, + (response) => this.#onConnectionEstablished(response), + options + ) + + // Each WebSocket object has an associated ready state, which is a + // number representing the state of the connection. Initially it must + // be CONNECTING (0). + this[kReadyState] = WebSocket.CONNECTING + + // The extensions attribute must initially return the empty string. + + // The protocol attribute must initially return the empty string. + + // Each WebSocket object has an associated binary type, which is a + // BinaryType. Initially it must be "blob". + this[kBinaryType] = 'blob' + } + + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-close + * @param {number|undefined} code + * @param {string|undefined} reason + */ + close (code = undefined, reason = undefined) { + webidl.brandCheck(this, WebSocket) + + if (code !== undefined) { + code = webidl.converters['unsigned short'](code, { clamp: true }) + } + + if (reason !== undefined) { + reason = webidl.converters.USVString(reason) + } + + // 1. If code is present, but is neither an integer equal to 1000 nor an + // integer in the range 3000 to 4999, inclusive, throw an + // "InvalidAccessError" DOMException. + if (code !== undefined) { + if (code !== 1000 && (code < 3000 || code > 4999)) { + throw new DOMException('invalid code', 'InvalidAccessError') + } + } + + let reasonByteLength = 0 + + // 2. If reason is present, then run these substeps: + if (reason !== undefined) { + // 1. Let reasonBytes be the result of encoding reason. + // 2. If reasonBytes is longer than 123 bytes, then throw a + // "SyntaxError" DOMException. + reasonByteLength = Buffer.byteLength(reason) + + if (reasonByteLength > 123) { + throw new DOMException( + `Reason must be less than 123 bytes; received ${reasonByteLength}`, + 'SyntaxError' + ) + } + } + + // 3. Run the first matching steps from the following list: + if (this[kReadyState] === WebSocket.CLOSING || this[kReadyState] === WebSocket.CLOSED) { + // If this's ready state is CLOSING (2) or CLOSED (3) + // Do nothing. + } else if (!isEstablished(this)) { + // If the WebSocket connection is not yet established + // Fail the WebSocket connection and set this's ready state + // to CLOSING (2). + failWebsocketConnection(this, 'Connection was closed before it was established.') + this[kReadyState] = WebSocket.CLOSING + } else if (!isClosing(this)) { + // If the WebSocket closing handshake has not yet been started + // Start the WebSocket closing handshake and set this's ready + // state to CLOSING (2). + // - If neither code nor reason is present, the WebSocket Close + // message must not have a body. + // - If code is present, then the status code to use in the + // WebSocket Close message must be the integer given by code. + // - If reason is also present, then reasonBytes must be + // provided in the Close message after the status code. + + const frame = new WebsocketFrameSend() + + // If neither code nor reason is present, the WebSocket Close + // message must not have a body. + + // If code is present, then the status code to use in the + // WebSocket Close message must be the integer given by code. + if (code !== undefined && reason === undefined) { + frame.frameData = Buffer.allocUnsafe(2) + frame.frameData.writeUInt16BE(code, 0) + } else if (code !== undefined && reason !== undefined) { + // If reason is also present, then reasonBytes must be + // provided in the Close message after the status code. + frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength) + frame.frameData.writeUInt16BE(code, 0) + // the body MAY contain UTF-8-encoded data with value /reason/ + frame.frameData.write(reason, 2, 'utf-8') + } else { + frame.frameData = emptyBuffer + } + + /** @type {import('stream').Duplex} */ + const socket = this[kResponse].socket + + socket.write(frame.createFrame(opcodes.CLOSE), (err) => { + if (!err) { + this[kSentClose] = true + } + }) + + // Upon either sending or receiving a Close control frame, it is said + // that _The WebSocket Closing Handshake is Started_ and that the + // WebSocket connection is in the CLOSING state. + this[kReadyState] = states.CLOSING + } else { + // Otherwise + // Set this's ready state to CLOSING (2). + this[kReadyState] = WebSocket.CLOSING + } + } + + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-send + * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data + */ + send (data) { + webidl.brandCheck(this, WebSocket) + + webidl.argumentLengthCheck(arguments, 1, { header: 'WebSocket.send' }) + + data = webidl.converters.WebSocketSendData(data) + + // 1. If this's ready state is CONNECTING, then throw an + // "InvalidStateError" DOMException. + if (this[kReadyState] === WebSocket.CONNECTING) { + throw new DOMException('Sent before connected.', 'InvalidStateError') + } + + // 2. Run the appropriate set of steps from the following list: + // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1 + // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2 + + if (!isEstablished(this) || isClosing(this)) { + return + } + + /** @type {import('stream').Duplex} */ + const socket = this[kResponse].socket + + // If data is a string + if (typeof data === 'string') { + // If the WebSocket connection is established and the WebSocket + // closing handshake has not yet started, then the user agent + // must send a WebSocket Message comprised of the data argument + // using a text frame opcode; if the data cannot be sent, e.g. + // because it would need to be buffered but the buffer is full, + // the user agent must flag the WebSocket as full and then close + // the WebSocket connection. Any invocation of this method with a + // string argument that does not throw an exception must increase + // the bufferedAmount attribute by the number of bytes needed to + // express the argument as UTF-8. + + const value = Buffer.from(data) + const frame = new WebsocketFrameSend(value) + const buffer = frame.createFrame(opcodes.TEXT) + + this.#bufferedAmount += value.byteLength + socket.write(buffer, () => { + this.#bufferedAmount -= value.byteLength + }) + } else if (types.isArrayBuffer(data)) { + // If the WebSocket connection is established, and the WebSocket + // closing handshake has not yet started, then the user agent must + // send a WebSocket Message comprised of data using a binary frame + // opcode; if the data cannot be sent, e.g. because it would need + // to be buffered but the buffer is full, the user agent must flag + // the WebSocket as full and then close the WebSocket connection. + // The data to be sent is the data stored in the buffer described + // by the ArrayBuffer object. Any invocation of this method with an + // ArrayBuffer argument that does not throw an exception must + // increase the bufferedAmount attribute by the length of the + // ArrayBuffer in bytes. + + const value = Buffer.from(data) + const frame = new WebsocketFrameSend(value) + const buffer = frame.createFrame(opcodes.BINARY) + + this.#bufferedAmount += value.byteLength + socket.write(buffer, () => { + this.#bufferedAmount -= value.byteLength + }) + } else if (ArrayBuffer.isView(data)) { + // If the WebSocket connection is established, and the WebSocket + // closing handshake has not yet started, then the user agent must + // send a WebSocket Message comprised of data using a binary frame + // opcode; if the data cannot be sent, e.g. because it would need to + // be buffered but the buffer is full, the user agent must flag the + // WebSocket as full and then close the WebSocket connection. The + // data to be sent is the data stored in the section of the buffer + // described by the ArrayBuffer object that data references. Any + // invocation of this method with this kind of argument that does + // not throw an exception must increase the bufferedAmount attribute + // by the length of data’s buffer in bytes. + + const ab = Buffer.from(data, data.byteOffset, data.byteLength) + + const frame = new WebsocketFrameSend(ab) + const buffer = frame.createFrame(opcodes.BINARY) + + this.#bufferedAmount += ab.byteLength + socket.write(buffer, () => { + this.#bufferedAmount -= ab.byteLength + }) + } else if (isBlobLike(data)) { + // If the WebSocket connection is established, and the WebSocket + // closing handshake has not yet started, then the user agent must + // send a WebSocket Message comprised of data using a binary frame + // opcode; if the data cannot be sent, e.g. because it would need to + // be buffered but the buffer is full, the user agent must flag the + // WebSocket as full and then close the WebSocket connection. The data + // to be sent is the raw data represented by the Blob object. Any + // invocation of this method with a Blob argument that does not throw + // an exception must increase the bufferedAmount attribute by the size + // of the Blob object’s raw data, in bytes. + + const frame = new WebsocketFrameSend() + + data.arrayBuffer().then((ab) => { + const value = Buffer.from(ab) + frame.frameData = value + const buffer = frame.createFrame(opcodes.BINARY) + + this.#bufferedAmount += value.byteLength + socket.write(buffer, () => { + this.#bufferedAmount -= value.byteLength + }) + }) + } + } + + get readyState () { + webidl.brandCheck(this, WebSocket) + + // The readyState getter steps are to return this's ready state. + return this[kReadyState] + } + + get bufferedAmount () { + webidl.brandCheck(this, WebSocket) + + return this.#bufferedAmount + } + + get url () { + webidl.brandCheck(this, WebSocket) + + // The url getter steps are to return this's url, serialized. + return URLSerializer(this[kWebSocketURL]) + } + + get extensions () { + webidl.brandCheck(this, WebSocket) + + return this.#extensions + } + + get protocol () { + webidl.brandCheck(this, WebSocket) + + return this.#protocol + } + + get onopen () { + webidl.brandCheck(this, WebSocket) + + return this.#events.open + } + + set onopen (fn) { + webidl.brandCheck(this, WebSocket) + + if (this.#events.open) { + this.removeEventListener('open', this.#events.open) + } + + if (typeof fn === 'function') { + this.#events.open = fn + this.addEventListener('open', fn) + } else { + this.#events.open = null + } + } + + get onerror () { + webidl.brandCheck(this, WebSocket) + + return this.#events.error + } + + set onerror (fn) { + webidl.brandCheck(this, WebSocket) + + if (this.#events.error) { + this.removeEventListener('error', this.#events.error) + } + + if (typeof fn === 'function') { + this.#events.error = fn + this.addEventListener('error', fn) + } else { + this.#events.error = null + } + } + + get onclose () { + webidl.brandCheck(this, WebSocket) + + return this.#events.close + } + + set onclose (fn) { + webidl.brandCheck(this, WebSocket) + + if (this.#events.close) { + this.removeEventListener('close', this.#events.close) + } + + if (typeof fn === 'function') { + this.#events.close = fn + this.addEventListener('close', fn) + } else { + this.#events.close = null + } + } + + get onmessage () { + webidl.brandCheck(this, WebSocket) + + return this.#events.message + } + + set onmessage (fn) { + webidl.brandCheck(this, WebSocket) + + if (this.#events.message) { + this.removeEventListener('message', this.#events.message) + } + + if (typeof fn === 'function') { + this.#events.message = fn + this.addEventListener('message', fn) + } else { + this.#events.message = null + } + } + + get binaryType () { + webidl.brandCheck(this, WebSocket) + + return this[kBinaryType] + } + + set binaryType (type) { + webidl.brandCheck(this, WebSocket) + + if (type !== 'blob' && type !== 'arraybuffer') { + this[kBinaryType] = 'blob' + } else { + this[kBinaryType] = type + } + } + + /** + * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol + */ + #onConnectionEstablished (response) { + // processResponse is called when the "response’s header list has been received and initialized." + // once this happens, the connection is open + this[kResponse] = response + + const parser = new ByteParser(this) + parser.on('drain', function onParserDrain () { + this.ws[kResponse].socket.resume() + }) + + response.socket.ws = this + this[kByteParser] = parser + + // 1. Change the ready state to OPEN (1). + this[kReadyState] = states.OPEN + + // 2. Change the extensions attribute’s value to the extensions in use, if + // it is not the null value. + // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1 + const extensions = response.headersList.get('sec-websocket-extensions') + + if (extensions !== null) { + this.#extensions = extensions + } + + // 3. Change the protocol attribute’s value to the subprotocol in use, if + // it is not the null value. + // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9 + const protocol = response.headersList.get('sec-websocket-protocol') + + if (protocol !== null) { + this.#protocol = protocol + } + + // 4. Fire an event named open at the WebSocket object. + fireEvent('open', this) + } +} + +// https://websockets.spec.whatwg.org/#dom-websocket-connecting +WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING +// https://websockets.spec.whatwg.org/#dom-websocket-open +WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN +// https://websockets.spec.whatwg.org/#dom-websocket-closing +WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING +// https://websockets.spec.whatwg.org/#dom-websocket-closed +WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED + +Object.defineProperties(WebSocket.prototype, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors, + url: kEnumerableProperty, + readyState: kEnumerableProperty, + bufferedAmount: kEnumerableProperty, + onopen: kEnumerableProperty, + onerror: kEnumerableProperty, + onclose: kEnumerableProperty, + close: kEnumerableProperty, + onmessage: kEnumerableProperty, + binaryType: kEnumerableProperty, + send: kEnumerableProperty, + extensions: kEnumerableProperty, + protocol: kEnumerableProperty, + [Symbol.toStringTag]: { + value: 'WebSocket', + writable: false, + enumerable: false, + configurable: true + } +}) + +Object.defineProperties(WebSocket, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors +}) + +webidl.converters['sequence'] = webidl.sequenceConverter( + webidl.converters.DOMString +) + +webidl.converters['DOMString or sequence'] = function (V) { + if (webidl.util.Type(V) === 'Object' && Symbol.iterator in V) { + return webidl.converters['sequence'](V) + } + + return webidl.converters.DOMString(V) +} + +// This implements the propsal made in https://github.com/whatwg/websockets/issues/42 +webidl.converters.WebSocketInit = webidl.dictionaryConverter([ + { + key: 'protocols', + converter: webidl.converters['DOMString or sequence'], + get defaultValue () { + return [] + } + }, + { + key: 'dispatcher', + converter: (V) => V, + get defaultValue () { + return getGlobalDispatcher() + } + }, + { + key: 'headers', + converter: webidl.nullableConverter(webidl.converters.HeadersInit) + } +]) + +webidl.converters['DOMString or sequence or WebSocketInit'] = function (V) { + if (webidl.util.Type(V) === 'Object' && !(Symbol.iterator in V)) { + return webidl.converters.WebSocketInit(V) + } + + return { protocols: webidl.converters['DOMString or sequence'](V) } +} + +webidl.converters.WebSocketSendData = function (V) { + if (webidl.util.Type(V) === 'Object') { + if (isBlobLike(V)) { + return webidl.converters.Blob(V, { strict: false }) + } + + if (ArrayBuffer.isView(V) || types.isAnyArrayBuffer(V)) { + return webidl.converters.BufferSource(V) + } + } + + return webidl.converters.USVString(V) +} + +module.exports = { + WebSocket +} + + +/***/ }), + +/***/ 2048: +/***/ ((__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__(6415)); + +var _v2 = _interopRequireDefault(__nccwpck_require__(1697)); + +var _v3 = _interopRequireDefault(__nccwpck_require__(4676)); + +var _v4 = _interopRequireDefault(__nccwpck_require__(9771)); + +var _nil = _interopRequireDefault(__nccwpck_require__(7723)); + +var _version = _interopRequireDefault(__nccwpck_require__(5868)); + +var _validate = _interopRequireDefault(__nccwpck_require__(6200)); + +var _stringify = _interopRequireDefault(__nccwpck_require__(7597)); + +var _parse = _interopRequireDefault(__nccwpck_require__(7267)); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/***/ }), + +/***/ 216: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _crypto = _interopRequireDefault(__nccwpck_require__(6982)); + +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; + +/***/ }), + +/***/ 7723: +/***/ ((__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; + +/***/ }), + +/***/ 7267: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _validate = _interopRequireDefault(__nccwpck_require__(6200)); + +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; + +/***/ }), + +/***/ 7879: +/***/ ((__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; + +/***/ }), + +/***/ 2973: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = rng; + +var _crypto = _interopRequireDefault(__nccwpck_require__(6982)); + +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); +} + +/***/ }), + +/***/ 507: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _crypto = _interopRequireDefault(__nccwpck_require__(6982)); + +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; + +/***/ }), + +/***/ 7597: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _validate = _interopRequireDefault(__nccwpck_require__(6200)); + +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; + +/***/ }), + +/***/ 6415: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _rng = _interopRequireDefault(__nccwpck_require__(2973)); + +var _stringify = _interopRequireDefault(__nccwpck_require__(7597)); + +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; + +/***/ }), + +/***/ 1697: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _v = _interopRequireDefault(__nccwpck_require__(2930)); + +var _md = _interopRequireDefault(__nccwpck_require__(216)); + +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; + +/***/ }), + +/***/ 2930: +/***/ ((__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__(7597)); + +var _parse = _interopRequireDefault(__nccwpck_require__(7267)); + +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; +} + +/***/ }), + +/***/ 4676: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _rng = _interopRequireDefault(__nccwpck_require__(2973)); + +var _stringify = _interopRequireDefault(__nccwpck_require__(7597)); + +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; + +/***/ }), + +/***/ 9771: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _v = _interopRequireDefault(__nccwpck_require__(2930)); + +var _sha = _interopRequireDefault(__nccwpck_require__(507)); + +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; + +/***/ }), + +/***/ 6200: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _regex = _interopRequireDefault(__nccwpck_require__(7879)); + +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; + +/***/ }), + +/***/ 5868: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _validate = _interopRequireDefault(__nccwpck_require__(6200)); + +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; + +/***/ }), + +/***/ 7125: +/***/ ((module) => { + +"use strict"; + + +var conversions = {}; +module.exports = conversions; + +function sign(x) { + return x < 0 ? -1 : 1; +} + +function evenRound(x) { + // Round x to the nearest integer, choosing the even integer if it lies halfway between two. + if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor) + return Math.floor(x); + } else { + return Math.round(x); + } +} + +function createNumberConversion(bitLength, typeOpts) { + if (!typeOpts.unsigned) { + --bitLength; + } + const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); + const upperBound = Math.pow(2, bitLength) - 1; + + const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); + const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); + + return function(V, opts) { + if (!opts) opts = {}; + + let x = +V; + + if (opts.enforceRange) { + if (!Number.isFinite(x)) { + throw new TypeError("Argument is not a finite number"); + } + + x = sign(x) * Math.floor(Math.abs(x)); + if (x < lowerBound || x > upperBound) { + throw new TypeError("Argument is not in byte range"); + } + + return x; + } + + if (!isNaN(x) && opts.clamp) { + x = evenRound(x); + + if (x < lowerBound) x = lowerBound; + if (x > upperBound) x = upperBound; + return x; + } + + if (!Number.isFinite(x) || x === 0) { + return 0; + } + + x = sign(x) * Math.floor(Math.abs(x)); + x = x % moduloVal; + + if (!typeOpts.unsigned && x >= moduloBound) { + return x - moduloVal; + } else if (typeOpts.unsigned) { + if (x < 0) { + x += moduloVal; + } else if (x === -0) { // don't return negative zero + return 0; + } + } + + return x; + } +} + +conversions["void"] = function () { + return undefined; +}; + +conversions["boolean"] = function (val) { + return !!val; +}; + +conversions["byte"] = createNumberConversion(8, { unsigned: false }); +conversions["octet"] = createNumberConversion(8, { unsigned: true }); + +conversions["short"] = createNumberConversion(16, { unsigned: false }); +conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); + +conversions["long"] = createNumberConversion(32, { unsigned: false }); +conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); + +conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); +conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); + +conversions["double"] = function (V) { + const x = +V; + + if (!Number.isFinite(x)) { + throw new TypeError("Argument is not a finite floating-point value"); + } + + return x; +}; + +conversions["unrestricted double"] = function (V) { + const x = +V; + + if (isNaN(x)) { + throw new TypeError("Argument is NaN"); + } + + return x; +}; + +// not quite valid, but good enough for JS +conversions["float"] = conversions["double"]; +conversions["unrestricted float"] = conversions["unrestricted double"]; + +conversions["DOMString"] = function (V, opts) { + if (!opts) opts = {}; + + if (opts.treatNullAsEmptyString && V === null) { + return ""; + } + + return String(V); +}; + +conversions["ByteString"] = function (V, opts) { + const x = String(V); + let c = undefined; + for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { + if (c > 255) { + throw new TypeError("Argument is not a valid bytestring"); + } + } + + return x; +}; + +conversions["USVString"] = function (V) { + const S = String(V); + const n = S.length; + const U = []; + for (let i = 0; i < n; ++i) { + const c = S.charCodeAt(i); + if (c < 0xD800 || c > 0xDFFF) { + U.push(String.fromCodePoint(c)); + } else if (0xDC00 <= c && c <= 0xDFFF) { + U.push(String.fromCodePoint(0xFFFD)); + } else { + if (i === n - 1) { + U.push(String.fromCodePoint(0xFFFD)); + } else { + const d = S.charCodeAt(i + 1); + if (0xDC00 <= d && d <= 0xDFFF) { + const a = c & 0x3FF; + const b = d & 0x3FF; + U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); + ++i; + } else { + U.push(String.fromCodePoint(0xFFFD)); + } + } + } + } + + return U.join(''); +}; + +conversions["Date"] = function (V, opts) { + if (!(V instanceof Date)) { + throw new TypeError("Argument is not a Date object"); + } + if (isNaN(V)) { + return undefined; + } + + return V; +}; + +conversions["RegExp"] = function (V, opts) { + if (!(V instanceof RegExp)) { + V = new RegExp(V); + } + + return V; +}; + + +/***/ }), + +/***/ 3184: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +const usm = __nccwpck_require__(905); + +exports.implementation = class URLImpl { + constructor(constructorArgs) { + const url = constructorArgs[0]; + const base = constructorArgs[1]; + + let parsedBase = null; + if (base !== undefined) { + parsedBase = usm.basicURLParse(base); + if (parsedBase === "failure") { + throw new TypeError("Invalid base URL"); + } + } + + const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase }); + if (parsedURL === "failure") { + throw new TypeError("Invalid URL"); + } + + this._url = parsedURL; + + // TODO: query stuff + } + + get href() { + return usm.serializeURL(this._url); + } + + set href(v) { + const parsedURL = usm.basicURLParse(v); + if (parsedURL === "failure") { + throw new TypeError("Invalid URL"); + } + + this._url = parsedURL; + } + + get origin() { + return usm.serializeURLOrigin(this._url); + } + + get protocol() { + return this._url.scheme + ":"; + } + + set protocol(v) { + usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" }); + } + + get username() { + return this._url.username; + } + + set username(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; + } + + usm.setTheUsername(this._url, v); + } + + get password() { + return this._url.password; + } + + set password(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; + } + + usm.setThePassword(this._url, v); + } + + get host() { + const url = this._url; + + if (url.host === null) { + return ""; + } + + if (url.port === null) { + return usm.serializeHost(url.host); + } + + return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port); + } + + set host(v) { + if (this._url.cannotBeABaseURL) { + return; + } + + usm.basicURLParse(v, { url: this._url, stateOverride: "host" }); + } + + get hostname() { + if (this._url.host === null) { + return ""; + } + + return usm.serializeHost(this._url.host); + } + + set hostname(v) { + if (this._url.cannotBeABaseURL) { + return; + } + + usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" }); + } + + get port() { + if (this._url.port === null) { + return ""; + } + + return usm.serializeInteger(this._url.port); + } + + set port(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; + } + + if (v === "") { + this._url.port = null; + } else { + usm.basicURLParse(v, { url: this._url, stateOverride: "port" }); + } + } + + get pathname() { + if (this._url.cannotBeABaseURL) { + return this._url.path[0]; + } + + if (this._url.path.length === 0) { + return ""; + } + + return "/" + this._url.path.join("/"); + } + + set pathname(v) { + if (this._url.cannotBeABaseURL) { + return; + } + + this._url.path = []; + usm.basicURLParse(v, { url: this._url, stateOverride: "path start" }); + } + + get search() { + if (this._url.query === null || this._url.query === "") { + return ""; + } + + return "?" + this._url.query; + } + + set search(v) { + // TODO: query stuff + + const url = this._url; + + if (v === "") { + url.query = null; + return; + } + + const input = v[0] === "?" ? v.substring(1) : v; + url.query = ""; + usm.basicURLParse(input, { url, stateOverride: "query" }); + } + + get hash() { + if (this._url.fragment === null || this._url.fragment === "") { + return ""; + } + + return "#" + this._url.fragment; + } + + set hash(v) { + if (v === "") { + this._url.fragment = null; + return; + } + + const input = v[0] === "#" ? v.substring(1) : v; + this._url.fragment = ""; + usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" }); + } + + toJSON() { + return this.href; + } +}; + + +/***/ }), + +/***/ 6633: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const conversions = __nccwpck_require__(7125); +const utils = __nccwpck_require__(9857); +const Impl = __nccwpck_require__(3184); + +const impl = utils.implSymbol; + +function URL(url) { + if (!this || this[impl] || !(this instanceof URL)) { + throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); + } + if (arguments.length < 1) { + throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present."); + } + const args = []; + for (let i = 0; i < arguments.length && i < 2; ++i) { + args[i] = arguments[i]; + } + args[0] = conversions["USVString"](args[0]); + if (args[1] !== undefined) { + args[1] = conversions["USVString"](args[1]); + } + + module.exports.setup(this, args); +} + +URL.prototype.toJSON = function toJSON() { + if (!this || !module.exports.is(this)) { + throw new TypeError("Illegal invocation"); + } + const args = []; + for (let i = 0; i < arguments.length && i < 0; ++i) { + args[i] = arguments[i]; + } + return this[impl].toJSON.apply(this[impl], args); +}; +Object.defineProperty(URL.prototype, "href", { + get() { + return this[impl].href; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].href = V; + }, + enumerable: true, + configurable: true +}); + +URL.prototype.toString = function () { + if (!this || !module.exports.is(this)) { + throw new TypeError("Illegal invocation"); + } + return this.href; +}; + +Object.defineProperty(URL.prototype, "origin", { + get() { + return this[impl].origin; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "protocol", { + get() { + return this[impl].protocol; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].protocol = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "username", { + get() { + return this[impl].username; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].username = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "password", { + get() { + return this[impl].password; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].password = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "host", { + get() { + return this[impl].host; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].host = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "hostname", { + get() { + return this[impl].hostname; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].hostname = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "port", { + get() { + return this[impl].port; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].port = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "pathname", { + get() { + return this[impl].pathname; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].pathname = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "search", { + get() { + return this[impl].search; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].search = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "hash", { + get() { + return this[impl].hash; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].hash = V; + }, + enumerable: true, + configurable: true +}); + + +module.exports = { + is(obj) { + return !!obj && obj[impl] instanceof Impl.implementation; + }, + create(constructorArgs, privateData) { + let obj = Object.create(URL.prototype); + this.setup(obj, constructorArgs, privateData); + return obj; + }, + setup(obj, constructorArgs, privateData) { + if (!privateData) privateData = {}; + privateData.wrapper = obj; + + obj[impl] = new Impl.implementation(constructorArgs, privateData); + obj[impl][utils.wrapperSymbol] = obj; + }, + interface: URL, + expose: { + Window: { URL: URL }, + Worker: { URL: URL } + } +}; + + + +/***/ }), + +/***/ 2686: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +exports.URL = __nccwpck_require__(6633)["interface"]; +exports.serializeURL = __nccwpck_require__(905).serializeURL; +exports.serializeURLOrigin = __nccwpck_require__(905).serializeURLOrigin; +exports.basicURLParse = __nccwpck_require__(905).basicURLParse; +exports.setTheUsername = __nccwpck_require__(905).setTheUsername; +exports.setThePassword = __nccwpck_require__(905).setThePassword; +exports.serializeHost = __nccwpck_require__(905).serializeHost; +exports.serializeInteger = __nccwpck_require__(905).serializeInteger; +exports.parseURL = __nccwpck_require__(905).parseURL; + + +/***/ }), + +/***/ 905: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + +const punycode = __nccwpck_require__(4876); +const tr46 = __nccwpck_require__(1552); + +const specialSchemes = { + ftp: 21, + file: null, + gopher: 70, + http: 80, + https: 443, + ws: 80, + wss: 443 +}; + +const failure = Symbol("failure"); + +function countSymbols(str) { + return punycode.ucs2.decode(str).length; +} + +function at(input, idx) { + const c = input[idx]; + return isNaN(c) ? undefined : String.fromCodePoint(c); +} + +function isASCIIDigit(c) { + return c >= 0x30 && c <= 0x39; +} + +function isASCIIAlpha(c) { + return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A); +} + +function isASCIIAlphanumeric(c) { + return isASCIIAlpha(c) || isASCIIDigit(c); +} + +function isASCIIHex(c) { + return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66); +} + +function isSingleDot(buffer) { + return buffer === "." || buffer.toLowerCase() === "%2e"; +} + +function isDoubleDot(buffer) { + buffer = buffer.toLowerCase(); + return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e"; +} + +function isWindowsDriveLetterCodePoints(cp1, cp2) { + return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124); +} + +function isWindowsDriveLetterString(string) { + return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|"); +} + +function isNormalizedWindowsDriveLetterString(string) { + return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":"; +} + +function containsForbiddenHostCodePoint(string) { + return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1; +} + +function containsForbiddenHostCodePointExcludingPercent(string) { + return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1; +} + +function isSpecialScheme(scheme) { + return specialSchemes[scheme] !== undefined; +} + +function isSpecial(url) { + return isSpecialScheme(url.scheme); +} + +function defaultPort(scheme) { + return specialSchemes[scheme]; +} + +function percentEncode(c) { + let hex = c.toString(16).toUpperCase(); + if (hex.length === 1) { + hex = "0" + hex; + } + + return "%" + hex; +} + +function utf8PercentEncode(c) { + const buf = new Buffer(c); + + let str = ""; + + for (let i = 0; i < buf.length; ++i) { + str += percentEncode(buf[i]); + } + + return str; +} + +function utf8PercentDecode(str) { + const input = new Buffer(str); + const output = []; + for (let i = 0; i < input.length; ++i) { + if (input[i] !== 37) { + output.push(input[i]); + } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) { + output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16)); + i += 2; + } else { + output.push(input[i]); + } + } + return new Buffer(output).toString(); +} + +function isC0ControlPercentEncode(c) { + return c <= 0x1F || c > 0x7E; +} + +const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]); +function isPathPercentEncode(c) { + return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c); +} + +const extraUserinfoPercentEncodeSet = + new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]); +function isUserinfoPercentEncode(c) { + return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c); +} + +function percentEncodeChar(c, encodeSetPredicate) { + const cStr = String.fromCodePoint(c); + + if (encodeSetPredicate(c)) { + return utf8PercentEncode(cStr); + } + + return cStr; +} + +function parseIPv4Number(input) { + let R = 10; + + if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") { + input = input.substring(2); + R = 16; + } else if (input.length >= 2 && input.charAt(0) === "0") { + input = input.substring(1); + R = 8; + } + + if (input === "") { + return 0; + } + + const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/); + if (regex.test(input)) { + return failure; + } + + return parseInt(input, R); +} + +function parseIPv4(input) { + const parts = input.split("."); + if (parts[parts.length - 1] === "") { + if (parts.length > 1) { + parts.pop(); + } + } + + if (parts.length > 4) { + return input; + } + + const numbers = []; + for (const part of parts) { + if (part === "") { + return input; + } + const n = parseIPv4Number(part); + if (n === failure) { + return input; + } + + numbers.push(n); + } + + for (let i = 0; i < numbers.length - 1; ++i) { + if (numbers[i] > 255) { + return failure; + } + } + if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { + return failure; + } + + let ipv4 = numbers.pop(); + let counter = 0; + + for (const n of numbers) { + ipv4 += n * Math.pow(256, 3 - counter); + ++counter; + } + + return ipv4; +} + +function serializeIPv4(address) { + let output = ""; + let n = address; + + for (let i = 1; i <= 4; ++i) { + output = String(n % 256) + output; + if (i !== 4) { + output = "." + output; + } + n = Math.floor(n / 256); + } + + return output; +} + +function parseIPv6(input) { + const address = [0, 0, 0, 0, 0, 0, 0, 0]; + let pieceIndex = 0; + let compress = null; + let pointer = 0; + + input = punycode.ucs2.decode(input); + + if (input[pointer] === 58) { + if (input[pointer + 1] !== 58) { + return failure; + } + + pointer += 2; + ++pieceIndex; + compress = pieceIndex; + } + + while (pointer < input.length) { + if (pieceIndex === 8) { + return failure; + } + + if (input[pointer] === 58) { + if (compress !== null) { + return failure; + } + ++pointer; + ++pieceIndex; + compress = pieceIndex; + continue; + } + + let value = 0; + let length = 0; + + while (length < 4 && isASCIIHex(input[pointer])) { + value = value * 0x10 + parseInt(at(input, pointer), 16); + ++pointer; + ++length; + } + + if (input[pointer] === 46) { + if (length === 0) { + return failure; + } + + pointer -= length; + + if (pieceIndex > 6) { + return failure; + } + + let numbersSeen = 0; + + while (input[pointer] !== undefined) { + let ipv4Piece = null; + + if (numbersSeen > 0) { + if (input[pointer] === 46 && numbersSeen < 4) { + ++pointer; + } else { + return failure; + } + } + + if (!isASCIIDigit(input[pointer])) { + return failure; + } + + while (isASCIIDigit(input[pointer])) { + const number = parseInt(at(input, pointer)); + if (ipv4Piece === null) { + ipv4Piece = number; + } else if (ipv4Piece === 0) { + return failure; + } else { + ipv4Piece = ipv4Piece * 10 + number; + } + if (ipv4Piece > 255) { + return failure; + } + ++pointer; + } + + address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; + + ++numbersSeen; + + if (numbersSeen === 2 || numbersSeen === 4) { + ++pieceIndex; + } + } + + if (numbersSeen !== 4) { + return failure; + } + + break; + } else if (input[pointer] === 58) { + ++pointer; + if (input[pointer] === undefined) { + return failure; + } + } else if (input[pointer] !== undefined) { + return failure; + } + + address[pieceIndex] = value; + ++pieceIndex; + } + + if (compress !== null) { + let swaps = pieceIndex - compress; + pieceIndex = 7; + while (pieceIndex !== 0 && swaps > 0) { + const temp = address[compress + swaps - 1]; + address[compress + swaps - 1] = address[pieceIndex]; + address[pieceIndex] = temp; + --pieceIndex; + --swaps; + } + } else if (compress === null && pieceIndex !== 8) { + return failure; + } + + return address; +} + +function serializeIPv6(address) { + let output = ""; + const seqResult = findLongestZeroSequence(address); + const compress = seqResult.idx; + let ignore0 = false; + + for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) { + if (ignore0 && address[pieceIndex] === 0) { + continue; + } else if (ignore0) { + ignore0 = false; + } + + if (compress === pieceIndex) { + const separator = pieceIndex === 0 ? "::" : ":"; + output += separator; + ignore0 = true; + continue; + } + + output += address[pieceIndex].toString(16); + + if (pieceIndex !== 7) { + output += ":"; + } + } + + return output; +} + +function parseHost(input, isSpecialArg) { + if (input[0] === "[") { + if (input[input.length - 1] !== "]") { + return failure; + } + + return parseIPv6(input.substring(1, input.length - 1)); + } + + if (!isSpecialArg) { + return parseOpaqueHost(input); + } + + const domain = utf8PercentDecode(input); + const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false); + if (asciiDomain === null) { + return failure; + } + + if (containsForbiddenHostCodePoint(asciiDomain)) { + return failure; + } + + const ipv4Host = parseIPv4(asciiDomain); + if (typeof ipv4Host === "number" || ipv4Host === failure) { + return ipv4Host; + } + + return asciiDomain; +} + +function parseOpaqueHost(input) { + if (containsForbiddenHostCodePointExcludingPercent(input)) { + return failure; + } + + let output = ""; + const decoded = punycode.ucs2.decode(input); + for (let i = 0; i < decoded.length; ++i) { + output += percentEncodeChar(decoded[i], isC0ControlPercentEncode); + } + return output; +} + +function findLongestZeroSequence(arr) { + let maxIdx = null; + let maxLen = 1; // only find elements > 1 + let currStart = null; + let currLen = 0; + + for (let i = 0; i < arr.length; ++i) { + if (arr[i] !== 0) { + if (currLen > maxLen) { + maxIdx = currStart; + maxLen = currLen; + } + + currStart = null; + currLen = 0; + } else { + if (currStart === null) { + currStart = i; + } + ++currLen; + } + } + + // if trailing zeros + if (currLen > maxLen) { + maxIdx = currStart; + maxLen = currLen; + } + + return { + idx: maxIdx, + len: maxLen + }; +} + +function serializeHost(host) { + if (typeof host === "number") { + return serializeIPv4(host); + } + + // IPv6 serializer + if (host instanceof Array) { + return "[" + serializeIPv6(host) + "]"; + } + + return host; +} + +function trimControlChars(url) { + return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, ""); +} + +function trimTabAndNewline(url) { + return url.replace(/\u0009|\u000A|\u000D/g, ""); +} + +function shortenPath(url) { + const path = url.path; + if (path.length === 0) { + return; + } + if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) { + return; + } + + path.pop(); +} + +function includesCredentials(url) { + return url.username !== "" || url.password !== ""; +} + +function cannotHaveAUsernamePasswordPort(url) { + return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file"; +} + +function isNormalizedWindowsDriveLetter(string) { + return /^[A-Za-z]:$/.test(string); +} + +function URLStateMachine(input, base, encodingOverride, url, stateOverride) { + this.pointer = 0; + this.input = input; + this.base = base || null; + this.encodingOverride = encodingOverride || "utf-8"; + this.stateOverride = stateOverride; + this.url = url; + this.failure = false; + this.parseError = false; + + if (!this.url) { + this.url = { + scheme: "", + username: "", + password: "", + host: null, + port: null, + path: [], + query: null, + fragment: null, + + cannotBeABaseURL: false + }; + + const res = trimControlChars(this.input); + if (res !== this.input) { + this.parseError = true; + } + this.input = res; + } + + const res = trimTabAndNewline(this.input); + if (res !== this.input) { + this.parseError = true; + } + this.input = res; + + this.state = stateOverride || "scheme start"; + + this.buffer = ""; + this.atFlag = false; + this.arrFlag = false; + this.passwordTokenSeenFlag = false; + + this.input = punycode.ucs2.decode(this.input); + + for (; this.pointer <= this.input.length; ++this.pointer) { + const c = this.input[this.pointer]; + const cStr = isNaN(c) ? undefined : String.fromCodePoint(c); + + // exec state machine + const ret = this["parse " + this.state](c, cStr); + if (!ret) { + break; // terminate algorithm + } else if (ret === failure) { + this.failure = true; + break; + } + } +} + +URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) { + if (isASCIIAlpha(c)) { + this.buffer += cStr.toLowerCase(); + this.state = "scheme"; + } else if (!this.stateOverride) { + this.state = "no scheme"; + --this.pointer; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) { + if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) { + this.buffer += cStr.toLowerCase(); + } else if (c === 58) { + if (this.stateOverride) { + if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) { + return false; + } + + if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) { + return false; + } + + if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") { + return false; + } + + if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) { + return false; + } + } + this.url.scheme = this.buffer; + this.buffer = ""; + if (this.stateOverride) { + return false; + } + if (this.url.scheme === "file") { + if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) { + this.parseError = true; + } + this.state = "file"; + } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) { + this.state = "special relative or authority"; + } else if (isSpecial(this.url)) { + this.state = "special authority slashes"; + } else if (this.input[this.pointer + 1] === 47) { + this.state = "path or authority"; + ++this.pointer; + } else { + this.url.cannotBeABaseURL = true; + this.url.path.push(""); + this.state = "cannot-be-a-base-URL path"; + } + } else if (!this.stateOverride) { + this.buffer = ""; + this.state = "no scheme"; + this.pointer = -1; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) { + if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) { + return failure; + } else if (this.base.cannotBeABaseURL && c === 35) { + this.url.scheme = this.base.scheme; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.url.cannotBeABaseURL = true; + this.state = "fragment"; + } else if (this.base.scheme === "file") { + this.state = "file"; + --this.pointer; + } else { + this.state = "relative"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) { + if (c === 47 && this.input[this.pointer + 1] === 47) { + this.state = "special authority ignore slashes"; + ++this.pointer; + } else { + this.parseError = true; + this.state = "relative"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) { + if (c === 47) { + this.state = "authority"; + } else { + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse relative"] = function parseRelative(c) { + this.url.scheme = this.base.scheme; + if (isNaN(c)) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + } else if (c === 47) { + this.state = "relative slash"; + } else if (c === 63) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.state = "fragment"; + } else if (isSpecial(this.url) && c === 92) { + this.parseError = true; + this.state = "relative slash"; + } else { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(0, this.base.path.length - 1); + + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) { + if (isSpecial(this.url) && (c === 47 || c === 92)) { + if (c === 92) { + this.parseError = true; + } + this.state = "special authority ignore slashes"; + } else if (c === 47) { + this.state = "authority"; + } else { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) { + if (c === 47 && this.input[this.pointer + 1] === 47) { + this.state = "special authority ignore slashes"; + ++this.pointer; + } else { + this.parseError = true; + this.state = "special authority ignore slashes"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) { + if (c !== 47 && c !== 92) { + this.state = "authority"; + --this.pointer; + } else { + this.parseError = true; + } + + return true; +}; + +URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) { + if (c === 64) { + this.parseError = true; + if (this.atFlag) { + this.buffer = "%40" + this.buffer; + } + this.atFlag = true; + + // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars + const len = countSymbols(this.buffer); + for (let pointer = 0; pointer < len; ++pointer) { + const codePoint = this.buffer.codePointAt(pointer); + + if (codePoint === 58 && !this.passwordTokenSeenFlag) { + this.passwordTokenSeenFlag = true; + continue; + } + const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode); + if (this.passwordTokenSeenFlag) { + this.url.password += encodedCodePoints; + } else { + this.url.username += encodedCodePoints; + } + } + this.buffer = ""; + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92)) { + if (this.atFlag && this.buffer === "") { + this.parseError = true; + return failure; + } + this.pointer -= countSymbols(this.buffer) + 1; + this.buffer = ""; + this.state = "host"; + } else { + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse hostname"] = +URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) { + if (this.stateOverride && this.url.scheme === "file") { + --this.pointer; + this.state = "file host"; + } else if (c === 58 && !this.arrFlag) { + if (this.buffer === "") { + this.parseError = true; + return failure; + } + + const host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + + this.url.host = host; + this.buffer = ""; + this.state = "port"; + if (this.stateOverride === "hostname") { + return false; + } + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92)) { + --this.pointer; + if (isSpecial(this.url) && this.buffer === "") { + this.parseError = true; + return failure; + } else if (this.stateOverride && this.buffer === "" && + (includesCredentials(this.url) || this.url.port !== null)) { + this.parseError = true; + return false; + } + + const host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + + this.url.host = host; + this.buffer = ""; + this.state = "path start"; + if (this.stateOverride) { + return false; + } + } else { + if (c === 91) { + this.arrFlag = true; + } else if (c === 93) { + this.arrFlag = false; + } + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) { + if (isASCIIDigit(c)) { + this.buffer += cStr; + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92) || + this.stateOverride) { + if (this.buffer !== "") { + const port = parseInt(this.buffer); + if (port > Math.pow(2, 16) - 1) { + this.parseError = true; + return failure; + } + this.url.port = port === defaultPort(this.url.scheme) ? null : port; + this.buffer = ""; + } + if (this.stateOverride) { + return false; + } + this.state = "path start"; + --this.pointer; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]); + +URLStateMachine.prototype["parse file"] = function parseFile(c) { + this.url.scheme = "file"; + + if (c === 47 || c === 92) { + if (c === 92) { + this.parseError = true; + } + this.state = "file slash"; + } else if (this.base !== null && this.base.scheme === "file") { + if (isNaN(c)) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + } else if (c === 63) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.state = "fragment"; + } else { + if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points + !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || + (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points + !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + shortenPath(this.url); + } else { + this.parseError = true; + } + + this.state = "path"; + --this.pointer; + } + } else { + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) { + if (c === 47 || c === 92) { + if (c === 92) { + this.parseError = true; + } + this.state = "file host"; + } else { + if (this.base !== null && this.base.scheme === "file") { + if (isNormalizedWindowsDriveLetterString(this.base.path[0])) { + this.url.path.push(this.base.path[0]); + } else { + this.url.host = this.base.host; + } + } + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) { + if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) { + --this.pointer; + if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) { + this.parseError = true; + this.state = "path"; + } else if (this.buffer === "") { + this.url.host = ""; + if (this.stateOverride) { + return false; + } + this.state = "path start"; + } else { + let host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + if (host === "localhost") { + host = ""; + } + this.url.host = host; + + if (this.stateOverride) { + return false; + } + + this.buffer = ""; + this.state = "path start"; + } + } else { + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse path start"] = function parsePathStart(c) { + if (isSpecial(this.url)) { + if (c === 92) { + this.parseError = true; + } + this.state = "path"; + + if (c !== 47 && c !== 92) { + --this.pointer; + } + } else if (!this.stateOverride && c === 63) { + this.url.query = ""; + this.state = "query"; + } else if (!this.stateOverride && c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } else if (c !== undefined) { + this.state = "path"; + if (c !== 47) { + --this.pointer; + } + } + + return true; +}; + +URLStateMachine.prototype["parse path"] = function parsePath(c) { + if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) || + (!this.stateOverride && (c === 63 || c === 35))) { + if (isSpecial(this.url) && c === 92) { + this.parseError = true; + } + + if (isDoubleDot(this.buffer)) { + shortenPath(this.url); + if (c !== 47 && !(isSpecial(this.url) && c === 92)) { + this.url.path.push(""); + } + } else if (isSingleDot(this.buffer) && c !== 47 && + !(isSpecial(this.url) && c === 92)) { + this.url.path.push(""); + } else if (!isSingleDot(this.buffer)) { + if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) { + if (this.url.host !== "" && this.url.host !== null) { + this.parseError = true; + this.url.host = ""; + } + this.buffer = this.buffer[0] + ":"; + } + this.url.path.push(this.buffer); + } + this.buffer = ""; + if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) { + while (this.url.path.length > 1 && this.url.path[0] === "") { + this.parseError = true; + this.url.path.shift(); + } + } + if (c === 63) { + this.url.query = ""; + this.state = "query"; + } + if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } + } else { + // TODO: If c is not a URL code point and not "%", parse error. + + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.buffer += percentEncodeChar(c, isPathPercentEncode); + } + + return true; +}; + +URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) { + if (c === 63) { + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } else { + // TODO: Add: not a URL code point + if (!isNaN(c) && c !== 37) { + this.parseError = true; + } + + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + if (!isNaN(c)) { + this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode); + } + } + + return true; +}; + +URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) { + if (isNaN(c) || (!this.stateOverride && c === 35)) { + if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") { + this.encodingOverride = "utf-8"; + } + + const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead + for (let i = 0; i < buffer.length; ++i) { + if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || + buffer[i] === 0x3C || buffer[i] === 0x3E) { + this.url.query += percentEncode(buffer[i]); + } else { + this.url.query += String.fromCodePoint(buffer[i]); + } + } + + this.buffer = ""; + if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } + } else { + // TODO: If c is not a URL code point and not "%", parse error. + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse fragment"] = function parseFragment(c) { + if (isNaN(c)) { // do nothing + } else if (c === 0x0) { + this.parseError = true; + } else { + // TODO: If c is not a URL code point and not "%", parse error. + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode); + } + + return true; +}; + +function serializeURL(url, excludeFragment) { + let output = url.scheme + ":"; + if (url.host !== null) { + output += "//"; + + if (url.username !== "" || url.password !== "") { + output += url.username; + if (url.password !== "") { + output += ":" + url.password; + } + output += "@"; + } + + output += serializeHost(url.host); + + if (url.port !== null) { + output += ":" + url.port; + } + } else if (url.host === null && url.scheme === "file") { + output += "//"; + } + + if (url.cannotBeABaseURL) { + output += url.path[0]; + } else { + for (const string of url.path) { + output += "/" + string; + } + } + + if (url.query !== null) { + output += "?" + url.query; + } + + if (!excludeFragment && url.fragment !== null) { + output += "#" + url.fragment; + } + + return output; +} + +function serializeOrigin(tuple) { + let result = tuple.scheme + "://"; + result += serializeHost(tuple.host); + + if (tuple.port !== null) { + result += ":" + tuple.port; + } + + return result; +} + +module.exports.serializeURL = serializeURL; + +module.exports.serializeURLOrigin = function (url) { + // https://url.spec.whatwg.org/#concept-url-origin + switch (url.scheme) { + case "blob": + try { + return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0])); + } catch (e) { + // serializing an opaque origin returns "null" + return "null"; + } + case "ftp": + case "gopher": + case "http": + case "https": + case "ws": + case "wss": + return serializeOrigin({ + scheme: url.scheme, + host: url.host, + port: url.port + }); + case "file": + // spec says "exercise to the reader", chrome says "file://" + return "file://"; + default: + // serializing an opaque origin returns "null" + return "null"; + } +}; + +module.exports.basicURLParse = function (input, options) { + if (options === undefined) { + options = {}; + } + + const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride); + if (usm.failure) { + return "failure"; + } + + return usm.url; +}; + +module.exports.setTheUsername = function (url, username) { + url.username = ""; + const decoded = punycode.ucs2.decode(username); + for (let i = 0; i < decoded.length; ++i) { + url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode); + } +}; + +module.exports.setThePassword = function (url, password) { + url.password = ""; + const decoded = punycode.ucs2.decode(password); + for (let i = 0; i < decoded.length; ++i) { + url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode); + } +}; + +module.exports.serializeHost = serializeHost; + +module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; + +module.exports.serializeInteger = function (integer) { + return String(integer); +}; + +module.exports.parseURL = function (input, options) { + if (options === undefined) { + options = {}; + } + + // We don't handle blobs, so this just delegates: + return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride }); +}; + + +/***/ }), + +/***/ 9857: +/***/ ((module) => { + +"use strict"; + + +module.exports.mixin = function mixin(target, source) { + const keys = Object.getOwnPropertyNames(source); + for (let i = 0; i < keys.length; ++i) { + Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); + } +}; + +module.exports.wrapperSymbol = Symbol("wrapper"); +module.exports.implSymbol = Symbol("impl"); + +module.exports.wrapperForImpl = function (impl) { + return impl[module.exports.wrapperSymbol]; +}; + +module.exports.implForWrapper = function (wrapper) { + return wrapper[module.exports.implSymbol]; +}; + + + +/***/ }), + +/***/ 8619: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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 () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AllowedLocation = void 0; +const arm_policy_1 = __nccwpck_require__(3436); +const arm_policyinsights_1 = __nccwpck_require__(4735); +const PolicyService_1 = __nccwpck_require__(7570); +const ManagmentGroupAssignment_1 = __nccwpck_require__(7393); +const SubscriptionAssignment_1 = __nccwpck_require__(8283); +const core = __importStar(__nccwpck_require__(7484)); +class AllowedLocation { + static async getAllowedLocation(credentials, subscriptionId) { + const policyService = new PolicyService_1.PolicyService(new arm_policy_1.PolicyClient(credentials, subscriptionId)); + const policyInsightsClient = new arm_policyinsights_1.PolicyInsightsClient(credentials, subscriptionId); + const managementGroupAssignment = new ManagmentGroupAssignment_1.ManagementGroupAssignment(policyService, policyInsightsClient, subscriptionId, credentials); + const subscriptionAssignment = new SubscriptionAssignment_1.SubscriptionAssignment(policyService, policyInsightsClient, subscriptionId); + console.log('Getting policy assignments of allowed locations'); + const allowedLocationPolicyAssignments = await policyService.getPolicyAssignmentsOfAllowedLocations(); + if (await managementGroupAssignment.policyCheck(allowedLocationPolicyAssignments)) { + console.log(`ALLOWED LOCATION POLICY IN PLACE ON MANAGEMENT GROUP LEVEL: true`); + core.exportVariable('allowedLocationPolicy', 'true'); + return; + } + else { + const isSubscriptionLevelPolicyCheckPassed = await subscriptionAssignment.policyCheck(allowedLocationPolicyAssignments); + console.log(`ALLOWED LOCATION POLICY IN PLACE WITH LOCATIONS ONLY IN EUROPE ON SUBSCRIPTION LEVEL: ${isSubscriptionLevelPolicyCheckPassed.toString()}`); + core.exportVariable('allowedLocationPolicy', isSubscriptionLevelPolicyCheckPassed.toString()); + return; + } + } +} +exports.AllowedLocation = AllowedLocation; + + +/***/ }), + +/***/ 8551: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isLocationAllowed = isLocationAllowed; +const allowedLocations = [ + 'europe', + 'northeurope', + 'westeurope', + 'swedencentral', + 'sweden', + 'france', + 'francecentral', + 'francesouth', + 'germany', + 'germanynorth', + 'germanywest', + 'germanywestcentral', + 'norway', + 'norwayeast', + 'norwaywest', +]; +function isLocationAllowed(location) { + if (location === undefined || location === null || location.length === 0) { + throw Error('Locations must contain values'); + } + let policyValid = true; + for (let index = 0; index < location.length; index++) { + if (!allowedLocations.includes(location[index])) { + console.log(`${location[index]} is not in the list of allowed locations. Contact the CyDig team if the location is in Europe`); + policyValid = false; + } + } + return policyValid; +} + + +/***/ }), + +/***/ 6830: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.enabledPolicyFilter = enabledPolicyFilter; +function enabledPolicyFilter(allowedLocationPolicy) { + return allowedLocationPolicy.filter((x) => checkIfPolicyIsEnabled(x)); +} +function checkIfPolicyIsEnabled(policyAssigment) { + return policyAssigment.enforcementMode !== 'DoNotEnforce'; +} + + +/***/ }), + +/***/ 7393: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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 () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ManagementGroupAssignment = void 0; +const EnabledPolicyFilter_1 = __nccwpck_require__(6830); +const core = __importStar(__nccwpck_require__(7484)); +class ManagementGroupAssignment { + policyService; + policyInsightClient; + subscriptionId; + credentials; + constructor(policyService, policyInsightClient, subscriptionId, credentials) { + this.policyService = policyService; + this.policyInsightClient = policyInsightClient; + this.subscriptionId = subscriptionId; + this.credentials = credentials; + } + async policyCheck(policyAssignment) { + console.log('Checking if there is a policy on management group level'); + const managementGroupAllowedLocationPolicy = this.getPolicy(policyAssignment); + const allowedLocationPolicyEnabled = (0, EnabledPolicyFilter_1.enabledPolicyFilter)(managementGroupAllowedLocationPolicy); + if (await this.policyService.isPolicyValid(allowedLocationPolicyEnabled)) { + await this.setNumberOfNonAndCompliantResources(allowedLocationPolicyEnabled); + return true; + } + return false; + } + getPolicy(policyAssignment) { + const policies = []; + for (let i = 0; i < policyAssignment.length; i++) { + if (policyAssignment[i].scope?.startsWith('/providers/Microsoft.Management/managementGroups/')) { + const policy = { + name: policyAssignment[i]?.name, + subscriptionId: this.subscriptionId, + managementGroup: policyAssignment[i].scope, + allowedLocations: policyAssignment[i].parameters?.listOfAllowedLocations.value, + enforcementMode: policyAssignment[i]?.enforcementMode, + }; + policies.push(policy); + } + } + return policies; + } + async setNumberOfNonAndCompliantResources(managementGroupAllowedLocationPolicy) { + const result = await this.policyInsightClient.policyStates.summarizeForManagementGroup(managementGroupAllowedLocationPolicy[0].managementGroup?.split('/').pop(), { + queryOptions: { + filter: `policyDefinitionName eq 'e56962a6-4747-49cd-b67b-bf8b01975c4c' and contains(resourceId,'/subscriptions/${managementGroupAllowedLocationPolicy[0].subscriptionId}')`, + }, + }); + let numCompliantResources = 0; + let numNonCompliantResources = 0; + result.value?.[0].policyAssignments?.forEach((policyAssignment) => { + if (policyAssignment.policyAssignmentId?.startsWith(managementGroupAllowedLocationPolicy[0].managementGroup?.toLowerCase())) { + policyAssignment.results?.resourceDetails?.forEach((state) => { + if (state.complianceState == 'compliant') { + numCompliantResources = state.count || 0; + } + if (state.complianceState == 'noncompliant') { + numNonCompliantResources = state.count || 0; + } + }); + } + }); + console.log(`NUMBER OF COMPLIANT RESOURCES: ${numCompliantResources.toString()}`); + core.exportVariable('compliantResources', numCompliantResources.toString()); + console.log(`NUMBER OF NON-COMPLIANT RESOURCES: ${numNonCompliantResources.toString()}`); + core.exportVariable('nonCompliantResources', numNonCompliantResources.toString()); + return; + } +} +exports.ManagementGroupAssignment = ManagementGroupAssignment; + + +/***/ }), + +/***/ 7570: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PolicyService = void 0; +const AllowedLocations_1 = __nccwpck_require__(8551); +class PolicyService { + policyClient; + constructor(policyClient) { + this.policyClient = policyClient; + } + async getPolicyAssignmentsOfAllowedLocations() { + const allowedLocationPolicyAssignments = []; + const allPolicyAssignments = this.policyClient.policyAssignments.list(); + // eslint-disable-next-line + let policyAssignment = await allPolicyAssignments.next(); + while (!policyAssignment.done) { + if (policyAssignment.value.displayName == 'Allowed locations') { + allowedLocationPolicyAssignments.push(policyAssignment.value); + } + policyAssignment = await allPolicyAssignments.next(); + } + return allowedLocationPolicyAssignments; + } + async isPolicyValid(allowedLocationPolicyEnabled) { + console.log('Checking if the policy is enabled'); + if (allowedLocationPolicyEnabled.length > 0) { + const locationsInPolicy = this.getLocationsInPolicy(allowedLocationPolicyEnabled); + if (locationsInPolicy.length > 0) { + console.log('Checking if the policy only contains allowed locations'); + return (0, AllowedLocations_1.isLocationAllowed)(locationsInPolicy); + } + } + return false; + } + getLocationsInPolicy(allowedLocationPolicyEnabled) { + let locations = []; + for (let i = 0; i < allowedLocationPolicyEnabled.length; i++) { + locations = locations.concat(allowedLocationPolicyEnabled[i].allowedLocations); + } + return locations; + } +} +exports.PolicyService = PolicyService; + + +/***/ }), + +/***/ 8283: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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 () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SubscriptionAssignment = void 0; +const EnabledPolicyFilter_1 = __nccwpck_require__(6830); +const core = __importStar(__nccwpck_require__(7484)); +class SubscriptionAssignment { + policyService; + policyInsightClient; + subscriptionId; + constructor(policyService, policyInsightClient, subscriptionId) { + this.policyService = policyService; + this.policyInsightClient = policyInsightClient; + this.subscriptionId = subscriptionId; + } + async policyCheck(policyAssigment) { + console.log('\nChecking if there is a policy on subscription level'); + const subscriptionAllowedLocationPolicy = this.getPolicy(policyAssigment); + const allowedLocationPolicyEnabled = (0, EnabledPolicyFilter_1.enabledPolicyFilter)(subscriptionAllowedLocationPolicy); + if (await this.policyService.isPolicyValid(allowedLocationPolicyEnabled)) { + await this.setNumberOfNonAndCompliantResources(allowedLocationPolicyEnabled); + return true; + } + return false; + } + getPolicy(policyAssignment) { + const policies = []; + for (let i = 0; i < policyAssignment.length; i++) { + if (policyAssignment[i].scope == `/subscriptions/${this.subscriptionId}`) { + const policy = { + name: policyAssignment[i].name, + subscriptionId: this.subscriptionId, + managementGroup: policyAssignment[i].scope, + allowedLocations: policyAssignment[i].parameters?.listOfAllowedLocations.value, + enforcementMode: policyAssignment[i]?.enforcementMode, + }; + policies.push(policy); + } + } + return policies; + } + async setNumberOfNonAndCompliantResources(allowedLocationPolicyEnabled) { + const policyResult = this.policyInsightClient.policyStates.listQueryResultsForSubscriptionLevelPolicyAssignment('latest', this.subscriptionId, allowedLocationPolicyEnabled[0].name); + // eslint-disable-next-line + let policy = await policyResult.next(); + let numCompliantResources = 0; + let numNonCompliantResources = 0; + while (!policy.done) { + if (policy.value.isCompliant) { + numCompliantResources++; + } + else { + numNonCompliantResources++; + console.debug(`Resource outside of EU: ${policy.value.resourceId?.split('/').pop()}`); + } + policy = await policyResult.next(); + } + console.log(`NUMBER OF COMPLIANT RESOURCES: ${numCompliantResources.toString()}`); + console.log(`NUMBER OF NON-COMPLIANT RESOURCES: ${numNonCompliantResources.toString()}`); + core.exportVariable('compliantResources', numCompliantResources.toString()); + core.exportVariable('nonCompliantResources', numNonCompliantResources.toString()); + } +} +exports.SubscriptionAssignment = SubscriptionAssignment; + + +/***/ }), + +/***/ 3152: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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 () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DeployedVirtualMachines = void 0; +const arm_compute_1 = __nccwpck_require__(7255); +const core = __importStar(__nccwpck_require__(7484)); +class DeployedVirtualMachines { + static async getDeployedVirtualMachines(credentials, subscriptionId) { + console.log('Getting number of deployed virtual machines'); + const computeManagementClient = new arm_compute_1.ComputeManagementClient(credentials, subscriptionId); + const allVirtualMachines = []; + for await (const virtualMachine of computeManagementClient.virtualMachines.listAll()) { + allVirtualMachines.push(virtualMachine); + } + console.log(`NUMBER OF DEPLOYED VIRTUAL MACHINES: ${allVirtualMachines.length}`); + core.exportVariable('numberOfDeployedVMs', allVirtualMachines.length.toString()); + } +} +exports.DeployedVirtualMachines = DeployedVirtualMachines; + + +/***/ }), + +/***/ 4385: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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 () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getContentOfFile = getContentOfFile; +const fs = __importStar(__nccwpck_require__(9896)); +const path = __importStar(__nccwpck_require__(6928)); +function getContentOfFile(jsonPath) { + const jsonFilePath = path.resolve(__dirname, path.relative(__dirname, path.normalize(jsonPath).replace(/^(\.\.(\/|\\|$))+/, ''))); + const fileContent = fs.readFileSync(jsonFilePath, { encoding: 'utf-8' }); + const cydigConfig = JSON.parse(fileContent); + return cydigConfig; +} + + +/***/ }), + +/***/ 9407: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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 () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.run = run; +const core = __importStar(__nccwpck_require__(7484)); +const identity_1 = __nccwpck_require__(3983); +const SecureScore_1 = __nccwpck_require__(7804); +const DeployedVirtualMachines_1 = __nccwpck_require__(3152); +const allowedlocation_1 = __nccwpck_require__(8619); +const usersinproduction_1 = __nccwpck_require__(6724); +const JsonService_1 = __nccwpck_require__(4385); +/** + * The main function for the action. + * @returns {Promise} Resolves when the action is complete. + */ +async function run() { + try { + const cydigConfig = (0, JsonService_1.getContentOfFile)(core.getInput('cydigConfigPath')); + if (cydigConfig.usingAzure) { + const credentials = new identity_1.DefaultAzureCredential(); + const subscriptionId = core.getInput('subscription'); + if (!subscriptionId) + throw new Error('Could not get subscriptionId'); + await SecureScore_1.SecureScore.getSecureScore(credentials, subscriptionId); + await DeployedVirtualMachines_1.DeployedVirtualMachines.getDeployedVirtualMachines(credentials, subscriptionId); + await allowedlocation_1.AllowedLocation.getAllowedLocation(credentials, subscriptionId); + await usersinproduction_1.UsersInProduction.getUsersInProduction(credentials, subscriptionId); + } + } + catch (error) { + core.setFailed(error.message); + } +} +run(); + + +/***/ }), + +/***/ 7804: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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 () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SecureScore = void 0; +const arm_security_1 = __nccwpck_require__(704); +const core = __importStar(__nccwpck_require__(7484)); +class SecureScore { + static async getSecureScore(credentials, subscriptionId) { + const client = new arm_security_1.SecurityCenter(credentials, subscriptionId); + console.log('Getting Azure Secure Score'); + const secureScoreObject = await client.secureScores.get('ascScore'); + if (secureScoreObject?.['percentage']) { + const secureScorePercent = Math.round(secureScoreObject?.['percentage'] * 100); + console.log(`AZURE SECURE SCORE: ${secureScorePercent}%`); + core.exportVariable('secureScore', secureScorePercent.toString()); + } + else { + console.log('Something went wrong or no secure score found'); + } + } +} +exports.SecureScore = SecureScore; + + +/***/ }), + +/***/ 6724: +/***/ (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; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (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 () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UsersInProduction = void 0; +const AzureRoleService_1 = __nccwpck_require__(3088); +const core = __importStar(__nccwpck_require__(7484)); +class UsersInProduction { + static async getUsersInProduction(credentials, subscriptionId) { + let disablePermissionWarning = core.getInput('disableWarningUsersInProd'); + if (!disablePermissionWarning) { + disablePermissionWarning = 'false'; + } + const azureRoleService = new AzureRoleService_1.AzureRoleService(subscriptionId, credentials); + await azureRoleService.setRoleAssignmentForSubscription(); + const highPrivRoleAssignments = await azureRoleService.getHighPrivRoleAssignments(); + const lowPrivRoleAssignments = await azureRoleService.getLowPrivRoleAssignments(); + const mediumPrivRoleAssignments = await azureRoleService.getMediumPrivRoleAssignments(); + const numberOfHighPrivRoleAssignments = await azureRoleService.getNumberOfAssignments(highPrivRoleAssignments); + const numberOfMediumPrivRoleAssignments = await azureRoleService.getNumberOfAssignments(mediumPrivRoleAssignments); + const numberOfLowPrivRoleAssignments = await azureRoleService.getNumberOfAssignments(lowPrivRoleAssignments); + console.log(`Number of high privileged users in Azure: ${numberOfHighPrivRoleAssignments} `); + await azureRoleService.printRoles(highPrivRoleAssignments); + console.log(`\nNumber of medium privileged users in Azure: ${numberOfMediumPrivRoleAssignments} `); + await azureRoleService.printRoles(mediumPrivRoleAssignments); + console.log(`\nNumber of low privileged users in Azure: ${numberOfLowPrivRoleAssignments} `); + await azureRoleService.printRoles(lowPrivRoleAssignments); + core.exportVariable('numUserInProdSeverity1', numberOfLowPrivRoleAssignments.toString()); + core.exportVariable('numUserInProdSeverity2', numberOfMediumPrivRoleAssignments.toString()); + core.exportVariable('numUserInProdSeverity3', numberOfHighPrivRoleAssignments.toString()); + // Refactor the logs to be adjusted to github actions instead of azure devops tasks service connection + if (azureRoleService.insufficientPermission && disablePermissionWarning && !JSON.parse(disablePermissionWarning)) { + core.warning(`The workflow does not have access to view members in a group in your Azure Subscription, therefore the control will add 5 members for each group it finds. + Follow these steps to give the workflow the necessary permission: + 1. Go to the App Registration connected to your workflow in the Azure portal. + 2. Go to API permission and press Add a permission. + 3. Press Microsoft Graph --> Application permission. + 4. Choose the permission GroupMember.Read.All and press Add permission. + 5. An admin of your Azure tenant must give admin consent in order for the permission to start working.`); + } + else { + console.log(`The workflow does not have access to view members in a group in your Azure Subscription, therefore the control will add 5 members for each group it finds. + Follow these steps to give the workflow the necessary permission: + 1. Go to the App Registration connected to your workflow in the Azure portal. + 2. Go to API permission and press Add a permission. + 3. Press Microsoft Graph --> Application permission. + 4. Choose the permission GroupMember.Read.All and press Add permission. + 5. An admin of your Azure tenant must give admin consent in order for the permission to start working.`); + } + return; + } +} +exports.UsersInProduction = UsersInProduction; + + +/***/ }), + +/***/ 3088: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AzureRoleService = void 0; +const arm_authorization_1 = __nccwpck_require__(1043); +const microsoft_graph_client_1 = __nccwpck_require__(1899); +__nccwpck_require__(8109); +const azureTokenCredentials_1 = __nccwpck_require__(8316); +class AzureRoleService { + scope; + authManagementClient; + client; + roleAssignments; + roleDefinitionsHighPriv; + roleDefinitionsLowPriv; + insufficientPermission = false; + constructor(subscriptionId, credentials) { + this.scope = `/subscriptions/${subscriptionId}`; + this.authManagementClient = new arm_authorization_1.AuthorizationManagementClient(credentials, subscriptionId); + this.client = this.getClient(credentials); + this.roleAssignments = []; + this.roleDefinitionsHighPriv = []; + this.roleDefinitionsLowPriv = []; + } + getClient(credentials) { + const scopes = 'https://graph.microsoft.com/.default'; + const authProvider = new azureTokenCredentials_1.TokenCredentialAuthenticationProvider(credentials, { + scopes: [scopes], + }); + const client = microsoft_graph_client_1.Client.initWithMiddleware({ + debugLogging: true, + authProvider, + }); + return client; + } + async setRoleAssignmentForSubscription() { + // Convert the iterator to an array + const roleAssignmentsArray = []; + for await (const roleAssignment of this.authManagementClient.roleAssignments.listForScope(this.scope)) { + roleAssignmentsArray.push(roleAssignment); + } + // Now, you can apply the filter on the array + this.roleAssignments = roleAssignmentsArray.filter((roleAssignment) => { + return ((roleAssignment.principalType === 'User' || roleAssignment.principalType === 'Group') && + (roleAssignment.scope === this.scope || + roleAssignment.scope === '/' || + roleAssignment.scope?.startsWith('/providers/Microsoft.Management/managementGroups/'))); + }); + } + async getHighPrivRoleAssignments() { + // Convert the iterator to an array + const roleDefinitionsArray = []; + for await (const roleDefinition of this.authManagementClient.roleDefinitions.list(this.scope)) { + roleDefinitionsArray.push(roleDefinition); + } + // Filter the role definitions + this.roleDefinitionsHighPriv = roleDefinitionsArray.filter((roleDefinition) => roleDefinition.roleName?.includes('Owner') || roleDefinition.roleName?.includes('Admin')); + // Filter the role assignments based on filtered role definitions + const highPrivRoleAssignments = this.roleAssignments.filter((roleAssignment) => this.filterArray(this.roleDefinitionsHighPriv, roleAssignment)); + return highPrivRoleAssignments; + } + async getLowPrivRoleAssignments() { + // Convert the iterator to an array + const roleDefinitionsArray = []; + for await (const roleDefinition of this.authManagementClient.roleDefinitions.list(this.scope)) { + roleDefinitionsArray.push(roleDefinition); + } + // Filter the role definitions + this.roleDefinitionsLowPriv = roleDefinitionsArray.filter((roleDefinition) => roleDefinition.roleName?.includes('Reader')); + // Filter the role assignments based on filtered role definitions + const lowPrivRoleAssignments = this.roleAssignments.filter((roleAssignment) => this.filterArray(this.roleDefinitionsLowPriv, roleAssignment)); + return lowPrivRoleAssignments; + } + async getMediumPrivRoleAssignments() { + const mediumPrivRoleAssignments = this.roleAssignments.filter((roleAssignment) => !(this.filterArray(this.roleDefinitionsLowPriv, roleAssignment) || + this.filterArray(this.roleDefinitionsHighPriv, roleAssignment))); + return mediumPrivRoleAssignments; + } + async getNumberOfAssignments(roleAssignments) { + let numberOfAssignments = 0; + const roleAssignmentsIds = []; // Initialize an array to store unique principalId values + for (let i = 0; i < roleAssignments.length; i++) { + if (roleAssignments[i].principalType === 'Group') { + try { + const numberOfMembers = await this.getCountMembersOfGroup(roleAssignments[i].principalId); + numberOfAssignments += numberOfMembers; + } + catch (err) { + if (err.code === 'Authorization_RequestDenied') { + this.insufficientPermission = true; + console.log('Found a group and your pipeline does not have access to count the members. Will add 5 users to the count.'); + numberOfAssignments += 5; + } + else { + throw err; + } + } + } + else { + if (roleAssignmentsIds.indexOf(roleAssignments[i].principalId) === -1) { + roleAssignmentsIds.push(roleAssignments[i].principalId); + numberOfAssignments++; + } + } + } + return numberOfAssignments; + } + filterArray(roleDefinitions, roleAssignment) { + return roleDefinitions.some((roleDefinition) => roleDefinition.id == roleAssignment.roleDefinitionId); + } + async getCountMembersOfGroup(groupId) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const members = await this.client.api(`/groups/${groupId}/members`).get(); + let numberOfMembers = 0; + for (let i = 0; i < members.value.length; i++) { + if (members.value[i]['@odata.type'] === '#microsoft.graph.group') { + const numberOfMembersInGroupInGroup = await this.getCountMembersOfGroup(members.value[i].id); + numberOfMembers += numberOfMembersInGroupInGroup; + } + else { + numberOfMembers++; + } + } + return numberOfMembers; + } + async printRoles(roleAssignments) { + const roleDefinitionIds = [ + ...new Set(roleAssignments.map((roleAssignment) => roleAssignment.roleDefinitionId)), + ]; + console.log('Roles:'); + for (let i = 0; i < roleDefinitionIds.length; i++) { + console.log((await this.authManagementClient.roleDefinitions.getById(roleDefinitionIds[i])).roleName); + } + } +} +exports.AzureRoleService = AzureRoleService; + + +/***/ }), + +/***/ 2078: +/***/ ((module) => { + +module.exports = eval("require")("encoding"); + + +/***/ }), + +/***/ 2613: +/***/ ((module) => { + +"use strict"; +module.exports = require("assert"); + +/***/ }), + +/***/ 290: +/***/ ((module) => { + +"use strict"; +module.exports = require("async_hooks"); + +/***/ }), + +/***/ 181: +/***/ ((module) => { + +"use strict"; +module.exports = require("buffer"); + +/***/ }), + +/***/ 5317: +/***/ ((module) => { + +"use strict"; +module.exports = require("child_process"); + +/***/ }), + +/***/ 4236: +/***/ ((module) => { + +"use strict"; +module.exports = require("console"); + +/***/ }), + +/***/ 6982: +/***/ ((module) => { + +"use strict"; +module.exports = require("crypto"); + +/***/ }), + +/***/ 1637: +/***/ ((module) => { + +"use strict"; +module.exports = require("diagnostics_channel"); + +/***/ }), + +/***/ 4434: +/***/ ((module) => { + +"use strict"; +module.exports = require("events"); + +/***/ }), + +/***/ 9896: +/***/ ((module) => { + +"use strict"; +module.exports = require("fs"); + +/***/ }), + +/***/ 1943: +/***/ ((module) => { + +"use strict"; +module.exports = require("fs/promises"); + +/***/ }), + +/***/ 8611: +/***/ ((module) => { + +"use strict"; +module.exports = require("http"); + +/***/ }), + +/***/ 5675: +/***/ ((module) => { + +"use strict"; +module.exports = require("http2"); + +/***/ }), + +/***/ 5692: +/***/ ((module) => { + +"use strict"; +module.exports = require("https"); + +/***/ }), + +/***/ 9278: +/***/ ((module) => { + +"use strict"; +module.exports = require("net"); + +/***/ }), + +/***/ 7598: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:crypto"); + +/***/ }), + +/***/ 8474: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:events"); + +/***/ }), + +/***/ 1455: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:fs/promises"); + +/***/ }), + +/***/ 7067: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:http"); + +/***/ }), + +/***/ 4708: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:https"); + +/***/ }), + +/***/ 8161: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:os"); + +/***/ }), + +/***/ 1708: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:process"); + +/***/ }), + +/***/ 7075: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:stream"); + +/***/ }), + +/***/ 7975: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:util"); + +/***/ }), + +/***/ 8522: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:zlib"); + +/***/ }), + +/***/ 857: +/***/ ((module) => { + +"use strict"; +module.exports = require("os"); + +/***/ }), + +/***/ 6928: +/***/ ((module) => { + +"use strict"; +module.exports = require("path"); + +/***/ }), + +/***/ 2987: +/***/ ((module) => { + +"use strict"; +module.exports = require("perf_hooks"); + +/***/ }), + +/***/ 4876: +/***/ ((module) => { + +"use strict"; +module.exports = require("punycode"); + +/***/ }), + +/***/ 3480: +/***/ ((module) => { + +"use strict"; +module.exports = require("querystring"); + +/***/ }), + +/***/ 2203: +/***/ ((module) => { + +"use strict"; +module.exports = require("stream"); + +/***/ }), + +/***/ 3774: +/***/ ((module) => { + +"use strict"; +module.exports = require("stream/web"); + +/***/ }), + +/***/ 3193: +/***/ ((module) => { + +"use strict"; +module.exports = require("string_decoder"); + +/***/ }), + +/***/ 3557: +/***/ ((module) => { + +"use strict"; +module.exports = require("timers"); + +/***/ }), + +/***/ 4756: +/***/ ((module) => { + +"use strict"; +module.exports = require("tls"); + +/***/ }), + +/***/ 2018: +/***/ ((module) => { + +"use strict"; +module.exports = require("tty"); + +/***/ }), + +/***/ 7016: +/***/ ((module) => { + +"use strict"; +module.exports = require("url"); + +/***/ }), + +/***/ 9023: +/***/ ((module) => { + +"use strict"; +module.exports = require("util"); + +/***/ }), + +/***/ 8253: +/***/ ((module) => { + +"use strict"; +module.exports = require("util/types"); + +/***/ }), + +/***/ 8167: +/***/ ((module) => { + +"use strict"; +module.exports = require("worker_threads"); + +/***/ }), + +/***/ 3106: +/***/ ((module) => { + +"use strict"; +module.exports = require("zlib"); + +/***/ }), + +/***/ 7698: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.authorizeRequestOnClaimChallenge = exports.parseCAEChallenge = void 0; +const log_js_1 = __nccwpck_require__(9994); +const base64_js_1 = __nccwpck_require__(741); +/** + * Converts: `Bearer a="b", c="d", Bearer d="e", f="g"`. + * Into: `[ { a: 'b', c: 'd' }, { d: 'e', f: 'g' } ]`. + * + * @internal + */ +function parseCAEChallenge(challenges) { + const bearerChallenges = `, ${challenges.trim()}`.split(", Bearer ").filter((x) => x); + return bearerChallenges.map((challenge) => { + const challengeParts = `${challenge.trim()}, `.split('", ').filter((x) => x); + const keyValuePairs = challengeParts.map((keyValue) => (([key, value]) => ({ [key]: value }))(keyValue.trim().split('="'))); + // Key-value pairs to plain object: + return keyValuePairs.reduce((a, b) => (Object.assign(Object.assign({}, a), b)), {}); + }); +} +exports.parseCAEChallenge = parseCAEChallenge; +/** + * This function can be used as a callback for the `bearerTokenAuthenticationPolicy` of `@azure/core-rest-pipeline`, to support CAE challenges: + * [Continuous Access Evaluation](https://docs.microsoft.com/azure/active-directory/conditional-access/concept-continuous-access-evaluation). + * + * Call the `bearerTokenAuthenticationPolicy` with the following options: + * + * ```ts + * import { bearerTokenAuthenticationPolicy } from "@azure/core-rest-pipeline"; + * import { authorizeRequestOnClaimChallenge } from "@azure/core-client"; + * + * const bearerTokenAuthenticationPolicy = bearerTokenAuthenticationPolicy({ + * authorizeRequestOnChallenge: authorizeRequestOnClaimChallenge + * }); + * ``` + * + * Once provided, the `bearerTokenAuthenticationPolicy` policy will internally handle Continuous Access Evaluation (CAE) challenges. + * When it can't complete a challenge it will return the 401 (unauthorized) response from ARM. + * + * Example challenge with claims: + * + * ``` + * Bearer authorization_uri="https://login.windows-ppe.net/", error="invalid_token", + * error_description="User session has been revoked", + * claims="eyJhY2Nlc3NfdG9rZW4iOnsibmJmIjp7ImVzc2VudGlhbCI6dHJ1ZSwgInZhbHVlIjoiMTYwMzc0MjgwMCJ9fX0=" + * ``` + */ +async function authorizeRequestOnClaimChallenge(onChallengeOptions) { + const { scopes, response } = onChallengeOptions; + const logger = onChallengeOptions.logger || log_js_1.logger; + const challenge = response.headers.get("WWW-Authenticate"); + if (!challenge) { + logger.info(`The WWW-Authenticate header was missing. Failed to perform the Continuous Access Evaluation authentication flow.`); + return false; + } + const challenges = parseCAEChallenge(challenge) || []; + const parsedChallenge = challenges.find((x) => x.claims); + if (!parsedChallenge) { + logger.info(`The WWW-Authenticate header was missing the necessary "claims" to perform the Continuous Access Evaluation authentication flow.`); + return false; + } + const accessToken = await onChallengeOptions.getAccessToken(parsedChallenge.scope ? [parsedChallenge.scope] : scopes, { + claims: (0, base64_js_1.decodeStringToString)(parsedChallenge.claims), + }); + if (!accessToken) { + return false; + } + onChallengeOptions.request.headers.set("Authorization", `Bearer ${accessToken.token}`); + return true; +} +exports.authorizeRequestOnClaimChallenge = authorizeRequestOnClaimChallenge; +//# sourceMappingURL=authorizeRequestOnClaimChallenge.js.map + +/***/ }), + +/***/ 7454: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.authorizeRequestOnTenantChallenge = void 0; +/** + * A set of constants used internally when processing requests. + */ +const Constants = { + DefaultScope: "/.default", + /** + * Defines constants for use with HTTP headers. + */ + HeaderConstants: { + /** + * The Authorization header. + */ + AUTHORIZATION: "authorization", + }, +}; +function isUuid(text) { + return /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/.test(text); +} +/** + * Defines a callback to handle auth challenge for Storage APIs. + * This implements the bearer challenge process described here: https://docs.microsoft.com/rest/api/storageservices/authorize-with-azure-active-directory#bearer-challenge + * Handling has specific features for storage that departs to the general AAD challenge docs. + **/ +const authorizeRequestOnTenantChallenge = async (challengeOptions) => { + const requestOptions = requestToOptions(challengeOptions.request); + const challenge = getChallenge(challengeOptions.response); + if (challenge) { + const challengeInfo = parseChallenge(challenge); + const challengeScopes = buildScopes(challengeOptions, challengeInfo); + const tenantId = extractTenantId(challengeInfo); + if (!tenantId) { + return false; + } + const accessToken = await challengeOptions.getAccessToken(challengeScopes, Object.assign(Object.assign({}, requestOptions), { tenantId })); + if (!accessToken) { + return false; + } + challengeOptions.request.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${accessToken.token}`); + return true; + } + return false; +}; +exports.authorizeRequestOnTenantChallenge = authorizeRequestOnTenantChallenge; +/** + * Extracts the tenant id from the challenge information + * The tenant id is contained in the authorization_uri as the first + * path part. + */ +function extractTenantId(challengeInfo) { + const parsedAuthUri = new URL(challengeInfo.authorization_uri); + const pathSegments = parsedAuthUri.pathname.split("/"); + const tenantId = pathSegments[1]; + if (tenantId && isUuid(tenantId)) { + return tenantId; + } + return undefined; +} +/** + * Builds the authentication scopes based on the information that comes in the + * challenge information. Scopes url is present in the resource_id, if it is empty + * we keep using the original scopes. + */ +function buildScopes(challengeOptions, challengeInfo) { + if (!challengeInfo.resource_id) { + return challengeOptions.scopes; + } + const challengeScopes = new URL(challengeInfo.resource_id); + challengeScopes.pathname = Constants.DefaultScope; + let scope = challengeScopes.toString(); + if (scope === "https://disk.azure.com/.default") { + // the extra slash is required by the service + scope = "https://disk.azure.com//.default"; + } + return [scope]; +} +/** + * We will retrieve the challenge only if the response status code was 401, + * and if the response contained the header "WWW-Authenticate" with a non-empty value. + */ +function getChallenge(response) { + const challenge = response.headers.get("WWW-Authenticate"); + if (response.status === 401 && challenge) { + return challenge; + } + return; +} +/** + * Converts: `Bearer a="b" c="d"`. + * Into: `[ { a: 'b', c: 'd' }]`. + * + * @internal + */ +function parseChallenge(challenge) { + const bearerChallenge = challenge.slice("Bearer ".length); + const challengeParts = `${bearerChallenge.trim()} `.split(" ").filter((x) => x); + const keyValuePairs = challengeParts.map((keyValue) => (([key, value]) => ({ [key]: value }))(keyValue.trim().split("="))); + // Key-value pairs to plain object: + return keyValuePairs.reduce((a, b) => (Object.assign(Object.assign({}, a), b)), {}); +} +/** + * Extracts the options form a Pipeline Request for later re-use + */ +function requestToOptions(request) { + return { + abortSignal: request.abortSignal, + requestOptions: { + timeout: request.timeout, + }, + tracingOptions: request.tracingOptions, + }; +} +//# sourceMappingURL=authorizeRequestOnTenantChallenge.js.map + +/***/ }), + +/***/ 741: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.decodeStringToString = exports.decodeString = exports.encodeByteArray = exports.encodeString = void 0; +/** + * Encodes a string in base64 format. + * @param value - the string to encode + * @internal + */ +function encodeString(value) { + return Buffer.from(value).toString("base64"); +} +exports.encodeString = encodeString; +/** + * Encodes a byte array in base64 format. + * @param value - the Uint8Aray to encode + * @internal + */ +function encodeByteArray(value) { + const bufferValue = value instanceof Buffer ? value : Buffer.from(value.buffer); + return bufferValue.toString("base64"); +} +exports.encodeByteArray = encodeByteArray; +/** + * Decodes a base64 string into a byte array. + * @param value - the base64 string to decode + * @internal + */ +function decodeString(value) { + return Buffer.from(value, "base64"); +} +exports.decodeString = decodeString; +/** + * Decodes a base64 string into a string. + * @param value - the base64 string to decode + * @internal + */ +function decodeStringToString(value) { + return Buffer.from(value, "base64").toString(); +} +exports.decodeStringToString = decodeStringToString; +//# sourceMappingURL=base64.js.map + +/***/ }), + +/***/ 111: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.deserializationPolicy = exports.deserializationPolicyName = void 0; +const interfaces_js_1 = __nccwpck_require__(6058); +const core_rest_pipeline_1 = __nccwpck_require__(778); +const serializer_js_1 = __nccwpck_require__(1530); +const operationHelpers_js_1 = __nccwpck_require__(9688); +const defaultJsonContentTypes = ["application/json", "text/json"]; +const defaultXmlContentTypes = ["application/xml", "application/atom+xml"]; +/** + * The programmatic identifier of the deserializationPolicy. + */ +exports.deserializationPolicyName = "deserializationPolicy"; +/** + * This policy handles parsing out responses according to OperationSpecs on the request. + */ +function deserializationPolicy(options = {}) { + var _a, _b, _c, _d, _e, _f, _g; + const jsonContentTypes = (_b = (_a = options.expectedContentTypes) === null || _a === void 0 ? void 0 : _a.json) !== null && _b !== void 0 ? _b : defaultJsonContentTypes; + const xmlContentTypes = (_d = (_c = options.expectedContentTypes) === null || _c === void 0 ? void 0 : _c.xml) !== null && _d !== void 0 ? _d : defaultXmlContentTypes; + const parseXML = options.parseXML; + const serializerOptions = options.serializerOptions; + const updatedOptions = { + xml: { + rootName: (_e = serializerOptions === null || serializerOptions === void 0 ? void 0 : serializerOptions.xml.rootName) !== null && _e !== void 0 ? _e : "", + includeRoot: (_f = serializerOptions === null || serializerOptions === void 0 ? void 0 : serializerOptions.xml.includeRoot) !== null && _f !== void 0 ? _f : false, + xmlCharKey: (_g = serializerOptions === null || serializerOptions === void 0 ? void 0 : serializerOptions.xml.xmlCharKey) !== null && _g !== void 0 ? _g : interfaces_js_1.XML_CHARKEY, + }, + }; + return { + name: exports.deserializationPolicyName, + async sendRequest(request, next) { + const response = await next(request); + return deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, updatedOptions, parseXML); + }, + }; +} +exports.deserializationPolicy = deserializationPolicy; +function getOperationResponseMap(parsedResponse) { + let result; + const request = parsedResponse.request; + const operationInfo = (0, operationHelpers_js_1.getOperationRequestInfo)(request); + const operationSpec = operationInfo === null || operationInfo === void 0 ? void 0 : operationInfo.operationSpec; + if (operationSpec) { + if (!(operationInfo === null || operationInfo === void 0 ? void 0 : operationInfo.operationResponseGetter)) { + result = operationSpec.responses[parsedResponse.status]; + } + else { + result = operationInfo === null || operationInfo === void 0 ? void 0 : operationInfo.operationResponseGetter(operationSpec, parsedResponse); + } + } + return result; +} +function shouldDeserializeResponse(parsedResponse) { + const request = parsedResponse.request; + const operationInfo = (0, operationHelpers_js_1.getOperationRequestInfo)(request); + const shouldDeserialize = operationInfo === null || operationInfo === void 0 ? void 0 : operationInfo.shouldDeserialize; + let result; + if (shouldDeserialize === undefined) { + result = true; + } + else if (typeof shouldDeserialize === "boolean") { + result = shouldDeserialize; + } + else { + result = shouldDeserialize(parsedResponse); + } + return result; +} +async function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options, parseXML) { + const parsedResponse = await parse(jsonContentTypes, xmlContentTypes, response, options, parseXML); + if (!shouldDeserializeResponse(parsedResponse)) { + return parsedResponse; + } + const operationInfo = (0, operationHelpers_js_1.getOperationRequestInfo)(parsedResponse.request); + const operationSpec = operationInfo === null || operationInfo === void 0 ? void 0 : operationInfo.operationSpec; + if (!operationSpec || !operationSpec.responses) { + return parsedResponse; + } + const responseSpec = getOperationResponseMap(parsedResponse); + const { error, shouldReturnResponse } = handleErrorResponse(parsedResponse, operationSpec, responseSpec, options); + 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) { + let valueToDeserialize = parsedResponse.parsedBody; + if (operationSpec.isXML && responseSpec.bodyMapper.type.name === serializer_js_1.MapperTypeNames.Sequence) { + valueToDeserialize = + typeof valueToDeserialize === "object" + ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName] + : []; + } + try { + parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, "operationRes.parsedBody", options); + } + catch (deserializeError) { + const restError = new core_rest_pipeline_1.RestError(`Error ${deserializeError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`, { + statusCode: parsedResponse.status, + request: parsedResponse.request, + response: 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.toJSON(), "operationRes.parsedHeaders", { xml: {}, ignoreUnknownProperties: true }); + } + } + return parsedResponse; +} +function isOperationSpecEmpty(operationSpec) { + const expectedStatusCodes = Object.keys(operationSpec.responses); + return (expectedStatusCodes.length === 0 || + (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default")); +} +function handleErrorResponse(parsedResponse, operationSpec, responseSpec, options) { + var _a; + const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300; + const isExpectedStatusCode = isOperationSpecEmpty(operationSpec) + ? isSuccessByStatus + : !!responseSpec; + if (isExpectedStatusCode) { + if (responseSpec) { + if (!responseSpec.isError) { + return { error: null, shouldReturnResponse: false }; + } + } + else { + return { error: null, shouldReturnResponse: false }; + } + } + const errorResponseSpec = responseSpec !== null && responseSpec !== void 0 ? responseSpec : operationSpec.responses.default; + const initialErrorMessage = ((_a = parsedResponse.request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(parsedResponse.status)) + ? `Unexpected status code: ${parsedResponse.status}` + : parsedResponse.bodyAsText; + const error = new core_rest_pipeline_1.RestError(initialErrorMessage, { + statusCode: parsedResponse.status, + request: parsedResponse.request, + response: 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; + } + const defaultBodyMapper = errorResponseSpec.bodyMapper; + const 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) { + const parsedBody = parsedResponse.parsedBody; + let deserializedError; + if (defaultBodyMapper) { + let valueToDeserialize = parsedBody; + if (operationSpec.isXML && defaultBodyMapper.type.name === serializer_js_1.MapperTypeNames.Sequence) { + valueToDeserialize = []; + const elementName = defaultBodyMapper.xmlElementName; + if (typeof parsedBody === "object" && elementName) { + valueToDeserialize = parsedBody[elementName]; + } + } + deserializedError = operationSpec.serializer.deserialize(defaultBodyMapper, valueToDeserialize, "error.response.parsedBody", options); + } + const internalError = parsedBody.error || deserializedError || parsedBody; + error.code = internalError.code; + if (internalError.message) { + error.message = internalError.message; + } + if (defaultBodyMapper) { + error.response.parsedBody = deserializedError; + } + } + // 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.toJSON(), "operationRes.parsedHeaders"); + } + } + catch (defaultError) { + error.message = `Error "${defaultError.message}" occurred in deserializing the responseBody - "${parsedResponse.bodyAsText}" for the default response.`; + } + return { error, shouldReturnResponse: false }; +} +async function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts, parseXML) { + var _a; + if (!((_a = operationResponse.request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(operationResponse.status)) && + operationResponse.bodyAsText) { + const text = operationResponse.bodyAsText; + const contentType = operationResponse.headers.get("Content-Type") || ""; + const contentComponents = !contentType + ? [] + : contentType.split(";").map((component) => component.toLowerCase()); + try { + if (contentComponents.length === 0 || + contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)) { + operationResponse.parsedBody = JSON.parse(text); + return operationResponse; + } + else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) { + if (!parseXML) { + throw new Error("Parsing XML not supported."); + } + const body = await parseXML(text, opts.xml); + operationResponse.parsedBody = body; + return operationResponse; + } + } + catch (err) { + const msg = `Error "${err}" occurred while parsing the response body - ${operationResponse.bodyAsText}.`; + const errCode = err.code || core_rest_pipeline_1.RestError.PARSE_ERROR; + const e = new core_rest_pipeline_1.RestError(msg, { + code: errCode, + statusCode: operationResponse.status, + request: operationResponse.request, + response: operationResponse, + }); + throw e; + } + } + return operationResponse; +} +//# sourceMappingURL=deserializationPolicy.js.map + +/***/ }), + +/***/ 6323: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getCachedDefaultHttpClient = void 0; +const core_rest_pipeline_1 = __nccwpck_require__(778); +let cachedHttpClient; +function getCachedDefaultHttpClient() { + if (!cachedHttpClient) { + cachedHttpClient = (0, core_rest_pipeline_1.createDefaultHttpClient)(); + } + return cachedHttpClient; +} +exports.getCachedDefaultHttpClient = getCachedDefaultHttpClient; +//# sourceMappingURL=httpClientCache.js.map + +/***/ }), + +/***/ 160: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.authorizeRequestOnTenantChallenge = exports.authorizeRequestOnClaimChallenge = exports.serializationPolicyName = exports.serializationPolicy = exports.deserializationPolicyName = exports.deserializationPolicy = exports.XML_CHARKEY = exports.XML_ATTRKEY = exports.createClientPipeline = exports.ServiceClient = exports.MapperTypeNames = exports.createSerializer = void 0; +var serializer_js_1 = __nccwpck_require__(1530); +Object.defineProperty(exports, "createSerializer", ({ enumerable: true, get: function () { return serializer_js_1.createSerializer; } })); +Object.defineProperty(exports, "MapperTypeNames", ({ enumerable: true, get: function () { return serializer_js_1.MapperTypeNames; } })); +var serviceClient_js_1 = __nccwpck_require__(9544); +Object.defineProperty(exports, "ServiceClient", ({ enumerable: true, get: function () { return serviceClient_js_1.ServiceClient; } })); +var pipeline_js_1 = __nccwpck_require__(1755); +Object.defineProperty(exports, "createClientPipeline", ({ enumerable: true, get: function () { return pipeline_js_1.createClientPipeline; } })); +var interfaces_js_1 = __nccwpck_require__(6058); +Object.defineProperty(exports, "XML_ATTRKEY", ({ enumerable: true, get: function () { return interfaces_js_1.XML_ATTRKEY; } })); +Object.defineProperty(exports, "XML_CHARKEY", ({ enumerable: true, get: function () { return interfaces_js_1.XML_CHARKEY; } })); +var deserializationPolicy_js_1 = __nccwpck_require__(111); +Object.defineProperty(exports, "deserializationPolicy", ({ enumerable: true, get: function () { return deserializationPolicy_js_1.deserializationPolicy; } })); +Object.defineProperty(exports, "deserializationPolicyName", ({ enumerable: true, get: function () { return deserializationPolicy_js_1.deserializationPolicyName; } })); +var serializationPolicy_js_1 = __nccwpck_require__(6234); +Object.defineProperty(exports, "serializationPolicy", ({ enumerable: true, get: function () { return serializationPolicy_js_1.serializationPolicy; } })); +Object.defineProperty(exports, "serializationPolicyName", ({ enumerable: true, get: function () { return serializationPolicy_js_1.serializationPolicyName; } })); +var authorizeRequestOnClaimChallenge_js_1 = __nccwpck_require__(7698); +Object.defineProperty(exports, "authorizeRequestOnClaimChallenge", ({ enumerable: true, get: function () { return authorizeRequestOnClaimChallenge_js_1.authorizeRequestOnClaimChallenge; } })); +var authorizeRequestOnTenantChallenge_js_1 = __nccwpck_require__(7454); +Object.defineProperty(exports, "authorizeRequestOnTenantChallenge", ({ enumerable: true, get: function () { return authorizeRequestOnTenantChallenge_js_1.authorizeRequestOnTenantChallenge; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 2066: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getPathStringFromParameter = exports.getStreamingResponseStatusCodes = void 0; +const serializer_js_1 = __nccwpck_require__(1530); +/** + * Gets the list of status codes for streaming responses. + * @internal + */ +function getStreamingResponseStatusCodes(operationSpec) { + const result = new Set(); + for (const statusCode in operationSpec.responses) { + const operationResponse = operationSpec.responses[statusCode]; + if (operationResponse.bodyMapper && + operationResponse.bodyMapper.type.name === serializer_js_1.MapperTypeNames.Stream) { + result.add(Number(statusCode)); + } + } + return result; +} +exports.getStreamingResponseStatusCodes = getStreamingResponseStatusCodes; +/** + * 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. + * @internal + */ +function getPathStringFromParameter(parameter) { + const { parameterPath, mapper } = parameter; + let result; + if (typeof parameterPath === "string") { + result = parameterPath; + } + else if (Array.isArray(parameterPath)) { + result = parameterPath.join("."); + } + else { + result = mapper.serializedName; + } + return result; +} +exports.getPathStringFromParameter = getPathStringFromParameter; +//# sourceMappingURL=interfaceHelpers.js.map + +/***/ }), + +/***/ 6058: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.XML_CHARKEY = exports.XML_ATTRKEY = void 0; +/** + * Default key used to access the XML attributes. + */ +exports.XML_ATTRKEY = "$"; +/** + * Default key used to access the XML value content. + */ +exports.XML_CHARKEY = "_"; +//# sourceMappingURL=interfaces.js.map + +/***/ }), + +/***/ 9994: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.logger = void 0; +const logger_1 = __nccwpck_require__(6515); +exports.logger = (0, logger_1.createClientLogger)("core-client"); +//# sourceMappingURL=log.js.map + +/***/ }), + +/***/ 9688: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getOperationRequestInfo = exports.getOperationArgumentValueFromParameter = void 0; +const state_js_1 = __nccwpck_require__(3345); +/** + * @internal + * Retrieves the value to use for a given operation argument + * @param operationArguments - The arguments passed from the generated client + * @param parameter - The parameter description + * @param fallbackObject - If something isn't found in the arguments bag, look here. + * Generally used to look at the service client properties. + */ +function getOperationArgumentValueFromParameter(operationArguments, parameter, fallbackObject) { + let parameterPath = parameter.parameterPath; + const parameterMapper = parameter.mapper; + let value; + if (typeof parameterPath === "string") { + parameterPath = [parameterPath]; + } + if (Array.isArray(parameterPath)) { + if (parameterPath.length > 0) { + if (parameterMapper.isConstant) { + value = parameterMapper.defaultValue; + } + else { + let propertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath); + if (!propertySearchResult.propertyFound && fallbackObject) { + propertySearchResult = getPropertyFromParameterPath(fallbackObject, parameterPath); + } + let useDefaultValue = false; + if (!propertySearchResult.propertyFound) { + useDefaultValue = + parameterMapper.required || + (parameterPath[0] === "options" && parameterPath.length === 2); + } + value = useDefaultValue ? parameterMapper.defaultValue : propertySearchResult.propertyValue; + } + } + } + else { + if (parameterMapper.required) { + value = {}; + } + for (const propertyName in parameterPath) { + const propertyMapper = parameterMapper.type.modelProperties[propertyName]; + const propertyPath = parameterPath[propertyName]; + const propertyValue = getOperationArgumentValueFromParameter(operationArguments, { + parameterPath: propertyPath, + mapper: propertyMapper, + }, fallbackObject); + if (propertyValue !== undefined) { + if (!value) { + value = {}; + } + value[propertyName] = propertyValue; + } + } + } + return value; +} +exports.getOperationArgumentValueFromParameter = getOperationArgumentValueFromParameter; +function getPropertyFromParameterPath(parent, parameterPath) { + const result = { propertyFound: false }; + let i = 0; + for (; i < parameterPath.length; ++i) { + const parameterPathPart = parameterPath[i]; + // Make sure to check inherited properties too, so don't use hasOwnProperty(). + if (parent && parameterPathPart in parent) { + parent = parent[parameterPathPart]; + } + else { + break; + } + } + if (i === parameterPath.length) { + result.propertyValue = parent; + result.propertyFound = true; + } + return result; +} +const originalRequestSymbol = Symbol.for("@azure/core-client original request"); +function hasOriginalRequest(request) { + return originalRequestSymbol in request; +} +function getOperationRequestInfo(request) { + if (hasOriginalRequest(request)) { + return getOperationRequestInfo(request[originalRequestSymbol]); + } + let info = state_js_1.state.operationRequestMap.get(request); + if (!info) { + info = {}; + state_js_1.state.operationRequestMap.set(request, info); + } + return info; +} +exports.getOperationRequestInfo = getOperationRequestInfo; +//# sourceMappingURL=operationHelpers.js.map + +/***/ }), + +/***/ 1755: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createClientPipeline = void 0; +const deserializationPolicy_js_1 = __nccwpck_require__(111); +const core_rest_pipeline_1 = __nccwpck_require__(778); +const serializationPolicy_js_1 = __nccwpck_require__(6234); +/** + * Creates a new Pipeline for use with a Service Client. + * Adds in deserializationPolicy by default. + * Also adds in bearerTokenAuthenticationPolicy if passed a TokenCredential. + * @param options - Options to customize the created pipeline. + */ +function createClientPipeline(options = {}) { + const pipeline = (0, core_rest_pipeline_1.createPipelineFromOptions)(options !== null && options !== void 0 ? options : {}); + if (options.credentialOptions) { + pipeline.addPolicy((0, core_rest_pipeline_1.bearerTokenAuthenticationPolicy)({ + credential: options.credentialOptions.credential, + scopes: options.credentialOptions.credentialScopes, + })); + } + pipeline.addPolicy((0, serializationPolicy_js_1.serializationPolicy)(options.serializationOptions), { phase: "Serialize" }); + pipeline.addPolicy((0, deserializationPolicy_js_1.deserializationPolicy)(options.deserializationOptions), { + phase: "Deserialize", + }); + return pipeline; +} +exports.createClientPipeline = createClientPipeline; +//# sourceMappingURL=pipeline.js.map + +/***/ }), + +/***/ 6234: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.serializeRequestBody = exports.serializeHeaders = exports.serializationPolicy = exports.serializationPolicyName = void 0; +const interfaces_js_1 = __nccwpck_require__(6058); +const operationHelpers_js_1 = __nccwpck_require__(9688); +const serializer_js_1 = __nccwpck_require__(1530); +const interfaceHelpers_js_1 = __nccwpck_require__(2066); +/** + * The programmatic identifier of the serializationPolicy. + */ +exports.serializationPolicyName = "serializationPolicy"; +/** + * This policy handles assembling the request body and headers using + * an OperationSpec and OperationArguments on the request. + */ +function serializationPolicy(options = {}) { + const stringifyXML = options.stringifyXML; + return { + name: exports.serializationPolicyName, + async sendRequest(request, next) { + const operationInfo = (0, operationHelpers_js_1.getOperationRequestInfo)(request); + const operationSpec = operationInfo === null || operationInfo === void 0 ? void 0 : operationInfo.operationSpec; + const operationArguments = operationInfo === null || operationInfo === void 0 ? void 0 : operationInfo.operationArguments; + if (operationSpec && operationArguments) { + serializeHeaders(request, operationArguments, operationSpec); + serializeRequestBody(request, operationArguments, operationSpec, stringifyXML); + } + return next(request); + }, + }; +} +exports.serializationPolicy = serializationPolicy; +/** + * @internal + */ +function serializeHeaders(request, operationArguments, operationSpec) { + var _a, _b; + if (operationSpec.headerParameters) { + for (const headerParameter of operationSpec.headerParameters) { + let headerValue = (0, operationHelpers_js_1.getOperationArgumentValueFromParameter)(operationArguments, headerParameter); + if ((headerValue !== null && headerValue !== undefined) || headerParameter.mapper.required) { + headerValue = operationSpec.serializer.serialize(headerParameter.mapper, headerValue, (0, interfaceHelpers_js_1.getPathStringFromParameter)(headerParameter)); + const headerCollectionPrefix = headerParameter.mapper + .headerCollectionPrefix; + if (headerCollectionPrefix) { + for (const key of Object.keys(headerValue)) { + request.headers.set(headerCollectionPrefix + key, headerValue[key]); + } + } + else { + request.headers.set(headerParameter.mapper.serializedName || (0, interfaceHelpers_js_1.getPathStringFromParameter)(headerParameter), headerValue); + } + } + } + } + const customHeaders = (_b = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.requestOptions) === null || _b === void 0 ? void 0 : _b.customHeaders; + if (customHeaders) { + for (const customHeaderName of Object.keys(customHeaders)) { + request.headers.set(customHeaderName, customHeaders[customHeaderName]); + } + } +} +exports.serializeHeaders = serializeHeaders; +/** + * @internal + */ +function serializeRequestBody(request, operationArguments, operationSpec, stringifyXML = function () { + throw new Error("XML serialization unsupported!"); +}) { + var _a, _b, _c, _d, _e; + const serializerOptions = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions; + const updatedOptions = { + xml: { + rootName: (_b = serializerOptions === null || serializerOptions === void 0 ? void 0 : serializerOptions.xml.rootName) !== null && _b !== void 0 ? _b : "", + includeRoot: (_c = serializerOptions === null || serializerOptions === void 0 ? void 0 : serializerOptions.xml.includeRoot) !== null && _c !== void 0 ? _c : false, + xmlCharKey: (_d = serializerOptions === null || serializerOptions === void 0 ? void 0 : serializerOptions.xml.xmlCharKey) !== null && _d !== void 0 ? _d : interfaces_js_1.XML_CHARKEY, + }, + }; + const xmlCharKey = updatedOptions.xml.xmlCharKey; + if (operationSpec.requestBody && operationSpec.requestBody.mapper) { + request.body = (0, operationHelpers_js_1.getOperationArgumentValueFromParameter)(operationArguments, operationSpec.requestBody); + const bodyMapper = operationSpec.requestBody.mapper; + const { required, serializedName, xmlName, xmlElementName, xmlNamespace, xmlNamespacePrefix, nullable, } = bodyMapper; + const typeName = bodyMapper.type.name; + try { + if ((request.body !== undefined && request.body !== null) || + (nullable && request.body === null) || + required) { + const requestBodyParameterPathString = (0, interfaceHelpers_js_1.getPathStringFromParameter)(operationSpec.requestBody); + request.body = operationSpec.serializer.serialize(bodyMapper, request.body, requestBodyParameterPathString, updatedOptions); + const isStream = typeName === serializer_js_1.MapperTypeNames.Stream; + if (operationSpec.isXML) { + const xmlnsKey = xmlNamespacePrefix ? `xmlns:${xmlNamespacePrefix}` : "xmlns"; + const value = getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, request.body, updatedOptions); + if (typeName === serializer_js_1.MapperTypeNames.Sequence) { + request.body = stringifyXML(prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), { rootName: xmlName || serializedName, xmlCharKey }); + } + else if (!isStream) { + request.body = stringifyXML(value, { + rootName: xmlName || serializedName, + xmlCharKey, + }); + } + } + else if (typeName === serializer_js_1.MapperTypeNames.String && + (((_e = operationSpec.contentType) === null || _e === void 0 ? void 0 : _e.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) { + request.body = JSON.stringify(request.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) { + request.formData = {}; + for (const formDataParameter of operationSpec.formDataParameters) { + const formDataParameterValue = (0, operationHelpers_js_1.getOperationArgumentValueFromParameter)(operationArguments, formDataParameter); + if (formDataParameterValue !== undefined && formDataParameterValue !== null) { + const formDataParameterPropertyName = formDataParameter.mapper.serializedName || (0, interfaceHelpers_js_1.getPathStringFromParameter)(formDataParameter); + request.formData[formDataParameterPropertyName] = operationSpec.serializer.serialize(formDataParameter.mapper, formDataParameterValue, (0, interfaceHelpers_js_1.getPathStringFromParameter)(formDataParameter), updatedOptions); + } + } + } +} +exports.serializeRequestBody = serializeRequestBody; +/** + * 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) { + // 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)) { + const result = {}; + result[options.xml.xmlCharKey] = serializedValue; + result[interfaces_js_1.XML_ATTRKEY] = { [xmlnsKey]: xmlNamespace }; + return result; + } + return serializedValue; +} +function prepareXMLRootList(obj, elementName, xmlNamespaceKey, xmlNamespace) { + if (!Array.isArray(obj)) { + obj = [obj]; + } + if (!xmlNamespaceKey || !xmlNamespace) { + return { [elementName]: obj }; + } + const result = { [elementName]: obj }; + result[interfaces_js_1.XML_ATTRKEY] = { [xmlNamespaceKey]: xmlNamespace }; + return result; +} +//# sourceMappingURL=serializationPolicy.js.map + +/***/ }), + +/***/ 1530: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.MapperTypeNames = exports.createSerializer = void 0; +const tslib_1 = __nccwpck_require__(1860); +const base64 = tslib_1.__importStar(__nccwpck_require__(741)); +const interfaces_js_1 = __nccwpck_require__(6058); +const utils_js_1 = __nccwpck_require__(1193); +class SerializerImpl { + constructor(modelMappers = {}, isXML = false) { + this.modelMappers = modelMappers; + this.isXML = isXML; + } + /** + * @deprecated Removing the constraints validation on client side. + */ + validateConstraints(mapper, value, objectName) { + const failValidation = (constraintName, constraintValue) => { + throw new Error(`"${objectName}" with value "${value}" should satisfy the constraint "${constraintName}": ${constraintValue}.`); + }; + if (mapper.constraints && value !== undefined && value !== null) { + const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems, } = mapper.constraints; + if (ExclusiveMaximum !== undefined && value >= ExclusiveMaximum) { + failValidation("ExclusiveMaximum", ExclusiveMaximum); + } + if (ExclusiveMinimum !== undefined && value <= ExclusiveMinimum) { + failValidation("ExclusiveMinimum", ExclusiveMinimum); + } + if (InclusiveMaximum !== undefined && value > InclusiveMaximum) { + failValidation("InclusiveMaximum", InclusiveMaximum); + } + if (InclusiveMinimum !== undefined && value < InclusiveMinimum) { + failValidation("InclusiveMinimum", InclusiveMinimum); + } + if (MaxItems !== undefined && value.length > MaxItems) { + failValidation("MaxItems", MaxItems); + } + if (MaxLength !== undefined && value.length > MaxLength) { + failValidation("MaxLength", MaxLength); + } + if (MinItems !== undefined && value.length < MinItems) { + failValidation("MinItems", MinItems); + } + if (MinLength !== undefined && value.length < MinLength) { + failValidation("MinLength", MinLength); + } + if (MultipleOf !== undefined && value % MultipleOf !== 0) { + failValidation("MultipleOf", MultipleOf); + } + if (Pattern) { + const pattern = typeof Pattern === "string" ? new RegExp(Pattern) : Pattern; + if (typeof value !== "string" || value.match(pattern) === null) { + failValidation("Pattern", Pattern); + } + } + if (UniqueItems && + value.some((item, i, ar) => 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 serialization + * + * @returns A valid serialized Javascript object + */ + serialize(mapper, object, objectName, options = { xml: {} }) { + var _a, _b, _c; + const updatedOptions = { + xml: { + rootName: (_a = options.xml.rootName) !== null && _a !== void 0 ? _a : "", + includeRoot: (_b = options.xml.includeRoot) !== null && _b !== void 0 ? _b : false, + xmlCharKey: (_c = options.xml.xmlCharKey) !== null && _c !== void 0 ? _c : interfaces_js_1.XML_CHARKEY, + }, + }; + let payload = {}; + const 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 + const { required, nullable } = mapper; + if (required && nullable && object === undefined) { + throw new Error(`${objectName} cannot be undefined.`); + } + if (required && !nullable && (object === undefined || object === null)) { + 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 || object === null) { + payload = object; + } + else { + 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) { + const 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 + */ + deserialize(mapper, responseBody, objectName, options = { xml: {} }) { + var _a, _b, _c, _d; + const updatedOptions = { + xml: { + rootName: (_a = options.xml.rootName) !== null && _a !== void 0 ? _a : "", + includeRoot: (_b = options.xml.includeRoot) !== null && _b !== void 0 ? _b : false, + xmlCharKey: (_c = options.xml.xmlCharKey) !== null && _c !== void 0 ? _c : interfaces_js_1.XML_CHARKEY, + }, + ignoreUnknownProperties: (_d = options.ignoreUnknownProperties) !== null && _d !== void 0 ? _d : false, + }; + if (responseBody === undefined || responseBody === null) { + 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; + } + let payload; + const 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) { + const xmlCharKey = updatedOptions.xml.xmlCharKey; + /** + * 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 (responseBody[interfaces_js_1.XML_ATTRKEY] !== undefined && responseBody[xmlCharKey] !== undefined) { + responseBody = responseBody[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 = base64.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; + } +} +/** + * Method that creates and returns a Serializer. + * @param modelMappers - Known models to map + * @param isXML - If XML should be supported + */ +function createSerializer(modelMappers = {}, isXML = false) { + return new SerializerImpl(modelMappers, isXML); +} +exports.createSerializer = createSerializer; +function trimEnd(str, ch) { + let 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. + const str = base64.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 base64.decodeString(str); +} +function splitSerializeName(prop) { + const classes = []; + let partialclass = ""; + if (prop) { + const subwords = prop.split("."); + for (const item of subwords) { + 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" && (0, utils_js_1.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) { + const objectType = typeof value; + if (objectType !== "string" && + typeof value.pipe !== "function" && // NodeJS.ReadableStream + typeof value.tee !== "function" && // browser ReadableStream + !(value instanceof ArrayBuffer) && + !ArrayBuffer.isView(value) && + // File objects count as a type of Blob, so we want to use instanceof explicitly + !((typeof Blob === "function" || typeof Blob === "object") && value instanceof Blob) && + objectType !== "function") { + throw new Error(`${objectName} must be a string, Blob, ArrayBuffer, ArrayBufferView, ReadableStream, or () => 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.`); + } + const isPresent = allowedValues.some((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) { + if (value !== undefined && value !== null) { + if (!(value instanceof Uint8Array)) { + throw new Error(`${objectName} must be of type Uint8Array.`); + } + value = base64.encodeByteArray(value); + } + return value; +} +function serializeBase64UrlType(objectName, value) { + if (value !== undefined && value !== null) { + if (!(value instanceof Uint8Array)) { + throw new Error(`${objectName} must be of type Uint8Array.`); + } + value = bufferToBase64Url(value); + } + return value; +} +function serializeDateTypes(typeName, value, objectName) { + if (value !== undefined && value !== null) { + 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 (!(0, utils_js_1.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; + if (!Array.isArray(object)) { + throw new Error(`${objectName} must be of type Array.`); + } + let 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}.`); + } + // Quirk: Composite mappers referenced by `element` might + // not have *all* properties declared (like uberParent), + // so let's try to look up the full definition by name. + if (elementType.type.name === "Composite" && elementType.type.className) { + elementType = (_a = serializer.modelMappers[elementType.type.className]) !== null && _a !== void 0 ? _a : elementType; + } + const tempArray = []; + for (let i = 0; i < object.length; i++) { + const serializedValue = serializer.serialize(elementType, object[i], objectName, options); + if (isXml && elementType.xmlNamespace) { + const xmlnsKey = elementType.xmlNamespacePrefix + ? `xmlns:${elementType.xmlNamespacePrefix}` + : "xmlns"; + if (elementType.type.name === "Composite") { + tempArray[i] = Object.assign({}, serializedValue); + tempArray[i][interfaces_js_1.XML_ATTRKEY] = { [xmlnsKey]: elementType.xmlNamespace }; + } + else { + tempArray[i] = {}; + tempArray[i][options.xml.xmlCharKey] = serializedValue; + tempArray[i][interfaces_js_1.XML_ATTRKEY] = { [xmlnsKey]: elementType.xmlNamespace }; + } + } + else { + tempArray[i] = serializedValue; + } + } + return tempArray; +} +function serializeDictionaryType(serializer, mapper, object, objectName, isXml, options) { + if (typeof object !== "object") { + throw new Error(`${objectName} must be of type object.`); + } + const 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}.`); + } + const tempDictionary = {}; + for (const key of Object.keys(object)) { + const 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) { + const xmlnsKey = mapper.xmlNamespacePrefix ? `xmlns:${mapper.xmlNamespacePrefix}` : "xmlns"; + const result = tempDictionary; + result[interfaces_js_1.XML_ATTRKEY] = { [xmlnsKey]: mapper.xmlNamespace }; + 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) { + const additionalProperties = mapper.type.additionalProperties; + if (!additionalProperties && mapper.type.className) { + const 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) { + const 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) { + let modelProps = mapper.type.modelProperties; + if (!modelProps) { + const 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) { + if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) { + mapper = getPolymorphicMapper(serializer, mapper, object, "clientName"); + } + if (object !== undefined && object !== null) { + const payload = {}; + const modelProps = resolveModelProperties(serializer, mapper, objectName); + for (const key of Object.keys(modelProps)) { + const propertyMapper = modelProps[key]; + if (propertyMapper.readOnly) { + continue; + } + let propName; + let parentObject = payload; + if (serializer.isXML) { + if (propertyMapper.xmlIsWrapped) { + propName = propertyMapper.xmlName; + } + else { + propName = propertyMapper.xmlElementName || propertyMapper.xmlName; + } + } + else { + const paths = splitSerializeName(propertyMapper.serializedName); + propName = paths.pop(); + for (const pathName of paths) { + const childObject = parentObject[pathName]; + if ((childObject === undefined || childObject === null) && + ((object[key] !== undefined && object[key] !== null) || + propertyMapper.defaultValue !== undefined)) { + parentObject[pathName] = {}; + } + parentObject = parentObject[pathName]; + } + } + if (parentObject !== undefined && parentObject !== null) { + if (isXml && mapper.xmlNamespace) { + const xmlnsKey = mapper.xmlNamespacePrefix + ? `xmlns:${mapper.xmlNamespacePrefix}` + : "xmlns"; + parentObject[interfaces_js_1.XML_ATTRKEY] = Object.assign(Object.assign({}, parentObject[interfaces_js_1.XML_ATTRKEY]), { [xmlnsKey]: mapper.xmlNamespace }); + } + const propertyObjectName = propertyMapper.serializedName !== "" + ? objectName + "." + propertyMapper.serializedName + : objectName; + let toSerialize = object[key]; + const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper); + if (polymorphicDiscriminator && + polymorphicDiscriminator.clientName === key && + (toSerialize === undefined || toSerialize === null)) { + toSerialize = mapper.serializedName; + } + const serializedValue = serializer.serialize(propertyMapper, toSerialize, propertyObjectName, options); + if (serializedValue !== undefined && propName !== undefined && propName !== null) { + const 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[interfaces_js_1.XML_ATTRKEY] = parentObject[interfaces_js_1.XML_ATTRKEY] || {}; + parentObject[interfaces_js_1.XML_ATTRKEY][propName] = serializedValue; + } + else if (isXml && propertyMapper.xmlIsWrapped) { + parentObject[propName] = { [propertyMapper.xmlElementName]: value }; + } + else { + parentObject[propName] = value; + } + } + } + } + const additionalPropertiesMapper = resolveAdditionalProperties(serializer, mapper, objectName); + if (additionalPropertiesMapper) { + const propNames = Object.keys(modelProps); + for (const clientPropName in object) { + const isAdditionalProperty = propNames.every((pn) => pn !== clientPropName); + if (isAdditionalProperty) { + payload[clientPropName] = serializer.serialize(additionalPropertiesMapper, object[clientPropName], objectName + '["' + clientPropName + '"]', options); + } + } + } + return payload; + } + return object; +} +function getXmlObjectValue(propertyMapper, serializedValue, isXml, options) { + if (!isXml || !propertyMapper.xmlNamespace) { + return serializedValue; + } + const xmlnsKey = propertyMapper.xmlNamespacePrefix + ? `xmlns:${propertyMapper.xmlNamespacePrefix}` + : "xmlns"; + const xmlNamespace = { [xmlnsKey]: propertyMapper.xmlNamespace }; + if (["Composite"].includes(propertyMapper.type.name)) { + if (serializedValue[interfaces_js_1.XML_ATTRKEY]) { + return serializedValue; + } + else { + const result = Object.assign({}, serializedValue); + result[interfaces_js_1.XML_ATTRKEY] = xmlNamespace; + return result; + } + } + const result = {}; + result[options.xml.xmlCharKey] = serializedValue; + result[interfaces_js_1.XML_ATTRKEY] = xmlNamespace; + return result; +} +function isSpecialXmlProperty(propertyName, options) { + return [interfaces_js_1.XML_ATTRKEY, options.xml.xmlCharKey].includes(propertyName); +} +function deserializeCompositeType(serializer, mapper, responseBody, objectName, options) { + var _a, _b; + const xmlCharKey = (_a = options.xml.xmlCharKey) !== null && _a !== void 0 ? _a : interfaces_js_1.XML_CHARKEY; + if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) { + mapper = getPolymorphicMapper(serializer, mapper, responseBody, "serializedName"); + } + const modelProps = resolveModelProperties(serializer, mapper, objectName); + let instance = {}; + const handledPropertyNames = []; + for (const key of Object.keys(modelProps)) { + const propertyMapper = modelProps[key]; + const paths = splitSerializeName(modelProps[key].serializedName); + handledPropertyNames.push(paths[0]); + const { serializedName, xmlName, xmlElementName } = propertyMapper; + let propertyObjectName = objectName; + if (serializedName !== "" && serializedName !== undefined) { + propertyObjectName = objectName + "." + serializedName; + } + const headerCollectionPrefix = propertyMapper.headerCollectionPrefix; + if (headerCollectionPrefix) { + const dictionary = {}; + for (const headerKey of Object.keys(responseBody)) { + 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[interfaces_js_1.XML_ATTRKEY]) { + instance[key] = serializer.deserialize(propertyMapper, responseBody[interfaces_js_1.XML_ATTRKEY][xmlName], propertyObjectName, options); + } + else if (propertyMapper.xmlIsMsText) { + if (responseBody[xmlCharKey] !== undefined) { + instance[key] = responseBody[xmlCharKey]; + } + else if (typeof responseBody === "string") { + // The special case where xml parser parses "content" into JSON of + // `{ name: "content"}` instead of `{ name: { "_": "content" }}` + instance[key] = responseBody; + } + } + else { + const 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". + */ + const wrapped = responseBody[xmlName]; + const elementList = (_b = wrapped === null || wrapped === void 0 ? void 0 : wrapped[xmlElementName]) !== null && _b !== void 0 ? _b : []; + instance[key] = serializer.deserialize(propertyMapper, elementList, propertyObjectName, options); + handledPropertyNames.push(xmlName); + } + else { + const property = responseBody[propertyName]; + instance[key] = serializer.deserialize(propertyMapper, property, propertyObjectName, options); + handledPropertyNames.push(propertyName); + } + } + } + else { + // deserialize the property if it is present in the provided responseBody instance + let propertyInstance; + let res = responseBody; + // traversing the object step by step. + let steps = 0; + for (const item of paths) { + if (!res) + break; + steps++; + res = res[item]; + } + // only accept null when reaching the last position of object otherwise it would be undefined + if (res === null && steps < paths.length) { + res = undefined; + } + propertyInstance = res; + const 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 === null)) { + propertyInstance = mapper.serializedName; + } + let serializedValue; + // paging + if (Array.isArray(responseBody[key]) && modelProps[key].serializedName === "") { + propertyInstance = responseBody[key]; + const 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 (const [k, v] of Object.entries(instance)) { + 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; + } + } + } + const additionalPropertiesMapper = mapper.type.additionalProperties; + if (additionalPropertiesMapper) { + const isAdditionalProperty = (responsePropName) => { + for (const clientPropName in modelProps) { + const paths = splitSerializeName(modelProps[clientPropName].serializedName); + if (paths[0] === responsePropName) { + return false; + } + } + return true; + }; + for (const responsePropName in responseBody) { + if (isAdditionalProperty(responsePropName)) { + instance[responsePropName] = serializer.deserialize(additionalPropertiesMapper, responseBody[responsePropName], objectName + '["' + responsePropName + '"]', options); + } + } + } + else if (responseBody && !options.ignoreUnknownProperties) { + for (const key of Object.keys(responseBody)) { + if (instance[key] === undefined && + !handledPropertyNames.includes(key) && + !isSpecialXmlProperty(key, options)) { + instance[key] = responseBody[key]; + } + } + } + return instance; +} +function deserializeDictionaryType(serializer, mapper, responseBody, objectName, options) { + /* jshint validthis: true */ + const 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) { + const tempDictionary = {}; + for (const key of Object.keys(responseBody)) { + tempDictionary[key] = serializer.deserialize(value, responseBody[key], objectName, options); + } + return tempDictionary; + } + return responseBody; +} +function deserializeSequenceType(serializer, mapper, responseBody, objectName, options) { + var _a; + let 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]; + } + // Quirk: Composite mappers referenced by `element` might + // not have *all* properties declared (like uberParent), + // so let's try to look up the full definition by name. + if (element.type.name === "Composite" && element.type.className) { + element = (_a = serializer.modelMappers[element.type.className]) !== null && _a !== void 0 ? _a : element; + } + const tempArray = []; + for (let i = 0; i < responseBody.length; i++) { + tempArray[i] = serializer.deserialize(element, responseBody[i], `${objectName}[${i}]`, options); + } + return tempArray; + } + return responseBody; +} +function getIndexDiscriminator(discriminators, discriminatorValue, typeName) { + const typeNamesToCheck = [typeName]; + while (typeNamesToCheck.length) { + const currentName = typeNamesToCheck.shift(); + const indexDiscriminator = discriminatorValue === currentName + ? discriminatorValue + : currentName + "." + discriminatorValue; + if (Object.prototype.hasOwnProperty.call(discriminators, indexDiscriminator)) { + return discriminators[indexDiscriminator]; + } + else { + for (const [name, mapper] of Object.entries(discriminators)) { + if (name.startsWith(currentName + ".") && + mapper.type.uberParent === currentName && + mapper.type.className) { + typeNamesToCheck.push(mapper.type.className); + } + } + } + } + return undefined; +} +function getPolymorphicMapper(serializer, mapper, object, polymorphicPropertyName) { + var _a; + const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper); + if (polymorphicDiscriminator) { + let discriminatorName = polymorphicDiscriminator[polymorphicPropertyName]; + if (discriminatorName) { + // The serializedName might have \\, which we just want to ignore + if (polymorphicPropertyName === "serializedName") { + discriminatorName = discriminatorName.replace(/\\/gi, ""); + } + const discriminatorValue = object[discriminatorName]; + const typeName = (_a = mapper.type.uberParent) !== null && _a !== void 0 ? _a : mapper.type.className; + if (typeof discriminatorValue === "string" && typeName) { + const polymorphicMapper = getIndexDiscriminator(serializer.modelMappers.discriminators, discriminatorValue, typeName); + 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); +} +/** + * Known types of Mappers + */ +exports.MapperTypeNames = { + Base64Url: "Base64Url", + Boolean: "Boolean", + ByteArray: "ByteArray", + Composite: "Composite", + Date: "Date", + DateTime: "DateTime", + DateTimeRfc1123: "DateTimeRfc1123", + Dictionary: "Dictionary", + Enum: "Enum", + Number: "Number", + Object: "Object", + Sequence: "Sequence", + String: "String", + Stream: "Stream", + TimeSpan: "TimeSpan", + UnixTime: "UnixTime", +}; +//# sourceMappingURL=serializer.js.map + +/***/ }), + +/***/ 9544: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ServiceClient = void 0; +const core_rest_pipeline_1 = __nccwpck_require__(778); +const pipeline_js_1 = __nccwpck_require__(1755); +const utils_js_1 = __nccwpck_require__(1193); +const httpClientCache_js_1 = __nccwpck_require__(6323); +const operationHelpers_js_1 = __nccwpck_require__(9688); +const urlHelpers_js_1 = __nccwpck_require__(1752); +const interfaceHelpers_js_1 = __nccwpck_require__(2066); +const log_js_1 = __nccwpck_require__(9994); +/** + * Initializes a new instance of the ServiceClient. + */ +class ServiceClient { + /** + * The ServiceClient constructor + * @param credential - The credentials used for authentication with the service. + * @param options - The service client options that govern the behavior of the client. + */ + constructor(options = {}) { + var _a, _b; + this._requestContentType = options.requestContentType; + this._endpoint = (_a = options.endpoint) !== null && _a !== void 0 ? _a : options.baseUri; + if (options.baseUri) { + log_js_1.logger.warning("The baseUri option for SDK Clients has been deprecated, please use endpoint instead."); + } + this._allowInsecureConnection = options.allowInsecureConnection; + this._httpClient = options.httpClient || (0, httpClientCache_js_1.getCachedDefaultHttpClient)(); + this.pipeline = options.pipeline || createDefaultPipeline(options); + if ((_b = options.additionalPolicies) === null || _b === void 0 ? void 0 : _b.length) { + for (const { policy, position } of options.additionalPolicies) { + // Sign happens after Retry and is commonly needed to occur + // before policies that intercept post-retry. + const afterPhase = position === "perRetry" ? "Sign" : undefined; + this.pipeline.addPolicy(policy, { + afterPhase, + }); + } + } + } + /** + * Send the provided httpRequest. + */ + async sendRequest(request) { + return this.pipeline.sendRequest(this._httpClient, request); + } + /** + * Send an HTTP request that is populated using the provided OperationSpec. + * @typeParam T - The typed result of the request, based on the 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. + */ + async sendOperationRequest(operationArguments, operationSpec) { + const endpoint = operationSpec.baseUrl || this._endpoint; + if (!endpoint) { + throw new Error("If operationSpec.baseUrl is not specified, then the ServiceClient must have a endpoint string property that contains the base URL to use."); + } + // Templatized URLs sometimes reference properties on the ServiceClient child class, + // so we have to pass `this` below in order to search these properties if they're + // not part of OperationArguments + const url = (0, urlHelpers_js_1.getRequestUrl)(endpoint, operationSpec, operationArguments, this); + const request = (0, core_rest_pipeline_1.createPipelineRequest)({ + url, + }); + request.method = operationSpec.httpMethod; + const operationInfo = (0, operationHelpers_js_1.getOperationRequestInfo)(request); + operationInfo.operationSpec = operationSpec; + operationInfo.operationArguments = operationArguments; + const contentType = operationSpec.contentType || this._requestContentType; + if (contentType && operationSpec.requestBody) { + request.headers.set("Content-Type", contentType); + } + const options = operationArguments.options; + if (options) { + const requestOptions = options.requestOptions; + if (requestOptions) { + if (requestOptions.timeout) { + request.timeout = requestOptions.timeout; + } + if (requestOptions.onUploadProgress) { + request.onUploadProgress = requestOptions.onUploadProgress; + } + if (requestOptions.onDownloadProgress) { + request.onDownloadProgress = requestOptions.onDownloadProgress; + } + if (requestOptions.shouldDeserialize !== undefined) { + operationInfo.shouldDeserialize = requestOptions.shouldDeserialize; + } + if (requestOptions.allowInsecureConnection) { + request.allowInsecureConnection = true; + } + } + if (options.abortSignal) { + request.abortSignal = options.abortSignal; + } + if (options.tracingOptions) { + request.tracingOptions = options.tracingOptions; + } + } + if (this._allowInsecureConnection) { + request.allowInsecureConnection = true; + } + if (request.streamResponseStatusCodes === undefined) { + request.streamResponseStatusCodes = (0, interfaceHelpers_js_1.getStreamingResponseStatusCodes)(operationSpec); + } + try { + const rawResponse = await this.sendRequest(request); + const flatResponse = (0, utils_js_1.flattenResponse)(rawResponse, operationSpec.responses[rawResponse.status]); + if (options === null || options === void 0 ? void 0 : options.onResponse) { + options.onResponse(rawResponse, flatResponse); + } + return flatResponse; + } + catch (error) { + if (typeof error === "object" && (error === null || error === void 0 ? void 0 : error.response)) { + const rawResponse = error.response; + const flatResponse = (0, utils_js_1.flattenResponse)(rawResponse, operationSpec.responses[error.statusCode] || operationSpec.responses["default"]); + error.details = flatResponse; + if (options === null || options === void 0 ? void 0 : options.onResponse) { + options.onResponse(rawResponse, flatResponse, error); + } + } + throw error; + } + } +} +exports.ServiceClient = ServiceClient; +function createDefaultPipeline(options) { + const credentialScopes = getCredentialScopes(options); + const credentialOptions = options.credential && credentialScopes + ? { credentialScopes, credential: options.credential } + : undefined; + return (0, pipeline_js_1.createClientPipeline)(Object.assign(Object.assign({}, options), { credentialOptions })); +} +function getCredentialScopes(options) { + if (options.credentialScopes) { + return options.credentialScopes; + } + if (options.endpoint) { + return `${options.endpoint}/.default`; + } + if (options.baseUri) { + return `${options.baseUri}/.default`; + } + if (options.credential && !options.credentialScopes) { + throw new Error(`When using credentials, the ServiceClientOptions must contain either a endpoint or a credentialScopes. Unable to create a bearerTokenAuthenticationPolicy`); + } + return undefined; +} +//# sourceMappingURL=serviceClient.js.map + +/***/ }), + +/***/ 3345: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.state = void 0; +/** + * Holds the singleton operationRequestMap, to be shared across CJS and ESM imports. + */ +exports.state = { + operationRequestMap: new WeakMap(), +}; +//# sourceMappingURL=state-cjs.cjs.map + +/***/ }), + +/***/ 1752: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.appendQueryParams = exports.getRequestUrl = void 0; +const operationHelpers_js_1 = __nccwpck_require__(9688); +const interfaceHelpers_js_1 = __nccwpck_require__(2066); +const CollectionFormatToDelimiterMap = { + CSV: ",", + SSV: " ", + Multi: "Multi", + TSV: "\t", + Pipes: "|", +}; +function getRequestUrl(baseUri, operationSpec, operationArguments, fallbackObject) { + const urlReplacements = calculateUrlReplacements(operationSpec, operationArguments, fallbackObject); + let isAbsolutePath = false; + let requestUrl = replaceAll(baseUri, urlReplacements); + if (operationSpec.path) { + let path = replaceAll(operationSpec.path, urlReplacements); + // QUIRK: sometimes we get a path component like /{nextLink} + // which may be a fully formed URL with a leading /. In that case, we should + // remove the leading / + if (operationSpec.path === "/{nextLink}" && path.startsWith("/")) { + path = path.substring(1); + } + // QUIRK: sometimes we get a path component like {nextLink} + // which may be a fully formed URL. In that case, we should + // ignore the baseUri. + if (isAbsoluteUrl(path)) { + requestUrl = path; + isAbsolutePath = true; + } + else { + requestUrl = appendPath(requestUrl, path); + } + } + const { queryParams, sequenceParams } = calculateQueryParameters(operationSpec, operationArguments, fallbackObject); + /** + * Notice that this call sets the `noOverwrite` parameter to true if the `requestUrl` + * is an absolute path. This ensures that existing query parameter values in `requestUrl` + * do not get overwritten. On the other hand when `requestUrl` is not absolute path, it + * is still being built so there is nothing to overwrite. + */ + requestUrl = appendQueryParams(requestUrl, queryParams, sequenceParams, isAbsolutePath); + return requestUrl; +} +exports.getRequestUrl = getRequestUrl; +function replaceAll(input, replacements) { + let result = input; + for (const [searchValue, replaceValue] of replacements) { + result = result.split(searchValue).join(replaceValue); + } + return result; +} +function calculateUrlReplacements(operationSpec, operationArguments, fallbackObject) { + var _a; + const result = new Map(); + if ((_a = operationSpec.urlParameters) === null || _a === void 0 ? void 0 : _a.length) { + for (const urlParameter of operationSpec.urlParameters) { + let urlParameterValue = (0, operationHelpers_js_1.getOperationArgumentValueFromParameter)(operationArguments, urlParameter, fallbackObject); + const parameterPathString = (0, interfaceHelpers_js_1.getPathStringFromParameter)(urlParameter); + urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, parameterPathString); + if (!urlParameter.skipEncoding) { + urlParameterValue = encodeURIComponent(urlParameterValue); + } + result.set(`{${urlParameter.mapper.serializedName || parameterPathString}}`, urlParameterValue); + } + } + return result; +} +function isAbsoluteUrl(url) { + return url.includes("://"); +} +function appendPath(url, pathToAppend) { + if (!pathToAppend) { + return url; + } + const parsedUrl = new URL(url); + let newPath = parsedUrl.pathname; + if (!newPath.endsWith("/")) { + newPath = `${newPath}/`; + } + if (pathToAppend.startsWith("/")) { + pathToAppend = pathToAppend.substring(1); + } + const searchStart = pathToAppend.indexOf("?"); + if (searchStart !== -1) { + const path = pathToAppend.substring(0, searchStart); + const search = pathToAppend.substring(searchStart + 1); + newPath = newPath + path; + if (search) { + parsedUrl.search = parsedUrl.search ? `${parsedUrl.search}&${search}` : search; + } + } + else { + newPath = newPath + pathToAppend; + } + parsedUrl.pathname = newPath; + return parsedUrl.toString(); +} +function calculateQueryParameters(operationSpec, operationArguments, fallbackObject) { + var _a; + const result = new Map(); + const sequenceParams = new Set(); + if ((_a = operationSpec.queryParameters) === null || _a === void 0 ? void 0 : _a.length) { + for (const queryParameter of operationSpec.queryParameters) { + if (queryParameter.mapper.type.name === "Sequence" && queryParameter.mapper.serializedName) { + sequenceParams.add(queryParameter.mapper.serializedName); + } + let queryParameterValue = (0, operationHelpers_js_1.getOperationArgumentValueFromParameter)(operationArguments, queryParameter, fallbackObject); + if ((queryParameterValue !== undefined && queryParameterValue !== null) || + queryParameter.mapper.required) { + queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, (0, interfaceHelpers_js_1.getPathStringFromParameter)(queryParameter)); + const delimiter = queryParameter.collectionFormat + ? CollectionFormatToDelimiterMap[queryParameter.collectionFormat] + : ""; + if (Array.isArray(queryParameterValue)) { + // replace null and undefined + queryParameterValue = queryParameterValue.map((item) => { + if (item === null || item === undefined) { + return ""; + } + return item; + }); + } + if (queryParameter.collectionFormat === "Multi" && queryParameterValue.length === 0) { + continue; + } + else if (Array.isArray(queryParameterValue) && + (queryParameter.collectionFormat === "SSV" || queryParameter.collectionFormat === "TSV")) { + queryParameterValue = queryParameterValue.join(delimiter); + } + if (!queryParameter.skipEncoding) { + if (Array.isArray(queryParameterValue)) { + queryParameterValue = queryParameterValue.map((item) => { + return encodeURIComponent(item); + }); + } + else { + queryParameterValue = encodeURIComponent(queryParameterValue); + } + } + // Join pipes and CSV *after* encoding, or the server will be upset. + if (Array.isArray(queryParameterValue) && + (queryParameter.collectionFormat === "CSV" || queryParameter.collectionFormat === "Pipes")) { + queryParameterValue = queryParameterValue.join(delimiter); + } + result.set(queryParameter.mapper.serializedName || (0, interfaceHelpers_js_1.getPathStringFromParameter)(queryParameter), queryParameterValue); + } + } + } + return { + queryParams: result, + sequenceParams, + }; +} +function simpleParseQueryParams(queryString) { + const result = new Map(); + if (!queryString || queryString[0] !== "?") { + return result; + } + // remove the leading ? + queryString = queryString.slice(1); + const pairs = queryString.split("&"); + for (const pair of pairs) { + const [name, value] = pair.split("=", 2); + const existingValue = result.get(name); + if (existingValue) { + if (Array.isArray(existingValue)) { + existingValue.push(value); + } + else { + result.set(name, [existingValue, value]); + } + } + else { + result.set(name, value); + } + } + return result; +} +/** @internal */ +function appendQueryParams(url, queryParams, sequenceParams, noOverwrite = false) { + if (queryParams.size === 0) { + return url; + } + const parsedUrl = new URL(url); + // QUIRK: parsedUrl.searchParams will have their name/value pairs decoded, which + // can change their meaning to the server, such as in the case of a SAS signature. + // To avoid accidentally un-encoding a query param, we parse the key/values ourselves + const combinedParams = simpleParseQueryParams(parsedUrl.search); + for (const [name, value] of queryParams) { + const existingValue = combinedParams.get(name); + if (Array.isArray(existingValue)) { + if (Array.isArray(value)) { + existingValue.push(...value); + const valueSet = new Set(existingValue); + combinedParams.set(name, Array.from(valueSet)); + } + else { + existingValue.push(value); + } + } + else if (existingValue) { + if (Array.isArray(value)) { + value.unshift(existingValue); + } + else if (sequenceParams.has(name)) { + combinedParams.set(name, [existingValue, value]); + } + if (!noOverwrite) { + combinedParams.set(name, value); + } + } + else { + combinedParams.set(name, value); + } + } + const searchPieces = []; + for (const [name, value] of combinedParams) { + if (typeof value === "string") { + searchPieces.push(`${name}=${value}`); + } + else if (Array.isArray(value)) { + // QUIRK: If we get an array of values, include multiple key/value pairs + for (const subValue of value) { + searchPieces.push(`${name}=${subValue}`); + } + } + else { + searchPieces.push(`${name}=${value}`); + } + } + // QUIRK: we have to set search manually as searchParams will encode comma when it shouldn't. + parsedUrl.search = searchPieces.length ? `?${searchPieces.join("&")}` : ""; + return parsedUrl.toString(); +} +exports.appendQueryParams = appendQueryParams; +//# sourceMappingURL=urlHelpers.js.map + +/***/ }), + +/***/ 1193: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.flattenResponse = exports.isValidUuid = exports.isDuration = exports.isPrimitiveBody = void 0; +/** + * A type guard for a primitive response body. + * @param value - Value to test + * + * @internal + */ +function isPrimitiveBody(value, mapperTypeName) { + return (mapperTypeName !== "Composite" && + mapperTypeName !== "Dictionary" && + (typeof value === "string" || + typeof value === "number" || + typeof value === "boolean" || + (mapperTypeName === null || mapperTypeName === void 0 ? void 0 : mapperTypeName.match(/^(Date|DateTime|DateTimeRfc1123|UnixTime|ByteArray|Base64Url)$/i)) !== + null || + value === undefined || + value === null)); +} +exports.isPrimitiveBody = isPrimitiveBody; +const validateISODuration = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; +/** + * Returns true if the given string is in ISO 8601 format. + * @param value - The value to be validated for ISO 8601 duration format. + * @internal + */ +function isDuration(value) { + return validateISODuration.test(value); +} +exports.isDuration = isDuration; +const 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; +/** + * Returns true if the provided uuid is valid. + * + * @param uuid - The uuid that needs to be validated. + * + * @internal + */ +function isValidUuid(uuid) { + return validUuidRegex.test(uuid); +} +exports.isValidUuid = isValidUuid; +/** + * Maps the response as follows: + * - wraps the response body if needed (typically if its type is primitive). + * - returns null if the combination of the headers and the body is empty. + * - otherwise, returns the combination of the headers and the body. + * + * @param responseObject - a representation of the parsed response + * @returns the response that will be returned to the user which can be null and/or wrapped + * + * @internal + */ +function handleNullableResponseAndWrappableBody(responseObject) { + const combinedHeadersAndBody = Object.assign(Object.assign({}, responseObject.headers), responseObject.body); + if (responseObject.hasNullableType && + Object.getOwnPropertyNames(combinedHeadersAndBody).length === 0) { + return responseObject.shouldWrapBody ? { body: null } : null; + } + else { + return responseObject.shouldWrapBody + ? Object.assign(Object.assign({}, responseObject.headers), { body: responseObject.body }) : combinedHeadersAndBody; + } +} +/** + * Take a `FullOperationResponse` and turn it into a flat + * response object to hand back to the consumer. + * @param fullResponse - The processed response from the operation request + * @param responseSpec - The response map from the OperationSpec + * + * @internal + */ +function flattenResponse(fullResponse, responseSpec) { + var _a, _b; + const parsedHeaders = fullResponse.parsedHeaders; + // head methods never have a body, but we return a boolean set to body property + // to indicate presence/absence of the resource + if (fullResponse.request.method === "HEAD") { + return Object.assign(Object.assign({}, parsedHeaders), { body: fullResponse.parsedBody }); + } + const bodyMapper = responseSpec && responseSpec.bodyMapper; + const isNullable = Boolean(bodyMapper === null || bodyMapper === void 0 ? void 0 : bodyMapper.nullable); + const expectedBodyTypeName = bodyMapper === null || bodyMapper === void 0 ? void 0 : bodyMapper.type.name; + /** If the body is asked for, we look at the expected body type to handle it */ + if (expectedBodyTypeName === "Stream") { + return Object.assign(Object.assign({}, parsedHeaders), { blobBody: fullResponse.blobBody, readableStreamBody: fullResponse.readableStreamBody }); + } + const modelProperties = (expectedBodyTypeName === "Composite" && + bodyMapper.type.modelProperties) || + {}; + const isPageableResponse = Object.keys(modelProperties).some((k) => modelProperties[k].serializedName === ""); + if (expectedBodyTypeName === "Sequence" || isPageableResponse) { + const arrayResponse = (_a = fullResponse.parsedBody) !== null && _a !== void 0 ? _a : []; + for (const key of Object.keys(modelProperties)) { + if (modelProperties[key].serializedName) { + arrayResponse[key] = (_b = fullResponse.parsedBody) === null || _b === void 0 ? void 0 : _b[key]; + } + } + if (parsedHeaders) { + for (const key of Object.keys(parsedHeaders)) { + arrayResponse[key] = parsedHeaders[key]; + } + } + return isNullable && + !fullResponse.parsedBody && + !parsedHeaders && + Object.getOwnPropertyNames(modelProperties).length === 0 + ? null + : arrayResponse; + } + return handleNullableResponseAndWrappableBody({ + body: fullResponse.parsedBody, + headers: parsedHeaders, + hasNullableType: isNullable, + shouldWrapBody: isPrimitiveBody(fullResponse.parsedBody, expectedBodyTypeName), + }); +} +exports.flattenResponse = flattenResponse; +//# sourceMappingURL=utils.js.map + +/***/ }), + +/***/ 3878: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.pollHttpOperation = exports.isOperationError = exports.getResourceLocation = exports.getOperationStatus = exports.getOperationLocation = exports.initHttpOperation = exports.getStatusFromInitialResponse = exports.getErrorFromResponse = exports.parseRetryAfter = exports.inferLroMode = void 0; +const operation_js_1 = __nccwpck_require__(736); +const logger_js_1 = __nccwpck_require__(480); +function getOperationLocationPollingUrl(inputs) { + const { azureAsyncOperation, operationLocation } = inputs; + return operationLocation !== null && operationLocation !== void 0 ? operationLocation : azureAsyncOperation; +} +function getLocationHeader(rawResponse) { + return rawResponse.headers["location"]; +} +function getOperationLocationHeader(rawResponse) { + return rawResponse.headers["operation-location"]; +} +function getAzureAsyncOperationHeader(rawResponse) { + return rawResponse.headers["azure-asyncoperation"]; +} +function findResourceLocation(inputs) { + var _a; + const { location, requestMethod, requestPath, resourceLocationConfig } = inputs; + switch (requestMethod) { + case "PUT": { + return requestPath; + } + case "DELETE": { + return undefined; + } + case "PATCH": { + return (_a = getDefault()) !== null && _a !== void 0 ? _a : requestPath; + } + default: { + return getDefault(); + } + } + function getDefault() { + switch (resourceLocationConfig) { + case "azure-async-operation": { + return undefined; + } + case "original-uri": { + return requestPath; + } + case "location": + default: { + return location; + } + } + } +} +function inferLroMode(inputs) { + const { rawResponse, requestMethod, requestPath, resourceLocationConfig } = inputs; + const operationLocation = getOperationLocationHeader(rawResponse); + const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse); + const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation }); + const location = getLocationHeader(rawResponse); + const normalizedRequestMethod = requestMethod === null || requestMethod === void 0 ? void 0 : requestMethod.toLocaleUpperCase(); + if (pollingUrl !== undefined) { + return { + mode: "OperationLocation", + operationLocation: pollingUrl, + resourceLocation: findResourceLocation({ + requestMethod: normalizedRequestMethod, + location, + requestPath, + resourceLocationConfig, + }), + }; + } + else if (location !== undefined) { + return { + mode: "ResourceLocation", + operationLocation: location, + }; + } + else if (normalizedRequestMethod === "PUT" && requestPath) { + return { + mode: "Body", + operationLocation: requestPath, + }; + } + else { + return undefined; + } +} +exports.inferLroMode = inferLroMode; +function transformStatus(inputs) { + const { status, statusCode } = inputs; + if (typeof status !== "string" && status !== undefined) { + throw new Error(`Polling was unsuccessful. Expected status to have a string value or no value but it has instead: ${status}. This doesn't necessarily indicate the operation has failed. Check your Azure subscription or resource status for more information.`); + } + switch (status === null || status === void 0 ? void 0 : status.toLocaleLowerCase()) { + case undefined: + return toOperationStatus(statusCode); + case "succeeded": + return "succeeded"; + case "failed": + return "failed"; + case "running": + case "accepted": + case "started": + case "canceling": + case "cancelling": + return "running"; + case "canceled": + case "cancelled": + return "canceled"; + default: { + logger_js_1.logger.verbose(`LRO: unrecognized operation status: ${status}`); + return status; + } + } +} +function getStatus(rawResponse) { + var _a; + const { status } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {}; + return transformStatus({ status, statusCode: rawResponse.statusCode }); +} +function getProvisioningState(rawResponse) { + var _a, _b; + const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {}; + const status = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState; + return transformStatus({ status, statusCode: rawResponse.statusCode }); +} +function toOperationStatus(statusCode) { + if (statusCode === 202) { + return "running"; + } + else if (statusCode < 300) { + return "succeeded"; + } + else { + return "failed"; + } +} +function parseRetryAfter({ rawResponse }) { + const retryAfter = rawResponse.headers["retry-after"]; + if (retryAfter !== undefined) { + // Retry-After header value is either in HTTP date format, or in seconds + const retryAfterInSeconds = parseInt(retryAfter); + return isNaN(retryAfterInSeconds) + ? calculatePollingIntervalFromDate(new Date(retryAfter)) + : retryAfterInSeconds * 1000; + } + return undefined; +} +exports.parseRetryAfter = parseRetryAfter; +function getErrorFromResponse(response) { + const error = accessBodyProperty(response, "error"); + if (!error) { + logger_js_1.logger.warning(`The long-running operation failed but there is no error property in the response's body`); + return; + } + if (!error.code || !error.message) { + logger_js_1.logger.warning(`The long-running operation failed but the error property in the response's body doesn't contain code or message`); + return; + } + return error; +} +exports.getErrorFromResponse = getErrorFromResponse; +function calculatePollingIntervalFromDate(retryAfterDate) { + const timeNow = Math.floor(new Date().getTime()); + const retryAfterTime = retryAfterDate.getTime(); + if (timeNow < retryAfterTime) { + return retryAfterTime - timeNow; + } + return undefined; +} +function getStatusFromInitialResponse(inputs) { + const { response, state, operationLocation } = inputs; + function helper() { + var _a; + const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"]; + switch (mode) { + case undefined: + return toOperationStatus(response.rawResponse.statusCode); + case "Body": + return getOperationStatus(response, state); + default: + return "running"; + } + } + const status = helper(); + return status === "running" && operationLocation === undefined ? "succeeded" : status; +} +exports.getStatusFromInitialResponse = getStatusFromInitialResponse; +/** + * Initiates the long-running operation. + */ +async function initHttpOperation(inputs) { + const { stateProxy, resourceLocationConfig, processResult, lro, setErrorAsResult } = inputs; + return (0, operation_js_1.initOperation)({ + init: async () => { + const response = await lro.sendInitialRequest(); + const config = inferLroMode({ + rawResponse: response.rawResponse, + requestPath: lro.requestPath, + requestMethod: lro.requestMethod, + resourceLocationConfig, + }); + return Object.assign({ response, operationLocation: config === null || config === void 0 ? void 0 : config.operationLocation, resourceLocation: config === null || config === void 0 ? void 0 : config.resourceLocation }, ((config === null || config === void 0 ? void 0 : config.mode) ? { metadata: { mode: config.mode } } : {})); + }, + stateProxy, + processResult: processResult + ? ({ flatResponse }, state) => processResult(flatResponse, state) + : ({ flatResponse }) => flatResponse, + getOperationStatus: getStatusFromInitialResponse, + setErrorAsResult, + }); +} +exports.initHttpOperation = initHttpOperation; +function getOperationLocation({ rawResponse }, state) { + var _a; + const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"]; + switch (mode) { + case "OperationLocation": { + return getOperationLocationPollingUrl({ + operationLocation: getOperationLocationHeader(rawResponse), + azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse), + }); + } + case "ResourceLocation": { + return getLocationHeader(rawResponse); + } + case "Body": + default: { + return undefined; + } + } +} +exports.getOperationLocation = getOperationLocation; +function getOperationStatus({ rawResponse }, state) { + var _a; + const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"]; + switch (mode) { + case "OperationLocation": { + return getStatus(rawResponse); + } + case "ResourceLocation": { + return toOperationStatus(rawResponse.statusCode); + } + case "Body": { + return getProvisioningState(rawResponse); + } + default: + throw new Error(`Internal error: Unexpected operation mode: ${mode}`); + } +} +exports.getOperationStatus = getOperationStatus; +function accessBodyProperty({ flatResponse, rawResponse }, prop) { + var _a, _b; + return (_a = flatResponse === null || flatResponse === void 0 ? void 0 : flatResponse[prop]) !== null && _a !== void 0 ? _a : (_b = rawResponse.body) === null || _b === void 0 ? void 0 : _b[prop]; +} +function getResourceLocation(res, state) { + const loc = accessBodyProperty(res, "resourceLocation"); + if (loc && typeof loc === "string") { + state.config.resourceLocation = loc; + } + return state.config.resourceLocation; +} +exports.getResourceLocation = getResourceLocation; +function isOperationError(e) { + return e.name === "RestError"; +} +exports.isOperationError = isOperationError; +/** Polls the long-running operation. */ +async function pollHttpOperation(inputs) { + const { lro, stateProxy, options, processResult, updateState, setDelay, state, setErrorAsResult, } = inputs; + return (0, operation_js_1.pollOperation)({ + state, + stateProxy, + setDelay, + processResult: processResult + ? ({ flatResponse }, inputState) => processResult(flatResponse, inputState) + : ({ flatResponse }) => flatResponse, + getError: getErrorFromResponse, + updateState, + getPollingInterval: parseRetryAfter, + getOperationLocation, + getOperationStatus, + isOperationError, + getResourceLocation, + options, + /** + * The expansion here is intentional because `lro` could be an object that + * references an inner this, so we need to preserve a reference to it. + */ + poll: async (location, inputOptions) => lro.sendPollRequest(location, inputOptions), + setErrorAsResult, + }); +} +exports.pollHttpOperation = pollHttpOperation; +//# sourceMappingURL=operation.js.map + +/***/ }), + +/***/ 7421: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createHttpPoller = void 0; +const operation_js_1 = __nccwpck_require__(3878); +const poller_js_1 = __nccwpck_require__(8835); +/** + * Creates a poller that can be used to poll a long-running operation. + * @param lro - Description of the long-running operation + * @param options - options to configure the poller + * @returns an initialized poller + */ +async function createHttpPoller(lro, options) { + const { resourceLocationConfig, intervalInMs, processResult, restoreFrom, updateState, withOperationLocation, resolveOnUnsuccessful = false, } = options || {}; + return (0, poller_js_1.buildCreatePoller)({ + getStatusFromInitialResponse: operation_js_1.getStatusFromInitialResponse, + getStatusFromPollResponse: operation_js_1.getOperationStatus, + isOperationError: operation_js_1.isOperationError, + getOperationLocation: operation_js_1.getOperationLocation, + getResourceLocation: operation_js_1.getResourceLocation, + getPollingInterval: operation_js_1.parseRetryAfter, + getError: operation_js_1.getErrorFromResponse, + resolveOnUnsuccessful, + })({ + init: async () => { + const response = await lro.sendInitialRequest(); + const config = (0, operation_js_1.inferLroMode)({ + rawResponse: response.rawResponse, + requestPath: lro.requestPath, + requestMethod: lro.requestMethod, + resourceLocationConfig, + }); + return Object.assign({ response, operationLocation: config === null || config === void 0 ? void 0 : config.operationLocation, resourceLocation: config === null || config === void 0 ? void 0 : config.resourceLocation }, ((config === null || config === void 0 ? void 0 : config.mode) ? { metadata: { mode: config.mode } } : {})); + }, + poll: lro.sendPollRequest, + }, { + intervalInMs, + withOperationLocation, + restoreFrom, + updateState, + processResult: processResult + ? ({ flatResponse }, state) => processResult(flatResponse, state) + : ({ flatResponse }) => flatResponse, + }); +} +exports.createHttpPoller = createHttpPoller; +//# sourceMappingURL=poller.js.map + +/***/ }), + +/***/ 1754: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createHttpPoller = void 0; +const tslib_1 = __nccwpck_require__(1860); +var poller_js_1 = __nccwpck_require__(7421); +Object.defineProperty(exports, "createHttpPoller", ({ enumerable: true, get: function () { return poller_js_1.createHttpPoller; } })); +/** + * This can be uncommented to expose the protocol-agnostic poller + */ +// export { +// BuildCreatePollerOptions, +// Operation, +// CreatePollerOptions, +// OperationConfig, +// RestorableOperationState, +// } from "./poller/models"; +// export { buildCreatePoller } from "./poller/poller"; +/** legacy */ +tslib_1.__exportStar(__nccwpck_require__(5454), exports); +tslib_1.__exportStar(__nccwpck_require__(6272), exports); +tslib_1.__exportStar(__nccwpck_require__(2670), exports); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 5454: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.LroEngine = void 0; +var lroEngine_js_1 = __nccwpck_require__(1607); +Object.defineProperty(exports, "LroEngine", ({ enumerable: true, get: function () { return lroEngine_js_1.LroEngine; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 1607: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.LroEngine = void 0; +const operation_js_1 = __nccwpck_require__(4267); +const constants_js_1 = __nccwpck_require__(5044); +const poller_js_1 = __nccwpck_require__(6272); +const operation_js_2 = __nccwpck_require__(736); +/** + * The LRO Engine, a class that performs polling. + */ +class LroEngine extends poller_js_1.Poller { + constructor(lro, options) { + const { intervalInMs = constants_js_1.POLL_INTERVAL_IN_MS, resumeFrom, resolveOnUnsuccessful = false, isDone, lroResourceLocationConfig, processResult, updateState, } = options || {}; + const state = resumeFrom + ? (0, operation_js_2.deserializeState)(resumeFrom) + : {}; + const operation = new operation_js_1.GenericPollOperation(state, lro, !resolveOnUnsuccessful, lroResourceLocationConfig, processResult, updateState, isDone); + super(operation); + this.resolveOnUnsuccessful = resolveOnUnsuccessful; + this.config = { intervalInMs: intervalInMs }; + operation.setPollerConfig(this.config); + } + /** + * The method used by the poller to wait before attempting to update its operation. + */ + delay() { + return new Promise((resolve) => setTimeout(() => resolve(), this.config.intervalInMs)); + } +} +exports.LroEngine = LroEngine; +//# sourceMappingURL=lroEngine.js.map + +/***/ }), + +/***/ 4267: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GenericPollOperation = void 0; +const operation_js_1 = __nccwpck_require__(3878); +const logger_js_1 = __nccwpck_require__(480); +const createStateProxy = () => ({ + initState: (config) => ({ config, isStarted: true }), + setCanceled: (state) => (state.isCancelled = true), + setError: (state, error) => (state.error = error), + setResult: (state, result) => (state.result = result), + setRunning: (state) => (state.isStarted = true), + setSucceeded: (state) => (state.isCompleted = true), + setFailed: () => { + /** empty body */ + }, + getError: (state) => state.error, + getResult: (state) => state.result, + isCanceled: (state) => !!state.isCancelled, + isFailed: (state) => !!state.error, + isRunning: (state) => !!state.isStarted, + isSucceeded: (state) => Boolean(state.isCompleted && !state.isCancelled && !state.error), +}); +class GenericPollOperation { + constructor(state, lro, setErrorAsResult, lroResourceLocationConfig, processResult, updateState, isDone) { + this.state = state; + this.lro = lro; + this.setErrorAsResult = setErrorAsResult; + this.lroResourceLocationConfig = lroResourceLocationConfig; + this.processResult = processResult; + this.updateState = updateState; + this.isDone = isDone; + } + setPollerConfig(pollerConfig) { + this.pollerConfig = pollerConfig; + } + async update(options) { + var _a; + const stateProxy = createStateProxy(); + if (!this.state.isStarted) { + this.state = Object.assign(Object.assign({}, this.state), (await (0, operation_js_1.initHttpOperation)({ + lro: this.lro, + stateProxy, + resourceLocationConfig: this.lroResourceLocationConfig, + processResult: this.processResult, + setErrorAsResult: this.setErrorAsResult, + }))); + } + const updateState = this.updateState; + const isDone = this.isDone; + if (!this.state.isCompleted && this.state.error === undefined) { + await (0, operation_js_1.pollHttpOperation)({ + lro: this.lro, + state: this.state, + stateProxy, + processResult: this.processResult, + updateState: updateState + ? (state, { rawResponse }) => updateState(state, rawResponse) + : undefined, + isDone: isDone + ? ({ flatResponse }, state) => isDone(flatResponse, state) + : undefined, + options, + setDelay: (intervalInMs) => { + this.pollerConfig.intervalInMs = intervalInMs; + }, + setErrorAsResult: this.setErrorAsResult, + }); + } + (_a = options === null || options === void 0 ? void 0 : options.fireProgress) === null || _a === void 0 ? void 0 : _a.call(options, this.state); + return this; + } + async cancel() { + logger_js_1.logger.error("`cancelOperation` is deprecated because it wasn't implemented"); + return this; + } + /** + * Serializes the Poller operation. + */ + toString() { + return JSON.stringify({ + state: this.state, + }); + } +} +exports.GenericPollOperation = GenericPollOperation; +//# sourceMappingURL=operation.js.map + +/***/ }), + +/***/ 2670: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +//# sourceMappingURL=pollOperation.js.map + +/***/ }), + +/***/ 6272: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Poller = exports.PollerCancelledError = exports.PollerStoppedError = void 0; +/** + * When a poller is manually stopped through the `stopPolling` method, + * the poller will be rejected with an instance of the PollerStoppedError. + */ +class PollerStoppedError extends Error { + constructor(message) { + super(message); + this.name = "PollerStoppedError"; + Object.setPrototypeOf(this, PollerStoppedError.prototype); + } +} +exports.PollerStoppedError = PollerStoppedError; +/** + * When the operation is cancelled, the poller will be rejected with an instance + * of the PollerCancelledError. + */ +class PollerCancelledError extends Error { + constructor(message) { + super(message); + this.name = "PollerCancelledError"; + Object.setPrototypeOf(this, PollerCancelledError.prototype); + } +} +exports.PollerCancelledError = PollerCancelledError; +/** + * 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 +class Poller { + /** + * 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`. + */ + constructor(operation) { + /** controls whether to throw an error if the operation failed or was canceled. */ + this.resolveOnUnsuccessful = false; + this.stopped = true; + this.pollProgressCallbacks = []; + this.operation = operation; + this.promise = new Promise((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(() => { + /* intentionally blank */ + }); + } + /** + * Starts a loop that will break only if the poller is done + * or if the poller is stopped. + */ + async startPolling(pollOptions = {}) { + if (this.stopped) { + this.stopped = false; + } + while (!this.isStopped() && !this.isDone()) { + await this.poll(pollOptions); + await this.delay(); + } + } + /** + * 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. + */ + async pollOnce(options = {}) { + if (!this.isDone()) { + this.operation = await this.operation.update({ + abortSignal: options.abortSignal, + fireProgress: this.fireProgress.bind(this), + }); + } + this.processUpdatedState(); + } + /** + * 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. + */ + fireProgress(state) { + for (const callback of this.pollProgressCallbacks) { + callback(state); + } + } + /** + * Invokes the underlying operation's cancel method. + */ + async cancelOnce(options = {}) { + this.operation = await this.operation.cancel(options); + } + /** + * 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. + */ + poll(options = {}) { + if (!this.pollOncePromise) { + this.pollOncePromise = this.pollOnce(options); + const clearPollOncePromise = () => { + this.pollOncePromise = undefined; + }; + this.pollOncePromise.then(clearPollOncePromise, clearPollOncePromise).catch(this.reject); + } + return this.pollOncePromise; + } + processUpdatedState() { + if (this.operation.state.error) { + this.stopped = true; + if (!this.resolveOnUnsuccessful) { + this.reject(this.operation.state.error); + throw this.operation.state.error; + } + } + if (this.operation.state.isCancelled) { + this.stopped = true; + if (!this.resolveOnUnsuccessful) { + const error = new PollerCancelledError("Operation was canceled"); + this.reject(error); + throw error; + } + } + 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.getResult()); + } + } + /** + * Returns a promise that will resolve once the underlying operation is completed. + */ + async pollUntilDone(pollOptions = {}) { + if (this.stopped) { + this.startPolling(pollOptions).catch(this.reject); + } + // This is needed because the state could have been updated by + // `cancelOperation`, e.g. the operation is canceled or an error occurred. + this.processUpdatedState(); + 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. + */ + onProgress(callback) { + this.pollProgressCallbacks.push(callback); + return () => { + this.pollProgressCallbacks = this.pollProgressCallbacks.filter((c) => c !== callback); + }; + } + /** + * Returns true if the poller has finished polling. + */ + isDone() { + const state = this.operation.state; + return Boolean(state.isCompleted || state.isCancelled || state.error); + } + /** + * Stops the poller from continuing to poll. + */ + stopPolling() { + 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. + */ + isStopped() { + 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. + */ + cancelOperation(options = {}) { + 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. + */ + getOperationState() { + 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. + */ + getResult() { + const state = this.operation.state; + return state.result; + } + /** + * Returns a serialized version of the poller's operation + * by invoking the operation's toString method. + */ + toString() { + return this.operation.toString(); + } +} +exports.Poller = Poller; +//# sourceMappingURL=poller.js.map + +/***/ }), + +/***/ 480: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.logger = void 0; +const logger_1 = __nccwpck_require__(6515); +/** + * The `@azure/logger` configuration for this package. + * @internal + */ +exports.logger = (0, logger_1.createClientLogger)("core-lro"); +//# sourceMappingURL=logger.js.map + +/***/ }), + +/***/ 5044: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.terminalStates = exports.POLL_INTERVAL_IN_MS = void 0; +/** + * The default time interval to wait before sending the next polling request. + */ +exports.POLL_INTERVAL_IN_MS = 2000; +/** + * The closed set of terminal states. + */ +exports.terminalStates = ["succeeded", "canceled", "failed"]; +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ 736: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.pollOperation = exports.initOperation = exports.deserializeState = void 0; +const logger_js_1 = __nccwpck_require__(480); +const constants_js_1 = __nccwpck_require__(5044); +/** + * Deserializes the state + */ +function deserializeState(serializedState) { + try { + return JSON.parse(serializedState).state; + } + catch (e) { + throw new Error(`Unable to deserialize input state: ${serializedState}`); + } +} +exports.deserializeState = deserializeState; +function setStateError(inputs) { + const { state, stateProxy, isOperationError } = inputs; + return (error) => { + if (isOperationError(error)) { + stateProxy.setError(state, error); + stateProxy.setFailed(state); + } + throw error; + }; +} +function appendReadableErrorMessage(currentMessage, innerMessage) { + let message = currentMessage; + if (message.slice(-1) !== ".") { + message = message + "."; + } + return message + " " + innerMessage; +} +function simplifyError(err) { + let message = err.message; + let code = err.code; + let curErr = err; + while (curErr.innererror) { + curErr = curErr.innererror; + code = curErr.code; + message = appendReadableErrorMessage(message, curErr.message); + } + return { + code, + message, + }; +} +function processOperationStatus(result) { + const { state, stateProxy, status, isDone, processResult, getError, response, setErrorAsResult } = result; + switch (status) { + case "succeeded": { + stateProxy.setSucceeded(state); + break; + } + case "failed": { + const err = getError === null || getError === void 0 ? void 0 : getError(response); + let postfix = ""; + if (err) { + const { code, message } = simplifyError(err); + postfix = `. ${code}. ${message}`; + } + const errStr = `The long-running operation has failed${postfix}`; + stateProxy.setError(state, new Error(errStr)); + stateProxy.setFailed(state); + logger_js_1.logger.warning(errStr); + break; + } + case "canceled": { + stateProxy.setCanceled(state); + break; + } + } + if ((isDone === null || isDone === void 0 ? void 0 : isDone(response, state)) || + (isDone === undefined && + ["succeeded", "canceled"].concat(setErrorAsResult ? [] : ["failed"]).includes(status))) { + stateProxy.setResult(state, buildResult({ + response, + state, + processResult, + })); + } +} +function buildResult(inputs) { + const { processResult, response, state } = inputs; + return processResult ? processResult(response, state) : response; +} +/** + * Initiates the long-running operation. + */ +async function initOperation(inputs) { + const { init, stateProxy, processResult, getOperationStatus, withOperationLocation, setErrorAsResult, } = inputs; + const { operationLocation, resourceLocation, metadata, response } = await init(); + if (operationLocation) + withOperationLocation === null || withOperationLocation === void 0 ? void 0 : withOperationLocation(operationLocation, false); + const config = { + metadata, + operationLocation, + resourceLocation, + }; + logger_js_1.logger.verbose(`LRO: Operation description:`, config); + const state = stateProxy.initState(config); + const status = getOperationStatus({ response, state, operationLocation }); + processOperationStatus({ state, status, stateProxy, response, setErrorAsResult, processResult }); + return state; +} +exports.initOperation = initOperation; +async function pollOperationHelper(inputs) { + const { poll, state, stateProxy, operationLocation, getOperationStatus, getResourceLocation, isOperationError, options, } = inputs; + const response = await poll(operationLocation, options).catch(setStateError({ + state, + stateProxy, + isOperationError, + })); + const status = getOperationStatus(response, state); + logger_js_1.logger.verbose(`LRO: Status:\n\tPolling from: ${state.config.operationLocation}\n\tOperation status: ${status}\n\tPolling status: ${constants_js_1.terminalStates.includes(status) ? "Stopped" : "Running"}`); + if (status === "succeeded") { + const resourceLocation = getResourceLocation(response, state); + if (resourceLocation !== undefined) { + return { + response: await poll(resourceLocation).catch(setStateError({ state, stateProxy, isOperationError })), + status, + }; + } + } + return { response, status }; +} +/** Polls the long-running operation. */ +async function pollOperation(inputs) { + const { poll, state, stateProxy, options, getOperationStatus, getResourceLocation, getOperationLocation, isOperationError, withOperationLocation, getPollingInterval, processResult, getError, updateState, setDelay, isDone, setErrorAsResult, } = inputs; + const { operationLocation } = state.config; + if (operationLocation !== undefined) { + const { response, status } = await pollOperationHelper({ + poll, + getOperationStatus, + state, + stateProxy, + operationLocation, + getResourceLocation, + isOperationError, + options, + }); + processOperationStatus({ + status, + response, + state, + stateProxy, + isDone, + processResult, + getError, + setErrorAsResult, + }); + if (!constants_js_1.terminalStates.includes(status)) { + const intervalInMs = getPollingInterval === null || getPollingInterval === void 0 ? void 0 : getPollingInterval(response); + if (intervalInMs) + setDelay(intervalInMs); + const location = getOperationLocation === null || getOperationLocation === void 0 ? void 0 : getOperationLocation(response, state); + if (location !== undefined) { + const isUpdated = operationLocation !== location; + state.config.operationLocation = location; + withOperationLocation === null || withOperationLocation === void 0 ? void 0 : withOperationLocation(location, isUpdated); + } + else + withOperationLocation === null || withOperationLocation === void 0 ? void 0 : withOperationLocation(operationLocation, false); + } + updateState === null || updateState === void 0 ? void 0 : updateState(state, response); + } +} +exports.pollOperation = pollOperation; +//# sourceMappingURL=operation.js.map + +/***/ }), + +/***/ 8835: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.buildCreatePoller = void 0; +const operation_js_1 = __nccwpck_require__(736); +const constants_js_1 = __nccwpck_require__(5044); +const core_util_1 = __nccwpck_require__(7779); +const createStateProxy = () => ({ + /** + * The state at this point is created to be of type OperationState. + * It will be updated later to be of type TState when the + * customer-provided callback, `updateState`, is called during polling. + */ + initState: (config) => ({ status: "running", config }), + setCanceled: (state) => (state.status = "canceled"), + setError: (state, error) => (state.error = error), + setResult: (state, result) => (state.result = result), + setRunning: (state) => (state.status = "running"), + setSucceeded: (state) => (state.status = "succeeded"), + setFailed: (state) => (state.status = "failed"), + getError: (state) => state.error, + getResult: (state) => state.result, + isCanceled: (state) => state.status === "canceled", + isFailed: (state) => state.status === "failed", + isRunning: (state) => state.status === "running", + isSucceeded: (state) => state.status === "succeeded", +}); +/** + * Returns a poller factory. + */ +function buildCreatePoller(inputs) { + const { getOperationLocation, getStatusFromInitialResponse, getStatusFromPollResponse, isOperationError, getResourceLocation, getPollingInterval, getError, resolveOnUnsuccessful, } = inputs; + return async ({ init, poll }, options) => { + const { processResult, updateState, withOperationLocation: withOperationLocationCallback, intervalInMs = constants_js_1.POLL_INTERVAL_IN_MS, restoreFrom, } = options || {}; + const stateProxy = createStateProxy(); + const withOperationLocation = withOperationLocationCallback + ? (() => { + let called = false; + return (operationLocation, isUpdated) => { + if (isUpdated) + withOperationLocationCallback(operationLocation); + else if (!called) + withOperationLocationCallback(operationLocation); + called = true; + }; + })() + : undefined; + const state = restoreFrom + ? (0, operation_js_1.deserializeState)(restoreFrom) + : await (0, operation_js_1.initOperation)({ + init, + stateProxy, + processResult, + getOperationStatus: getStatusFromInitialResponse, + withOperationLocation, + setErrorAsResult: !resolveOnUnsuccessful, + }); + let resultPromise; + const abortController = new AbortController(); + const handlers = new Map(); + const handleProgressEvents = async () => handlers.forEach((h) => h(state)); + const cancelErrMsg = "Operation was canceled"; + let currentPollIntervalInMs = intervalInMs; + const poller = { + getOperationState: () => state, + getResult: () => state.result, + isDone: () => ["succeeded", "failed", "canceled"].includes(state.status), + isStopped: () => resultPromise === undefined, + stopPolling: () => { + abortController.abort(); + }, + toString: () => JSON.stringify({ + state, + }), + onProgress: (callback) => { + const s = Symbol(); + handlers.set(s, callback); + return () => handlers.delete(s); + }, + pollUntilDone: (pollOptions) => (resultPromise !== null && resultPromise !== void 0 ? resultPromise : (resultPromise = (async () => { + const { abortSignal: inputAbortSignal } = pollOptions || {}; + // In the future we can use AbortSignal.any() instead + function abortListener() { + abortController.abort(); + } + const abortSignal = abortController.signal; + if (inputAbortSignal === null || inputAbortSignal === void 0 ? void 0 : inputAbortSignal.aborted) { + abortController.abort(); + } + else if (!abortSignal.aborted) { + inputAbortSignal === null || inputAbortSignal === void 0 ? void 0 : inputAbortSignal.addEventListener("abort", abortListener, { once: true }); + } + try { + if (!poller.isDone()) { + await poller.poll({ abortSignal }); + while (!poller.isDone()) { + await (0, core_util_1.delay)(currentPollIntervalInMs, { abortSignal }); + await poller.poll({ abortSignal }); + } + } + } + finally { + inputAbortSignal === null || inputAbortSignal === void 0 ? void 0 : inputAbortSignal.removeEventListener("abort", abortListener); + } + if (resolveOnUnsuccessful) { + return poller.getResult(); + } + else { + switch (state.status) { + case "succeeded": + return poller.getResult(); + case "canceled": + throw new Error(cancelErrMsg); + case "failed": + throw state.error; + case "notStarted": + case "running": + throw new Error(`Polling completed without succeeding or failing`); + } + } + })().finally(() => { + resultPromise = undefined; + }))), + async poll(pollOptions) { + if (resolveOnUnsuccessful) { + if (poller.isDone()) + return; + } + else { + switch (state.status) { + case "succeeded": + return; + case "canceled": + throw new Error(cancelErrMsg); + case "failed": + throw state.error; + } + } + await (0, operation_js_1.pollOperation)({ + poll, + state, + stateProxy, + getOperationLocation, + isOperationError, + withOperationLocation, + getPollingInterval, + getOperationStatus: getStatusFromPollResponse, + getResourceLocation, + processResult, + getError, + updateState, + options: pollOptions, + setDelay: (pollIntervalInMs) => { + currentPollIntervalInMs = pollIntervalInMs; + }, + setErrorAsResult: !resolveOnUnsuccessful, + }); + await handleProgressEvents(); + if (!resolveOnUnsuccessful) { + switch (state.status) { + case "canceled": + throw new Error(cancelErrMsg); + case "failed": + throw state.error; + } + } + }, + }; + return poller; + }; +} +exports.buildCreatePoller = buildCreatePoller; +//# sourceMappingURL=poller.js.map + +/***/ }), + +/***/ 6427: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DEFAULT_RETRY_POLICY_COUNT = exports.SDK_VERSION = void 0; +exports.SDK_VERSION = "1.17.0"; +exports.DEFAULT_RETRY_POLICY_COUNT = 3; +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ 862: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createPipelineFromOptions = createPipelineFromOptions; +const logPolicy_js_1 = __nccwpck_require__(3253); +const pipeline_js_1 = __nccwpck_require__(9590); +const redirectPolicy_js_1 = __nccwpck_require__(4087); +const userAgentPolicy_js_1 = __nccwpck_require__(2799); +const multipartPolicy_js_1 = __nccwpck_require__(5807); +const decompressResponsePolicy_js_1 = __nccwpck_require__(9295); +const defaultRetryPolicy_js_1 = __nccwpck_require__(8170); +const formDataPolicy_js_1 = __nccwpck_require__(5497); +const core_util_1 = __nccwpck_require__(7779); +const proxyPolicy_js_1 = __nccwpck_require__(2815); +const setClientRequestIdPolicy_js_1 = __nccwpck_require__(5686); +const tlsPolicy_js_1 = __nccwpck_require__(5798); +const tracingPolicy_js_1 = __nccwpck_require__(3237); +/** + * Create a new pipeline with a default set of customizable policies. + * @param options - Options to configure a custom pipeline. + */ +function createPipelineFromOptions(options) { + var _a; + const pipeline = (0, pipeline_js_1.createEmptyPipeline)(); + if (core_util_1.isNodeLike) { + if (options.tlsOptions) { + pipeline.addPolicy((0, tlsPolicy_js_1.tlsPolicy)(options.tlsOptions)); + } + pipeline.addPolicy((0, proxyPolicy_js_1.proxyPolicy)(options.proxyOptions)); + pipeline.addPolicy((0, decompressResponsePolicy_js_1.decompressResponsePolicy)()); + } + pipeline.addPolicy((0, formDataPolicy_js_1.formDataPolicy)(), { beforePolicies: [multipartPolicy_js_1.multipartPolicyName] }); + pipeline.addPolicy((0, userAgentPolicy_js_1.userAgentPolicy)(options.userAgentOptions)); + pipeline.addPolicy((0, setClientRequestIdPolicy_js_1.setClientRequestIdPolicy)((_a = options.telemetryOptions) === null || _a === void 0 ? void 0 : _a.clientRequestIdHeaderName)); + // The multipart policy is added after policies with no phase, so that + // policies can be added between it and formDataPolicy to modify + // properties (e.g., making the boundary constant in recorded tests). + pipeline.addPolicy((0, multipartPolicy_js_1.multipartPolicy)(), { afterPhase: "Deserialize" }); + pipeline.addPolicy((0, defaultRetryPolicy_js_1.defaultRetryPolicy)(options.retryOptions), { phase: "Retry" }); + pipeline.addPolicy((0, tracingPolicy_js_1.tracingPolicy)(Object.assign(Object.assign({}, options.userAgentOptions), options.loggingOptions)), { + afterPhase: "Retry", + }); + if (core_util_1.isNodeLike) { + // Both XHR and Fetch expect to handle redirects automatically, + // so only include this policy when we're in Node. + pipeline.addPolicy((0, redirectPolicy_js_1.redirectPolicy)(options.redirectOptions), { afterPhase: "Retry" }); + } + pipeline.addPolicy((0, logPolicy_js_1.logPolicy)(options.loggingOptions), { afterPhase: "Sign" }); + return pipeline; +} +//# sourceMappingURL=createPipelineFromOptions.js.map + +/***/ }), + +/***/ 7960: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createDefaultHttpClient = createDefaultHttpClient; +const nodeHttpClient_js_1 = __nccwpck_require__(195); +/** + * Create the correct HttpClient for the current environment. + */ +function createDefaultHttpClient() { + return (0, nodeHttpClient_js_1.createNodeHttpClient)(); +} +//# sourceMappingURL=defaultHttpClient.js.map + +/***/ }), + +/***/ 192: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createHttpHeaders = createHttpHeaders; +function normalizeName(name) { + return name.toLowerCase(); +} +function* headerIterator(map) { + for (const entry of map.values()) { + yield [entry.name, entry.value]; + } +} +class HttpHeadersImpl { + constructor(rawHeaders) { + this._headersMap = new Map(); + if (rawHeaders) { + for (const headerName of Object.keys(rawHeaders)) { + this.set(headerName, rawHeaders[headerName]); + } + } + } + /** + * Set a header in this collection with the provided name and value. The name is + * case-insensitive. + * @param name - The name of the header to set. This value is case-insensitive. + * @param value - The value of the header to set. + */ + set(name, value) { + this._headersMap.set(normalizeName(name), { name, value: String(value).trim() }); + } + /** + * Get the header value for the provided header name, or undefined if no header exists in this + * collection with the provided name. + * @param name - The name of the header. This value is case-insensitive. + */ + get(name) { + var _a; + return (_a = this._headersMap.get(normalizeName(name))) === null || _a === void 0 ? void 0 : _a.value; + } + /** + * Get whether or not this header collection contains a header entry for the provided header name. + * @param name - The name of the header to set. This value is case-insensitive. + */ + has(name) { + return this._headersMap.has(normalizeName(name)); + } + /** + * Remove the header with the provided headerName. + * @param name - The name of the header to remove. + */ + delete(name) { + this._headersMap.delete(normalizeName(name)); + } + /** + * Get the JSON object representation of this HTTP header collection. + */ + toJSON(options = {}) { + const result = {}; + if (options.preserveCase) { + for (const entry of this._headersMap.values()) { + result[entry.name] = entry.value; + } + } + else { + for (const [normalizedName, entry] of this._headersMap) { + result[normalizedName] = entry.value; + } + } + return result; + } + /** + * Get the string representation of this HTTP header collection. + */ + toString() { + return JSON.stringify(this.toJSON({ preserveCase: true })); + } + /** + * Iterate over tuples of header [name, value] pairs. + */ + [Symbol.iterator]() { + return headerIterator(this._headersMap); + } +} +/** + * Creates an object that satisfies the `HttpHeaders` interface. + * @param rawHeaders - A simple object representing initial headers + */ +function createHttpHeaders(rawHeaders) { + return new HttpHeadersImpl(rawHeaders); +} +//# sourceMappingURL=httpHeaders.js.map + +/***/ }), + +/***/ 778: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createFileFromStream = exports.createFile = exports.auxiliaryAuthenticationHeaderPolicyName = exports.auxiliaryAuthenticationHeaderPolicy = exports.ndJsonPolicyName = exports.ndJsonPolicy = exports.bearerTokenAuthenticationPolicyName = exports.bearerTokenAuthenticationPolicy = exports.formDataPolicyName = exports.formDataPolicy = exports.tlsPolicyName = exports.tlsPolicy = exports.userAgentPolicyName = exports.userAgentPolicy = exports.defaultRetryPolicy = exports.tracingPolicyName = exports.tracingPolicy = exports.retryPolicy = exports.throttlingRetryPolicyName = exports.throttlingRetryPolicy = exports.systemErrorRetryPolicyName = exports.systemErrorRetryPolicy = exports.redirectPolicyName = exports.redirectPolicy = exports.getDefaultProxySettings = exports.proxyPolicyName = exports.proxyPolicy = exports.multipartPolicyName = exports.multipartPolicy = exports.logPolicyName = exports.logPolicy = exports.setClientRequestIdPolicyName = exports.setClientRequestIdPolicy = exports.exponentialRetryPolicyName = exports.exponentialRetryPolicy = exports.decompressResponsePolicyName = exports.decompressResponsePolicy = exports.isRestError = exports.RestError = exports.createPipelineRequest = exports.createHttpHeaders = exports.createDefaultHttpClient = exports.createPipelineFromOptions = exports.createEmptyPipeline = void 0; +var pipeline_js_1 = __nccwpck_require__(9590); +Object.defineProperty(exports, "createEmptyPipeline", ({ enumerable: true, get: function () { return pipeline_js_1.createEmptyPipeline; } })); +var createPipelineFromOptions_js_1 = __nccwpck_require__(862); +Object.defineProperty(exports, "createPipelineFromOptions", ({ enumerable: true, get: function () { return createPipelineFromOptions_js_1.createPipelineFromOptions; } })); +var defaultHttpClient_js_1 = __nccwpck_require__(7960); +Object.defineProperty(exports, "createDefaultHttpClient", ({ enumerable: true, get: function () { return defaultHttpClient_js_1.createDefaultHttpClient; } })); +var httpHeaders_js_1 = __nccwpck_require__(192); +Object.defineProperty(exports, "createHttpHeaders", ({ enumerable: true, get: function () { return httpHeaders_js_1.createHttpHeaders; } })); +var pipelineRequest_js_1 = __nccwpck_require__(5709); +Object.defineProperty(exports, "createPipelineRequest", ({ enumerable: true, get: function () { return pipelineRequest_js_1.createPipelineRequest; } })); +var restError_js_1 = __nccwpck_require__(8666); +Object.defineProperty(exports, "RestError", ({ enumerable: true, get: function () { return restError_js_1.RestError; } })); +Object.defineProperty(exports, "isRestError", ({ enumerable: true, get: function () { return restError_js_1.isRestError; } })); +var decompressResponsePolicy_js_1 = __nccwpck_require__(9295); +Object.defineProperty(exports, "decompressResponsePolicy", ({ enumerable: true, get: function () { return decompressResponsePolicy_js_1.decompressResponsePolicy; } })); +Object.defineProperty(exports, "decompressResponsePolicyName", ({ enumerable: true, get: function () { return decompressResponsePolicy_js_1.decompressResponsePolicyName; } })); +var exponentialRetryPolicy_js_1 = __nccwpck_require__(6708); +Object.defineProperty(exports, "exponentialRetryPolicy", ({ enumerable: true, get: function () { return exponentialRetryPolicy_js_1.exponentialRetryPolicy; } })); +Object.defineProperty(exports, "exponentialRetryPolicyName", ({ enumerable: true, get: function () { return exponentialRetryPolicy_js_1.exponentialRetryPolicyName; } })); +var setClientRequestIdPolicy_js_1 = __nccwpck_require__(5686); +Object.defineProperty(exports, "setClientRequestIdPolicy", ({ enumerable: true, get: function () { return setClientRequestIdPolicy_js_1.setClientRequestIdPolicy; } })); +Object.defineProperty(exports, "setClientRequestIdPolicyName", ({ enumerable: true, get: function () { return setClientRequestIdPolicy_js_1.setClientRequestIdPolicyName; } })); +var logPolicy_js_1 = __nccwpck_require__(3253); +Object.defineProperty(exports, "logPolicy", ({ enumerable: true, get: function () { return logPolicy_js_1.logPolicy; } })); +Object.defineProperty(exports, "logPolicyName", ({ enumerable: true, get: function () { return logPolicy_js_1.logPolicyName; } })); +var multipartPolicy_js_1 = __nccwpck_require__(5807); +Object.defineProperty(exports, "multipartPolicy", ({ enumerable: true, get: function () { return multipartPolicy_js_1.multipartPolicy; } })); +Object.defineProperty(exports, "multipartPolicyName", ({ enumerable: true, get: function () { return multipartPolicy_js_1.multipartPolicyName; } })); +var proxyPolicy_js_1 = __nccwpck_require__(2815); +Object.defineProperty(exports, "proxyPolicy", ({ enumerable: true, get: function () { return proxyPolicy_js_1.proxyPolicy; } })); +Object.defineProperty(exports, "proxyPolicyName", ({ enumerable: true, get: function () { return proxyPolicy_js_1.proxyPolicyName; } })); +Object.defineProperty(exports, "getDefaultProxySettings", ({ enumerable: true, get: function () { return proxyPolicy_js_1.getDefaultProxySettings; } })); +var redirectPolicy_js_1 = __nccwpck_require__(4087); +Object.defineProperty(exports, "redirectPolicy", ({ enumerable: true, get: function () { return redirectPolicy_js_1.redirectPolicy; } })); +Object.defineProperty(exports, "redirectPolicyName", ({ enumerable: true, get: function () { return redirectPolicy_js_1.redirectPolicyName; } })); +var systemErrorRetryPolicy_js_1 = __nccwpck_require__(6518); +Object.defineProperty(exports, "systemErrorRetryPolicy", ({ enumerable: true, get: function () { return systemErrorRetryPolicy_js_1.systemErrorRetryPolicy; } })); +Object.defineProperty(exports, "systemErrorRetryPolicyName", ({ enumerable: true, get: function () { return systemErrorRetryPolicy_js_1.systemErrorRetryPolicyName; } })); +var throttlingRetryPolicy_js_1 = __nccwpck_require__(7540); +Object.defineProperty(exports, "throttlingRetryPolicy", ({ enumerable: true, get: function () { return throttlingRetryPolicy_js_1.throttlingRetryPolicy; } })); +Object.defineProperty(exports, "throttlingRetryPolicyName", ({ enumerable: true, get: function () { return throttlingRetryPolicy_js_1.throttlingRetryPolicyName; } })); +var retryPolicy_js_1 = __nccwpck_require__(6085); +Object.defineProperty(exports, "retryPolicy", ({ enumerable: true, get: function () { return retryPolicy_js_1.retryPolicy; } })); +var tracingPolicy_js_1 = __nccwpck_require__(3237); +Object.defineProperty(exports, "tracingPolicy", ({ enumerable: true, get: function () { return tracingPolicy_js_1.tracingPolicy; } })); +Object.defineProperty(exports, "tracingPolicyName", ({ enumerable: true, get: function () { return tracingPolicy_js_1.tracingPolicyName; } })); +var defaultRetryPolicy_js_1 = __nccwpck_require__(8170); +Object.defineProperty(exports, "defaultRetryPolicy", ({ enumerable: true, get: function () { return defaultRetryPolicy_js_1.defaultRetryPolicy; } })); +var userAgentPolicy_js_1 = __nccwpck_require__(2799); +Object.defineProperty(exports, "userAgentPolicy", ({ enumerable: true, get: function () { return userAgentPolicy_js_1.userAgentPolicy; } })); +Object.defineProperty(exports, "userAgentPolicyName", ({ enumerable: true, get: function () { return userAgentPolicy_js_1.userAgentPolicyName; } })); +var tlsPolicy_js_1 = __nccwpck_require__(5798); +Object.defineProperty(exports, "tlsPolicy", ({ enumerable: true, get: function () { return tlsPolicy_js_1.tlsPolicy; } })); +Object.defineProperty(exports, "tlsPolicyName", ({ enumerable: true, get: function () { return tlsPolicy_js_1.tlsPolicyName; } })); +var formDataPolicy_js_1 = __nccwpck_require__(5497); +Object.defineProperty(exports, "formDataPolicy", ({ enumerable: true, get: function () { return formDataPolicy_js_1.formDataPolicy; } })); +Object.defineProperty(exports, "formDataPolicyName", ({ enumerable: true, get: function () { return formDataPolicy_js_1.formDataPolicyName; } })); +var bearerTokenAuthenticationPolicy_js_1 = __nccwpck_require__(6925); +Object.defineProperty(exports, "bearerTokenAuthenticationPolicy", ({ enumerable: true, get: function () { return bearerTokenAuthenticationPolicy_js_1.bearerTokenAuthenticationPolicy; } })); +Object.defineProperty(exports, "bearerTokenAuthenticationPolicyName", ({ enumerable: true, get: function () { return bearerTokenAuthenticationPolicy_js_1.bearerTokenAuthenticationPolicyName; } })); +var ndJsonPolicy_js_1 = __nccwpck_require__(6827); +Object.defineProperty(exports, "ndJsonPolicy", ({ enumerable: true, get: function () { return ndJsonPolicy_js_1.ndJsonPolicy; } })); +Object.defineProperty(exports, "ndJsonPolicyName", ({ enumerable: true, get: function () { return ndJsonPolicy_js_1.ndJsonPolicyName; } })); +var auxiliaryAuthenticationHeaderPolicy_js_1 = __nccwpck_require__(2262); +Object.defineProperty(exports, "auxiliaryAuthenticationHeaderPolicy", ({ enumerable: true, get: function () { return auxiliaryAuthenticationHeaderPolicy_js_1.auxiliaryAuthenticationHeaderPolicy; } })); +Object.defineProperty(exports, "auxiliaryAuthenticationHeaderPolicyName", ({ enumerable: true, get: function () { return auxiliaryAuthenticationHeaderPolicy_js_1.auxiliaryAuthenticationHeaderPolicyName; } })); +var file_js_1 = __nccwpck_require__(7073); +Object.defineProperty(exports, "createFile", ({ enumerable: true, get: function () { return file_js_1.createFile; } })); +Object.defineProperty(exports, "createFileFromStream", ({ enumerable: true, get: function () { return file_js_1.createFileFromStream; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 544: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.logger = void 0; +const logger_1 = __nccwpck_require__(6515); +exports.logger = (0, logger_1.createClientLogger)("core-rest-pipeline"); +//# sourceMappingURL=log.js.map + +/***/ }), + +/***/ 195: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getBodyLength = getBodyLength; +exports.createNodeHttpClient = createNodeHttpClient; +const tslib_1 = __nccwpck_require__(1860); +const http = tslib_1.__importStar(__nccwpck_require__(7067)); +const https = tslib_1.__importStar(__nccwpck_require__(4708)); +const zlib = tslib_1.__importStar(__nccwpck_require__(8522)); +const node_stream_1 = __nccwpck_require__(7075); +const abort_controller_1 = __nccwpck_require__(3287); +const httpHeaders_js_1 = __nccwpck_require__(192); +const restError_js_1 = __nccwpck_require__(8666); +const log_js_1 = __nccwpck_require__(544); +const DEFAULT_TLS_SETTINGS = {}; +function isReadableStream(body) { + return body && typeof body.pipe === "function"; +} +function isStreamComplete(stream) { + return new Promise((resolve) => { + const handler = () => { + resolve(); + stream.removeListener("close", handler); + stream.removeListener("end", handler); + stream.removeListener("error", handler); + }; + stream.on("close", handler); + stream.on("end", handler); + stream.on("error", handler); + }); +} +function isArrayBuffer(body) { + return body && typeof body.byteLength === "number"; +} +class ReportTransform extends node_stream_1.Transform { + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type + _transform(chunk, _encoding, callback) { + this.push(chunk); + this.loadedBytes += chunk.length; + try { + this.progressCallback({ loadedBytes: this.loadedBytes }); + callback(); + } + catch (e) { + callback(e); + } + } + constructor(progressCallback) { + super(); + this.loadedBytes = 0; + this.progressCallback = progressCallback; + } +} +/** + * A HttpClient implementation that uses Node's "https" module to send HTTPS requests. + * @internal + */ +class NodeHttpClient { + constructor() { + this.cachedHttpsAgents = new WeakMap(); + } + /** + * Makes a request over an underlying transport layer and returns the response. + * @param request - The request to be made. + */ + async sendRequest(request) { + var _a, _b, _c; + const abortController = new AbortController(); + let abortListener; + if (request.abortSignal) { + if (request.abortSignal.aborted) { + throw new abort_controller_1.AbortError("The operation was aborted."); + } + abortListener = (event) => { + if (event.type === "abort") { + abortController.abort(); + } + }; + request.abortSignal.addEventListener("abort", abortListener); + } + if (request.timeout > 0) { + setTimeout(() => { + abortController.abort(); + }, request.timeout); + } + const acceptEncoding = request.headers.get("Accept-Encoding"); + const shouldDecompress = (acceptEncoding === null || acceptEncoding === void 0 ? void 0 : acceptEncoding.includes("gzip")) || (acceptEncoding === null || acceptEncoding === void 0 ? void 0 : acceptEncoding.includes("deflate")); + let body = typeof request.body === "function" ? request.body() : request.body; + if (body && !request.headers.has("Content-Length")) { + const bodyLength = getBodyLength(body); + if (bodyLength !== null) { + request.headers.set("Content-Length", bodyLength); + } + } + let responseStream; + try { + if (body && request.onUploadProgress) { + const onUploadProgress = request.onUploadProgress; + const uploadReportStream = new ReportTransform(onUploadProgress); + uploadReportStream.on("error", (e) => { + log_js_1.logger.error("Error in upload progress", e); + }); + if (isReadableStream(body)) { + body.pipe(uploadReportStream); + } + else { + uploadReportStream.end(body); + } + body = uploadReportStream; + } + const res = await this.makeRequest(request, abortController, body); + const headers = getResponseHeaders(res); + const status = (_a = res.statusCode) !== null && _a !== void 0 ? _a : 0; + const response = { + status, + headers, + request, + }; + // Responses to HEAD must not have a body. + // If they do return a body, that body must be ignored. + if (request.method === "HEAD") { + // call resume() and not destroy() to avoid closing the socket + // and losing keep alive + res.resume(); + return response; + } + responseStream = shouldDecompress ? getDecodedResponseStream(res, headers) : res; + const onDownloadProgress = request.onDownloadProgress; + if (onDownloadProgress) { + const downloadReportStream = new ReportTransform(onDownloadProgress); + downloadReportStream.on("error", (e) => { + log_js_1.logger.error("Error in download progress", e); + }); + responseStream.pipe(downloadReportStream); + responseStream = downloadReportStream; + } + if ( + // Value of POSITIVE_INFINITY in streamResponseStatusCodes is considered as any status code + ((_b = request.streamResponseStatusCodes) === null || _b === void 0 ? void 0 : _b.has(Number.POSITIVE_INFINITY)) || + ((_c = request.streamResponseStatusCodes) === null || _c === void 0 ? void 0 : _c.has(response.status))) { + response.readableStreamBody = responseStream; + } + else { + response.bodyAsText = await streamToText(responseStream); + } + return response; + } + finally { + // clean up event listener + if (request.abortSignal && abortListener) { + let uploadStreamDone = Promise.resolve(); + if (isReadableStream(body)) { + uploadStreamDone = isStreamComplete(body); + } + let downloadStreamDone = Promise.resolve(); + if (isReadableStream(responseStream)) { + downloadStreamDone = isStreamComplete(responseStream); + } + Promise.all([uploadStreamDone, downloadStreamDone]) + .then(() => { + var _a; + // eslint-disable-next-line promise/always-return + if (abortListener) { + (_a = request.abortSignal) === null || _a === void 0 ? void 0 : _a.removeEventListener("abort", abortListener); + } + }) + .catch((e) => { + log_js_1.logger.warning("Error when cleaning up abortListener on httpRequest", e); + }); + } + } + } + makeRequest(request, abortController, body) { + var _a; + const url = new URL(request.url); + const isInsecure = url.protocol !== "https:"; + if (isInsecure && !request.allowInsecureConnection) { + throw new Error(`Cannot connect to ${request.url} while allowInsecureConnection is false.`); + } + const agent = (_a = request.agent) !== null && _a !== void 0 ? _a : this.getOrCreateAgent(request, isInsecure); + const options = { + agent, + hostname: url.hostname, + path: `${url.pathname}${url.search}`, + port: url.port, + method: request.method, + headers: request.headers.toJSON({ preserveCase: true }), + }; + return new Promise((resolve, reject) => { + const req = isInsecure ? http.request(options, resolve) : https.request(options, resolve); + req.once("error", (err) => { + var _a; + reject(new restError_js_1.RestError(err.message, { code: (_a = err.code) !== null && _a !== void 0 ? _a : restError_js_1.RestError.REQUEST_SEND_ERROR, request })); + }); + abortController.signal.addEventListener("abort", () => { + const abortError = new abort_controller_1.AbortError("The operation was aborted."); + req.destroy(abortError); + reject(abortError); + }); + if (body && isReadableStream(body)) { + body.pipe(req); + } + else if (body) { + if (typeof body === "string" || Buffer.isBuffer(body)) { + req.end(body); + } + else if (isArrayBuffer(body)) { + req.end(ArrayBuffer.isView(body) ? Buffer.from(body.buffer) : Buffer.from(body)); + } + else { + log_js_1.logger.error("Unrecognized body type", body); + reject(new restError_js_1.RestError("Unrecognized body type")); + } + } + else { + // streams don't like "undefined" being passed as data + req.end(); + } + }); + } + getOrCreateAgent(request, isInsecure) { + var _a; + const disableKeepAlive = request.disableKeepAlive; + // Handle Insecure requests first + if (isInsecure) { + if (disableKeepAlive) { + // keepAlive:false is the default so we don't need a custom Agent + return http.globalAgent; + } + if (!this.cachedHttpAgent) { + // If there is no cached agent create a new one and cache it. + this.cachedHttpAgent = new http.Agent({ keepAlive: true }); + } + return this.cachedHttpAgent; + } + else { + if (disableKeepAlive && !request.tlsSettings) { + // When there are no tlsSettings and keepAlive is false + // we don't need a custom agent + return https.globalAgent; + } + // We use the tlsSettings to index cached clients + const tlsSettings = (_a = request.tlsSettings) !== null && _a !== void 0 ? _a : DEFAULT_TLS_SETTINGS; + // Get the cached agent or create a new one with the + // provided values for keepAlive and tlsSettings + let agent = this.cachedHttpsAgents.get(tlsSettings); + if (agent && agent.options.keepAlive === !disableKeepAlive) { + return agent; + } + log_js_1.logger.info("No cached TLS Agent exist, creating a new Agent"); + agent = new https.Agent(Object.assign({ + // keepAlive is true if disableKeepAlive is false. + keepAlive: !disableKeepAlive }, tlsSettings)); + this.cachedHttpsAgents.set(tlsSettings, agent); + return agent; + } + } +} +function getResponseHeaders(res) { + const headers = (0, httpHeaders_js_1.createHttpHeaders)(); + for (const header of Object.keys(res.headers)) { + const value = res.headers[header]; + if (Array.isArray(value)) { + if (value.length > 0) { + headers.set(header, value[0]); + } + } + else if (value) { + headers.set(header, value); + } + } + return headers; +} +function getDecodedResponseStream(stream, headers) { + const contentEncoding = headers.get("Content-Encoding"); + if (contentEncoding === "gzip") { + const unzip = zlib.createGunzip(); + stream.pipe(unzip); + return unzip; + } + else if (contentEncoding === "deflate") { + const inflate = zlib.createInflate(); + stream.pipe(inflate); + return inflate; + } + return stream; +} +function streamToText(stream) { + return new Promise((resolve, reject) => { + const buffer = []; + stream.on("data", (chunk) => { + if (Buffer.isBuffer(chunk)) { + buffer.push(chunk); + } + else { + buffer.push(Buffer.from(chunk)); + } + }); + stream.on("end", () => { + resolve(Buffer.concat(buffer).toString("utf8")); + }); + stream.on("error", (e) => { + if (e && (e === null || e === void 0 ? void 0 : e.name) === "AbortError") { + reject(e); + } + else { + reject(new restError_js_1.RestError(`Error reading response as text: ${e.message}`, { + code: restError_js_1.RestError.PARSE_ERROR, + })); + } + }); + }); +} +/** @internal */ +function getBodyLength(body) { + if (!body) { + return 0; + } + else if (Buffer.isBuffer(body)) { + return body.length; + } + else if (isReadableStream(body)) { + return null; + } + else if (isArrayBuffer(body)) { + return body.byteLength; + } + else if (typeof body === "string") { + return Buffer.from(body).length; + } + else { + return null; + } +} +/** + * Create a new HttpClient instance for the NodeJS environment. + * @internal + */ +function createNodeHttpClient() { + return new NodeHttpClient(); +} +//# sourceMappingURL=nodeHttpClient.js.map + +/***/ }), + +/***/ 9590: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createEmptyPipeline = createEmptyPipeline; +const ValidPhaseNames = new Set(["Deserialize", "Serialize", "Retry", "Sign"]); +/** + * A private implementation of Pipeline. + * Do not export this class from the package. + * @internal + */ +class HttpPipeline { + constructor(policies) { + var _a; + this._policies = []; + this._policies = (_a = policies === null || policies === void 0 ? void 0 : policies.slice(0)) !== null && _a !== void 0 ? _a : []; + this._orderedPolicies = undefined; + } + addPolicy(policy, options = {}) { + if (options.phase && options.afterPhase) { + throw new Error("Policies inside a phase cannot specify afterPhase."); + } + if (options.phase && !ValidPhaseNames.has(options.phase)) { + throw new Error(`Invalid phase name: ${options.phase}`); + } + if (options.afterPhase && !ValidPhaseNames.has(options.afterPhase)) { + throw new Error(`Invalid afterPhase name: ${options.afterPhase}`); + } + this._policies.push({ + policy, + options, + }); + this._orderedPolicies = undefined; + } + removePolicy(options) { + const removedPolicies = []; + this._policies = this._policies.filter((policyDescriptor) => { + if ((options.name && policyDescriptor.policy.name === options.name) || + (options.phase && policyDescriptor.options.phase === options.phase)) { + removedPolicies.push(policyDescriptor.policy); + return false; + } + else { + return true; + } + }); + this._orderedPolicies = undefined; + return removedPolicies; + } + sendRequest(httpClient, request) { + const policies = this.getOrderedPolicies(); + const pipeline = policies.reduceRight((next, policy) => { + return (req) => { + return policy.sendRequest(req, next); + }; + }, (req) => httpClient.sendRequest(req)); + return pipeline(request); + } + getOrderedPolicies() { + if (!this._orderedPolicies) { + this._orderedPolicies = this.orderPolicies(); + } + return this._orderedPolicies; + } + clone() { + return new HttpPipeline(this._policies); + } + static create() { + return new HttpPipeline(); + } + orderPolicies() { + /** + * The goal of this method is to reliably order pipeline policies + * based on their declared requirements when they were added. + * + * Order is first determined by phase: + * + * 1. Serialize Phase + * 2. Policies not in a phase + * 3. Deserialize Phase + * 4. Retry Phase + * 5. Sign Phase + * + * Within each phase, policies are executed in the order + * they were added unless they were specified to execute + * before/after other policies or after a particular phase. + * + * To determine the final order, we will walk the policy list + * in phase order multiple times until all dependencies are + * satisfied. + * + * `afterPolicies` are the set of policies that must be + * executed before a given policy. This requirement is + * considered satisfied when each of the listed policies + * have been scheduled. + * + * `beforePolicies` are the set of policies that must be + * executed after a given policy. Since this dependency + * can be expressed by converting it into a equivalent + * `afterPolicies` declarations, they are normalized + * into that form for simplicity. + * + * An `afterPhase` dependency is considered satisfied when all + * policies in that phase have scheduled. + * + */ + const result = []; + // Track all policies we know about. + const policyMap = new Map(); + function createPhase(name) { + return { + name, + policies: new Set(), + hasRun: false, + hasAfterPolicies: false, + }; + } + // Track policies for each phase. + const serializePhase = createPhase("Serialize"); + const noPhase = createPhase("None"); + const deserializePhase = createPhase("Deserialize"); + const retryPhase = createPhase("Retry"); + const signPhase = createPhase("Sign"); + // a list of phases in order + const orderedPhases = [serializePhase, noPhase, deserializePhase, retryPhase, signPhase]; + // Small helper function to map phase name to each Phase + function getPhase(phase) { + if (phase === "Retry") { + return retryPhase; + } + else if (phase === "Serialize") { + return serializePhase; + } + else if (phase === "Deserialize") { + return deserializePhase; + } + else if (phase === "Sign") { + return signPhase; + } + else { + return noPhase; + } + } + // First walk each policy and create a node to track metadata. + for (const descriptor of this._policies) { + const policy = descriptor.policy; + const options = descriptor.options; + const policyName = policy.name; + if (policyMap.has(policyName)) { + throw new Error("Duplicate policy names not allowed in pipeline"); + } + const node = { + policy, + dependsOn: new Set(), + dependants: new Set(), + }; + if (options.afterPhase) { + node.afterPhase = getPhase(options.afterPhase); + node.afterPhase.hasAfterPolicies = true; + } + policyMap.set(policyName, node); + const phase = getPhase(options.phase); + phase.policies.add(node); + } + // Now that each policy has a node, connect dependency references. + for (const descriptor of this._policies) { + const { policy, options } = descriptor; + const policyName = policy.name; + const node = policyMap.get(policyName); + if (!node) { + throw new Error(`Missing node for policy ${policyName}`); + } + if (options.afterPolicies) { + for (const afterPolicyName of options.afterPolicies) { + const afterNode = policyMap.get(afterPolicyName); + if (afterNode) { + // Linking in both directions helps later + // when we want to notify dependants. + node.dependsOn.add(afterNode); + afterNode.dependants.add(node); + } + } + } + if (options.beforePolicies) { + for (const beforePolicyName of options.beforePolicies) { + const beforeNode = policyMap.get(beforePolicyName); + if (beforeNode) { + // To execute before another node, make it + // depend on the current node. + beforeNode.dependsOn.add(node); + node.dependants.add(beforeNode); + } + } + } + } + function walkPhase(phase) { + phase.hasRun = true; + // Sets iterate in insertion order + for (const node of phase.policies) { + if (node.afterPhase && (!node.afterPhase.hasRun || node.afterPhase.policies.size)) { + // If this node is waiting on a phase to complete, + // we need to skip it for now. + // Even if the phase is empty, we should wait for it + // to be walked to avoid re-ordering policies. + continue; + } + if (node.dependsOn.size === 0) { + // If there's nothing else we're waiting for, we can + // add this policy to the result list. + result.push(node.policy); + // Notify anything that depends on this policy that + // the policy has been scheduled. + for (const dependant of node.dependants) { + dependant.dependsOn.delete(node); + } + policyMap.delete(node.policy.name); + phase.policies.delete(node); + } + } + } + function walkPhases() { + for (const phase of orderedPhases) { + walkPhase(phase); + // if the phase isn't complete + if (phase.policies.size > 0 && phase !== noPhase) { + if (!noPhase.hasRun) { + // Try running noPhase to see if that unblocks this phase next tick. + // This can happen if a phase that happens before noPhase + // is waiting on a noPhase policy to complete. + walkPhase(noPhase); + } + // Don't proceed to the next phase until this phase finishes. + return; + } + if (phase.hasAfterPolicies) { + // Run any policies unblocked by this phase + walkPhase(noPhase); + } + } + } + // Iterate until we've put every node in the result list. + let iteration = 0; + while (policyMap.size > 0) { + iteration++; + const initialResultLength = result.length; + // Keep walking each phase in order until we can order every node. + walkPhases(); + // The result list *should* get at least one larger each time + // after the first full pass. + // Otherwise, we're going to loop forever. + if (result.length <= initialResultLength && iteration > 1) { + throw new Error("Cannot satisfy policy dependencies due to requirements cycle."); + } + } + return result; + } +} +/** + * Creates a totally empty pipeline. + * Useful for testing or creating a custom one. + */ +function createEmptyPipeline() { + return HttpPipeline.create(); +} +//# sourceMappingURL=pipeline.js.map + +/***/ }), + +/***/ 5709: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createPipelineRequest = createPipelineRequest; +const httpHeaders_js_1 = __nccwpck_require__(192); +const core_util_1 = __nccwpck_require__(7779); +class PipelineRequestImpl { + constructor(options) { + var _a, _b, _c, _d, _e, _f, _g; + this.url = options.url; + this.body = options.body; + this.headers = (_a = options.headers) !== null && _a !== void 0 ? _a : (0, httpHeaders_js_1.createHttpHeaders)(); + this.method = (_b = options.method) !== null && _b !== void 0 ? _b : "GET"; + this.timeout = (_c = options.timeout) !== null && _c !== void 0 ? _c : 0; + this.multipartBody = options.multipartBody; + this.formData = options.formData; + this.disableKeepAlive = (_d = options.disableKeepAlive) !== null && _d !== void 0 ? _d : false; + this.proxySettings = options.proxySettings; + this.streamResponseStatusCodes = options.streamResponseStatusCodes; + this.withCredentials = (_e = options.withCredentials) !== null && _e !== void 0 ? _e : false; + this.abortSignal = options.abortSignal; + this.tracingOptions = options.tracingOptions; + this.onUploadProgress = options.onUploadProgress; + this.onDownloadProgress = options.onDownloadProgress; + this.requestId = options.requestId || (0, core_util_1.randomUUID)(); + this.allowInsecureConnection = (_f = options.allowInsecureConnection) !== null && _f !== void 0 ? _f : false; + this.enableBrowserStreams = (_g = options.enableBrowserStreams) !== null && _g !== void 0 ? _g : false; + } +} +/** + * Creates a new pipeline request with the given options. + * This method is to allow for the easy setting of default values and not required. + * @param options - The options to create the request with. + */ +function createPipelineRequest(options) { + return new PipelineRequestImpl(options); +} +//# sourceMappingURL=pipelineRequest.js.map + +/***/ }), + +/***/ 2262: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.auxiliaryAuthenticationHeaderPolicyName = void 0; +exports.auxiliaryAuthenticationHeaderPolicy = auxiliaryAuthenticationHeaderPolicy; +const tokenCycler_js_1 = __nccwpck_require__(9202); +const log_js_1 = __nccwpck_require__(544); +/** + * The programmatic identifier of the auxiliaryAuthenticationHeaderPolicy. + */ +exports.auxiliaryAuthenticationHeaderPolicyName = "auxiliaryAuthenticationHeaderPolicy"; +const AUTHORIZATION_AUXILIARY_HEADER = "x-ms-authorization-auxiliary"; +async function sendAuthorizeRequest(options) { + var _a, _b; + const { scopes, getAccessToken, request } = options; + const getTokenOptions = { + abortSignal: request.abortSignal, + tracingOptions: request.tracingOptions, + }; + return (_b = (_a = (await getAccessToken(scopes, getTokenOptions))) === null || _a === void 0 ? void 0 : _a.token) !== null && _b !== void 0 ? _b : ""; +} +/** + * A policy for external tokens to `x-ms-authorization-auxiliary` header. + * This header will be used when creating a cross-tenant application we may need to handle authentication requests + * for resources that are in different tenants. + * You could see [ARM docs](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/authenticate-multi-tenant) for a rundown of how this feature works + */ +function auxiliaryAuthenticationHeaderPolicy(options) { + const { credentials, scopes } = options; + const logger = options.logger || log_js_1.logger; + const tokenCyclerMap = new WeakMap(); + return { + name: exports.auxiliaryAuthenticationHeaderPolicyName, + async sendRequest(request, next) { + if (!request.url.toLowerCase().startsWith("https://")) { + throw new Error("Bearer token authentication for auxiliary header is not permitted for non-TLS protected (non-https) URLs."); + } + if (!credentials || credentials.length === 0) { + logger.info(`${exports.auxiliaryAuthenticationHeaderPolicyName} header will not be set due to empty credentials.`); + return next(request); + } + const tokenPromises = []; + for (const credential of credentials) { + let getAccessToken = tokenCyclerMap.get(credential); + if (!getAccessToken) { + getAccessToken = (0, tokenCycler_js_1.createTokenCycler)(credential); + tokenCyclerMap.set(credential, getAccessToken); + } + tokenPromises.push(sendAuthorizeRequest({ + scopes: Array.isArray(scopes) ? scopes : [scopes], + request, + getAccessToken, + logger, + })); + } + const auxiliaryTokens = (await Promise.all(tokenPromises)).filter((token) => Boolean(token)); + if (auxiliaryTokens.length === 0) { + logger.warning(`None of the auxiliary tokens are valid. ${AUTHORIZATION_AUXILIARY_HEADER} header will not be set.`); + return next(request); + } + request.headers.set(AUTHORIZATION_AUXILIARY_HEADER, auxiliaryTokens.map((token) => `Bearer ${token}`).join(", ")); + return next(request); + }, + }; +} +//# sourceMappingURL=auxiliaryAuthenticationHeaderPolicy.js.map + +/***/ }), + +/***/ 6925: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.bearerTokenAuthenticationPolicyName = void 0; +exports.bearerTokenAuthenticationPolicy = bearerTokenAuthenticationPolicy; +const tokenCycler_js_1 = __nccwpck_require__(9202); +const log_js_1 = __nccwpck_require__(544); +/** + * The programmatic identifier of the bearerTokenAuthenticationPolicy. + */ +exports.bearerTokenAuthenticationPolicyName = "bearerTokenAuthenticationPolicy"; +/** + * Default authorize request handler + */ +async function defaultAuthorizeRequest(options) { + const { scopes, getAccessToken, request } = options; + const getTokenOptions = { + abortSignal: request.abortSignal, + tracingOptions: request.tracingOptions, + }; + const accessToken = await getAccessToken(scopes, getTokenOptions); + if (accessToken) { + options.request.headers.set("Authorization", `Bearer ${accessToken.token}`); + } +} +/** + * We will retrieve the challenge only if the response status code was 401, + * and if the response contained the header "WWW-Authenticate" with a non-empty value. + */ +function getChallenge(response) { + const challenge = response.headers.get("WWW-Authenticate"); + if (response.status === 401 && challenge) { + return challenge; + } + return; +} +/** + * A policy that can request a token from a TokenCredential implementation and + * then apply it to the Authorization header of a request as a Bearer token. + */ +function bearerTokenAuthenticationPolicy(options) { + var _a; + const { credential, scopes, challengeCallbacks } = options; + const logger = options.logger || log_js_1.logger; + const callbacks = Object.assign({ authorizeRequest: (_a = challengeCallbacks === null || challengeCallbacks === void 0 ? void 0 : challengeCallbacks.authorizeRequest) !== null && _a !== void 0 ? _a : defaultAuthorizeRequest, authorizeRequestOnChallenge: challengeCallbacks === null || challengeCallbacks === void 0 ? void 0 : challengeCallbacks.authorizeRequestOnChallenge }, challengeCallbacks); + // This function encapsulates the entire process of reliably retrieving the token + // The options are left out of the public API until there's demand to configure this. + // Remember to extend `BearerTokenAuthenticationPolicyOptions` with `TokenCyclerOptions` + // in order to pass through the `options` object. + const getAccessToken = credential + ? (0, tokenCycler_js_1.createTokenCycler)(credential /* , options */) + : () => Promise.resolve(null); + return { + name: exports.bearerTokenAuthenticationPolicyName, + /** + * If there's no challenge parameter: + * - It will try to retrieve the token using the cache, or the credential's getToken. + * - Then it will try the next policy with or without the retrieved token. + * + * It uses the challenge parameters to: + * - Skip a first attempt to get the token from the credential if there's no cached token, + * since it expects the token to be retrievable only after the challenge. + * - Prepare the outgoing request if the `prepareRequest` method has been provided. + * - Send an initial request to receive the challenge if it fails. + * - Process a challenge if the response contains it. + * - Retrieve a token with the challenge information, then re-send the request. + */ + async sendRequest(request, next) { + if (!request.url.toLowerCase().startsWith("https://")) { + throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs."); + } + await callbacks.authorizeRequest({ + scopes: Array.isArray(scopes) ? scopes : [scopes], + request, + getAccessToken, + logger, + }); + let response; + let error; + try { + response = await next(request); + } + catch (err) { + error = err; + response = err.response; + } + if (callbacks.authorizeRequestOnChallenge && + (response === null || response === void 0 ? void 0 : response.status) === 401 && + getChallenge(response)) { + // processes challenge + const shouldSendRequest = await callbacks.authorizeRequestOnChallenge({ + scopes: Array.isArray(scopes) ? scopes : [scopes], + request, + response, + getAccessToken, + logger, + }); + if (shouldSendRequest) { + return next(request); + } + } + if (error) { + throw error; + } + else { + return response; + } + }, + }; +} +//# sourceMappingURL=bearerTokenAuthenticationPolicy.js.map + +/***/ }), + +/***/ 9295: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.decompressResponsePolicyName = void 0; +exports.decompressResponsePolicy = decompressResponsePolicy; +/** + * The programmatic identifier of the decompressResponsePolicy. + */ +exports.decompressResponsePolicyName = "decompressResponsePolicy"; +/** + * A policy to enable response decompression according to Accept-Encoding header + * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding + */ +function decompressResponsePolicy() { + return { + name: exports.decompressResponsePolicyName, + async sendRequest(request, next) { + // HEAD requests have no body + if (request.method !== "HEAD") { + request.headers.set("Accept-Encoding", "gzip,deflate"); + } + return next(request); + }, + }; +} +//# sourceMappingURL=decompressResponsePolicy.js.map + +/***/ }), + +/***/ 8170: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.defaultRetryPolicyName = void 0; +exports.defaultRetryPolicy = defaultRetryPolicy; +const exponentialRetryStrategy_js_1 = __nccwpck_require__(2); +const throttlingRetryStrategy_js_1 = __nccwpck_require__(7084); +const retryPolicy_js_1 = __nccwpck_require__(6085); +const constants_js_1 = __nccwpck_require__(6427); +/** + * Name of the {@link defaultRetryPolicy} + */ +exports.defaultRetryPolicyName = "defaultRetryPolicy"; +/** + * A policy that retries according to three strategies: + * - When the server sends a 429 response with a Retry-After header. + * - When there are errors in the underlying transport layer (e.g. DNS lookup failures). + * - Or otherwise if the outgoing request fails, it will retry with an exponentially increasing delay. + */ +function defaultRetryPolicy(options = {}) { + var _a; + return { + name: exports.defaultRetryPolicyName, + sendRequest: (0, retryPolicy_js_1.retryPolicy)([(0, throttlingRetryStrategy_js_1.throttlingRetryStrategy)(), (0, exponentialRetryStrategy_js_1.exponentialRetryStrategy)(options)], { + maxRetries: (_a = options.maxRetries) !== null && _a !== void 0 ? _a : constants_js_1.DEFAULT_RETRY_POLICY_COUNT, + }).sendRequest, + }; +} +//# sourceMappingURL=defaultRetryPolicy.js.map + +/***/ }), + +/***/ 6708: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.exponentialRetryPolicyName = void 0; +exports.exponentialRetryPolicy = exponentialRetryPolicy; +const exponentialRetryStrategy_js_1 = __nccwpck_require__(2); +const retryPolicy_js_1 = __nccwpck_require__(6085); +const constants_js_1 = __nccwpck_require__(6427); +/** + * The programmatic identifier of the exponentialRetryPolicy. + */ +exports.exponentialRetryPolicyName = "exponentialRetryPolicy"; +/** + * A policy that attempts to retry requests while introducing an exponentially increasing delay. + * @param options - Options that configure retry logic. + */ +function exponentialRetryPolicy(options = {}) { + var _a; + return (0, retryPolicy_js_1.retryPolicy)([ + (0, exponentialRetryStrategy_js_1.exponentialRetryStrategy)(Object.assign(Object.assign({}, options), { ignoreSystemErrors: true })), + ], { + maxRetries: (_a = options.maxRetries) !== null && _a !== void 0 ? _a : constants_js_1.DEFAULT_RETRY_POLICY_COUNT, + }); +} +//# sourceMappingURL=exponentialRetryPolicy.js.map + +/***/ }), + +/***/ 5497: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.formDataPolicyName = void 0; +exports.formDataPolicy = formDataPolicy; +const core_util_1 = __nccwpck_require__(7779); +const httpHeaders_js_1 = __nccwpck_require__(192); +/** + * The programmatic identifier of the formDataPolicy. + */ +exports.formDataPolicyName = "formDataPolicy"; +function formDataToFormDataMap(formData) { + var _a; + const formDataMap = {}; + for (const [key, value] of formData.entries()) { + (_a = formDataMap[key]) !== null && _a !== void 0 ? _a : (formDataMap[key] = []); + formDataMap[key].push(value); + } + return formDataMap; +} +/** + * A policy that encodes FormData on the request into the body. + */ +function formDataPolicy() { + return { + name: exports.formDataPolicyName, + async sendRequest(request, next) { + if (core_util_1.isNodeLike && typeof FormData !== "undefined" && request.body instanceof FormData) { + request.formData = formDataToFormDataMap(request.body); + request.body = undefined; + } + if (request.formData) { + const contentType = request.headers.get("Content-Type"); + if (contentType && contentType.indexOf("application/x-www-form-urlencoded") !== -1) { + request.body = wwwFormUrlEncode(request.formData); + } + else { + await prepareFormData(request.formData, request); + } + request.formData = undefined; + } + return next(request); + }, + }; +} +function wwwFormUrlEncode(formData) { + const urlSearchParams = new URLSearchParams(); + for (const [key, value] of Object.entries(formData)) { + if (Array.isArray(value)) { + for (const subValue of value) { + urlSearchParams.append(key, subValue.toString()); + } + } + else { + urlSearchParams.append(key, value.toString()); + } + } + return urlSearchParams.toString(); +} +async function prepareFormData(formData, request) { + // validate content type (multipart/form-data) + const contentType = request.headers.get("Content-Type"); + if (contentType && !contentType.startsWith("multipart/form-data")) { + // content type is specified and is not multipart/form-data. Exit. + return; + } + request.headers.set("Content-Type", contentType !== null && contentType !== void 0 ? contentType : "multipart/form-data"); + // set body to MultipartRequestBody using content from FormDataMap + const parts = []; + for (const [fieldName, values] of Object.entries(formData)) { + for (const value of Array.isArray(values) ? values : [values]) { + if (typeof value === "string") { + parts.push({ + headers: (0, httpHeaders_js_1.createHttpHeaders)({ + "Content-Disposition": `form-data; name="${fieldName}"`, + }), + body: (0, core_util_1.stringToUint8Array)(value, "utf-8"), + }); + } + else if (value === undefined || value === null || typeof value !== "object") { + throw new Error(`Unexpected value for key ${fieldName}: ${value}. Value should be serialized to string first.`); + } + else { + // using || instead of ?? here since if value.name is empty we should create a file name + const fileName = value.name || "blob"; + const headers = (0, httpHeaders_js_1.createHttpHeaders)(); + headers.set("Content-Disposition", `form-data; name="${fieldName}"; filename="${fileName}"`); + // again, || is used since an empty value.type means the content type is unset + headers.set("Content-Type", value.type || "application/octet-stream"); + parts.push({ + headers, + body: value, + }); + } + } + } + request.multipartBody = { parts }; +} +//# sourceMappingURL=formDataPolicy.js.map + +/***/ }), + +/***/ 3253: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.logPolicyName = void 0; +exports.logPolicy = logPolicy; +const log_js_1 = __nccwpck_require__(544); +const sanitizer_js_1 = __nccwpck_require__(5204); +/** + * The programmatic identifier of the logPolicy. + */ +exports.logPolicyName = "logPolicy"; +/** + * A policy that logs all requests and responses. + * @param options - Options to configure logPolicy. + */ +function logPolicy(options = {}) { + var _a; + const logger = (_a = options.logger) !== null && _a !== void 0 ? _a : log_js_1.logger.info; + const sanitizer = new sanitizer_js_1.Sanitizer({ + additionalAllowedHeaderNames: options.additionalAllowedHeaderNames, + additionalAllowedQueryParameters: options.additionalAllowedQueryParameters, + }); + return { + name: exports.logPolicyName, + async sendRequest(request, next) { + if (!logger.enabled) { + return next(request); + } + logger(`Request: ${sanitizer.sanitize(request)}`); + const response = await next(request); + logger(`Response status code: ${response.status}`); + logger(`Headers: ${sanitizer.sanitize(response.headers)}`); + return response; + }, + }; +} +//# sourceMappingURL=logPolicy.js.map + +/***/ }), + +/***/ 5807: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.multipartPolicyName = void 0; +exports.multipartPolicy = multipartPolicy; +const core_util_1 = __nccwpck_require__(7779); +const concat_js_1 = __nccwpck_require__(2471); +const typeGuards_js_1 = __nccwpck_require__(2621); +function generateBoundary() { + return `----AzSDKFormBoundary${(0, core_util_1.randomUUID)()}`; +} +function encodeHeaders(headers) { + let result = ""; + for (const [key, value] of headers) { + result += `${key}: ${value}\r\n`; + } + return result; +} +function getLength(source) { + if (source instanceof Uint8Array) { + return source.byteLength; + } + else if ((0, typeGuards_js_1.isBlob)(source)) { + // if was created using createFile then -1 means we have an unknown size + return source.size === -1 ? undefined : source.size; + } + else { + return undefined; + } +} +function getTotalLength(sources) { + let total = 0; + for (const source of sources) { + const partLength = getLength(source); + if (partLength === undefined) { + return undefined; + } + else { + total += partLength; + } + } + return total; +} +async function buildRequestBody(request, parts, boundary) { + const sources = [ + (0, core_util_1.stringToUint8Array)(`--${boundary}`, "utf-8"), + ...parts.flatMap((part) => [ + (0, core_util_1.stringToUint8Array)("\r\n", "utf-8"), + (0, core_util_1.stringToUint8Array)(encodeHeaders(part.headers), "utf-8"), + (0, core_util_1.stringToUint8Array)("\r\n", "utf-8"), + part.body, + (0, core_util_1.stringToUint8Array)(`\r\n--${boundary}`, "utf-8"), + ]), + (0, core_util_1.stringToUint8Array)("--\r\n\r\n", "utf-8"), + ]; + const contentLength = getTotalLength(sources); + if (contentLength) { + request.headers.set("Content-Length", contentLength); + } + request.body = await (0, concat_js_1.concat)(sources); +} +/** + * Name of multipart policy + */ +exports.multipartPolicyName = "multipartPolicy"; +const maxBoundaryLength = 70; +const validBoundaryCharacters = new Set(`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'()+,-./:=?`); +function assertValidBoundary(boundary) { + if (boundary.length > maxBoundaryLength) { + throw new Error(`Multipart boundary "${boundary}" exceeds maximum length of 70 characters`); + } + if (Array.from(boundary).some((x) => !validBoundaryCharacters.has(x))) { + throw new Error(`Multipart boundary "${boundary}" contains invalid characters`); + } +} +/** + * Pipeline policy for multipart requests + */ +function multipartPolicy() { + return { + name: exports.multipartPolicyName, + async sendRequest(request, next) { + var _a; + if (!request.multipartBody) { + return next(request); + } + if (request.body) { + throw new Error("multipartBody and regular body cannot be set at the same time"); + } + let boundary = request.multipartBody.boundary; + const contentTypeHeader = (_a = request.headers.get("Content-Type")) !== null && _a !== void 0 ? _a : "multipart/mixed"; + const parsedHeader = contentTypeHeader.match(/^(multipart\/[^ ;]+)(?:; *boundary=(.+))?$/); + if (!parsedHeader) { + throw new Error(`Got multipart request body, but content-type header was not multipart: ${contentTypeHeader}`); + } + const [, contentType, parsedBoundary] = parsedHeader; + if (parsedBoundary && boundary && parsedBoundary !== boundary) { + throw new Error(`Multipart boundary was specified as ${parsedBoundary} in the header, but got ${boundary} in the request body`); + } + boundary !== null && boundary !== void 0 ? boundary : (boundary = parsedBoundary); + if (boundary) { + assertValidBoundary(boundary); + } + else { + boundary = generateBoundary(); + } + request.headers.set("Content-Type", `${contentType}; boundary=${boundary}`); + await buildRequestBody(request, request.multipartBody.parts, boundary); + request.multipartBody = undefined; + return next(request); + }, + }; +} +//# sourceMappingURL=multipartPolicy.js.map + +/***/ }), + +/***/ 6827: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ndJsonPolicyName = void 0; +exports.ndJsonPolicy = ndJsonPolicy; +/** + * The programmatic identifier of the ndJsonPolicy. + */ +exports.ndJsonPolicyName = "ndJsonPolicy"; +/** + * ndJsonPolicy is a policy used to control keep alive settings for every request. + */ +function ndJsonPolicy() { + return { + name: exports.ndJsonPolicyName, + async sendRequest(request, next) { + // There currently isn't a good way to bypass the serializer + if (typeof request.body === "string" && request.body.startsWith("[")) { + const body = JSON.parse(request.body); + if (Array.isArray(body)) { + request.body = body.map((item) => JSON.stringify(item) + "\n").join(""); + } + } + return next(request); + }, + }; +} +//# sourceMappingURL=ndJsonPolicy.js.map + +/***/ }), + +/***/ 2815: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.globalNoProxyList = exports.proxyPolicyName = void 0; +exports.loadNoProxy = loadNoProxy; +exports.getDefaultProxySettings = getDefaultProxySettings; +exports.proxyPolicy = proxyPolicy; +const https_proxy_agent_1 = __nccwpck_require__(3669); +const http_proxy_agent_1 = __nccwpck_require__(1970); +const log_js_1 = __nccwpck_require__(544); +const HTTPS_PROXY = "HTTPS_PROXY"; +const HTTP_PROXY = "HTTP_PROXY"; +const ALL_PROXY = "ALL_PROXY"; +const NO_PROXY = "NO_PROXY"; +/** + * The programmatic identifier of the proxyPolicy. + */ +exports.proxyPolicyName = "proxyPolicy"; +/** + * Stores the patterns specified in NO_PROXY environment variable. + * @internal + */ +exports.globalNoProxyList = []; +let noProxyListLoaded = false; +/** A cache of whether a host should bypass the proxy. */ +const globalBypassedMap = new Map(); +function getEnvironmentValue(name) { + if (process.env[name]) { + return process.env[name]; + } + else if (process.env[name.toLowerCase()]) { + return process.env[name.toLowerCase()]; + } + return undefined; +} +function loadEnvironmentProxyValue() { + if (!process) { + return undefined; + } + const httpsProxy = getEnvironmentValue(HTTPS_PROXY); + const allProxy = getEnvironmentValue(ALL_PROXY); + const httpProxy = getEnvironmentValue(HTTP_PROXY); + return httpsProxy || allProxy || httpProxy; +} +/** + * Check whether the host of a given `uri` matches any pattern in the no proxy list. + * If there's a match, any request sent to the same host shouldn'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, noProxyList, bypassedMap) { + if (noProxyList.length === 0) { + return false; + } + const host = new URL(uri).hostname; + if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) { + return bypassedMap.get(host); + } + let isBypassedFlag = false; + for (const pattern of noProxyList) { + 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; + } + } + } + bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag); + return isBypassedFlag; +} +function loadNoProxy() { + const noProxy = getEnvironmentValue(NO_PROXY); + noProxyListLoaded = true; + if (noProxy) { + return noProxy + .split(",") + .map((item) => item.trim()) + .filter((item) => item.length); + } + return []; +} +/** + * This method converts a proxy url into `ProxySettings` for use with ProxyPolicy. + * If no argument is given, it attempts to parse a proxy URL from the environment + * variables `HTTPS_PROXY` or `HTTP_PROXY`. + * @param proxyUrl - The url of the proxy to use. May contain authentication information. + * @deprecated - Internally this method is no longer necessary when setting proxy information. + */ +function getDefaultProxySettings(proxyUrl) { + if (!proxyUrl) { + proxyUrl = loadEnvironmentProxyValue(); + if (!proxyUrl) { + return undefined; + } + } + const parsedUrl = new URL(proxyUrl); + const schema = parsedUrl.protocol ? parsedUrl.protocol + "//" : ""; + return { + host: schema + parsedUrl.hostname, + port: Number.parseInt(parsedUrl.port || "80"), + username: parsedUrl.username, + password: parsedUrl.password, + }; +} +/** + * This method attempts to parse a proxy URL from the environment + * variables `HTTPS_PROXY` or `HTTP_PROXY`. + */ +function getDefaultProxySettingsInternal() { + const envProxy = loadEnvironmentProxyValue(); + return envProxy ? new URL(envProxy) : undefined; +} +function getUrlFromProxySettings(settings) { + let parsedProxyUrl; + try { + parsedProxyUrl = new URL(settings.host); + } + catch (_a) { + throw new Error(`Expecting a valid host string in proxy settings, but found "${settings.host}".`); + } + parsedProxyUrl.port = String(settings.port); + if (settings.username) { + parsedProxyUrl.username = settings.username; + } + if (settings.password) { + parsedProxyUrl.password = settings.password; + } + return parsedProxyUrl; +} +function setProxyAgentOnRequest(request, cachedAgents, proxyUrl) { + // Custom Agent should take precedence so if one is present + // we should skip to avoid overwriting it. + if (request.agent) { + return; + } + const url = new URL(request.url); + const isInsecure = url.protocol !== "https:"; + if (request.tlsSettings) { + log_js_1.logger.warning("TLS settings are not supported in combination with custom Proxy, certificates provided to the client will be ignored."); + } + const headers = request.headers.toJSON(); + if (isInsecure) { + if (!cachedAgents.httpProxyAgent) { + cachedAgents.httpProxyAgent = new http_proxy_agent_1.HttpProxyAgent(proxyUrl, { headers }); + } + request.agent = cachedAgents.httpProxyAgent; + } + else { + if (!cachedAgents.httpsProxyAgent) { + cachedAgents.httpsProxyAgent = new https_proxy_agent_1.HttpsProxyAgent(proxyUrl, { headers }); + } + request.agent = cachedAgents.httpsProxyAgent; + } +} +/** + * A policy that allows one to apply proxy settings to all requests. + * If not passed static settings, they will be retrieved from the HTTPS_PROXY + * or HTTP_PROXY environment variables. + * @param proxySettings - ProxySettings to use on each request. + * @param options - additional settings, for example, custom NO_PROXY patterns + */ +function proxyPolicy(proxySettings, options) { + if (!noProxyListLoaded) { + exports.globalNoProxyList.push(...loadNoProxy()); + } + const defaultProxy = proxySettings + ? getUrlFromProxySettings(proxySettings) + : getDefaultProxySettingsInternal(); + const cachedAgents = {}; + return { + name: exports.proxyPolicyName, + async sendRequest(request, next) { + var _a; + if (!request.proxySettings && + defaultProxy && + !isBypassed(request.url, (_a = options === null || options === void 0 ? void 0 : options.customNoProxyList) !== null && _a !== void 0 ? _a : exports.globalNoProxyList, (options === null || options === void 0 ? void 0 : options.customNoProxyList) ? undefined : globalBypassedMap)) { + setProxyAgentOnRequest(request, cachedAgents, defaultProxy); + } + else if (request.proxySettings) { + setProxyAgentOnRequest(request, cachedAgents, getUrlFromProxySettings(request.proxySettings)); + } + return next(request); + }, + }; +} +//# sourceMappingURL=proxyPolicy.js.map + +/***/ }), + +/***/ 4087: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.redirectPolicyName = void 0; +exports.redirectPolicy = redirectPolicy; +/** + * The programmatic identifier of the redirectPolicy. + */ +exports.redirectPolicyName = "redirectPolicy"; +/** + * Methods that are allowed to follow redirects 301 and 302 + */ +const allowedRedirect = ["GET", "HEAD"]; +/** + * A policy to follow Location headers from the server in order + * to support server-side redirection. + * In the browser, this policy is not used. + * @param options - Options to control policy behavior. + */ +function redirectPolicy(options = {}) { + const { maxRetries = 20 } = options; + return { + name: exports.redirectPolicyName, + async sendRequest(request, next) { + const response = await next(request); + return handleRedirect(next, response, maxRetries); + }, + }; +} +async function handleRedirect(next, response, maxRetries, currentRetries = 0) { + const { request, status, headers } = response; + const locationHeader = 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) && + currentRetries < maxRetries) { + const url = new URL(locationHeader, request.url); + request.url = url.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"; + request.headers.delete("Content-Length"); + delete request.body; + } + request.headers.delete("Authorization"); + const res = await next(request); + return handleRedirect(next, res, maxRetries, currentRetries + 1); + } + return response; +} +//# sourceMappingURL=redirectPolicy.js.map + +/***/ }), + +/***/ 6085: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.retryPolicy = retryPolicy; +const helpers_js_1 = __nccwpck_require__(3034); +const logger_1 = __nccwpck_require__(6515); +const abort_controller_1 = __nccwpck_require__(3287); +const constants_js_1 = __nccwpck_require__(6427); +const retryPolicyLogger = (0, logger_1.createClientLogger)("core-rest-pipeline retryPolicy"); +/** + * The programmatic identifier of the retryPolicy. + */ +const retryPolicyName = "retryPolicy"; +/** + * retryPolicy is a generic policy to enable retrying requests when certain conditions are met + */ +function retryPolicy(strategies, options = { maxRetries: constants_js_1.DEFAULT_RETRY_POLICY_COUNT }) { + const logger = options.logger || retryPolicyLogger; + return { + name: retryPolicyName, + async sendRequest(request, next) { + var _a, _b; + let response; + let responseError; + let retryCount = -1; + // eslint-disable-next-line no-constant-condition + retryRequest: while (true) { + retryCount += 1; + response = undefined; + responseError = undefined; + try { + logger.info(`Retry ${retryCount}: Attempting to send request`, request.requestId); + response = await next(request); + logger.info(`Retry ${retryCount}: Received a response from request`, request.requestId); + } + catch (e) { + logger.error(`Retry ${retryCount}: Received an error from request`, request.requestId); + // RestErrors are valid targets for the retry strategies. + // If none of the retry strategies can work with them, they will be thrown later in this policy. + // If the received error is not a RestError, it is immediately thrown. + responseError = e; + if (!e || responseError.name !== "RestError") { + throw e; + } + response = responseError.response; + } + if ((_a = request.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) { + logger.error(`Retry ${retryCount}: Request aborted.`); + const abortError = new abort_controller_1.AbortError(); + throw abortError; + } + if (retryCount >= ((_b = options.maxRetries) !== null && _b !== void 0 ? _b : constants_js_1.DEFAULT_RETRY_POLICY_COUNT)) { + logger.info(`Retry ${retryCount}: Maximum retries reached. Returning the last received response, or throwing the last received error.`); + if (responseError) { + throw responseError; + } + else if (response) { + return response; + } + else { + throw new Error("Maximum retries reached with no response or error to throw"); + } + } + logger.info(`Retry ${retryCount}: Processing ${strategies.length} retry strategies.`); + strategiesLoop: for (const strategy of strategies) { + const strategyLogger = strategy.logger || retryPolicyLogger; + strategyLogger.info(`Retry ${retryCount}: Processing retry strategy ${strategy.name}.`); + const modifiers = strategy.retry({ + retryCount, + response, + responseError, + }); + if (modifiers.skipStrategy) { + strategyLogger.info(`Retry ${retryCount}: Skipped.`); + continue strategiesLoop; + } + const { errorToThrow, retryAfterInMs, redirectTo } = modifiers; + if (errorToThrow) { + strategyLogger.error(`Retry ${retryCount}: Retry strategy ${strategy.name} throws error:`, errorToThrow); + throw errorToThrow; + } + if (retryAfterInMs || retryAfterInMs === 0) { + strategyLogger.info(`Retry ${retryCount}: Retry strategy ${strategy.name} retries after ${retryAfterInMs}`); + await (0, helpers_js_1.delay)(retryAfterInMs, undefined, { abortSignal: request.abortSignal }); + continue retryRequest; + } + if (redirectTo) { + strategyLogger.info(`Retry ${retryCount}: Retry strategy ${strategy.name} redirects to ${redirectTo}`); + request.url = redirectTo; + continue retryRequest; + } + } + if (responseError) { + logger.info(`None of the retry strategies could work with the received error. Throwing it.`); + throw responseError; + } + if (response) { + logger.info(`None of the retry strategies could work with the received response. Returning it.`); + return response; + } + // If all the retries skip and there's no response, + // we're still in the retry loop, so a new request will be sent + // until `maxRetries` is reached. + } + }, + }; +} +//# sourceMappingURL=retryPolicy.js.map + +/***/ }), + +/***/ 5686: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.setClientRequestIdPolicyName = void 0; +exports.setClientRequestIdPolicy = setClientRequestIdPolicy; +/** + * The programmatic identifier of the setClientRequestIdPolicy. + */ +exports.setClientRequestIdPolicyName = "setClientRequestIdPolicy"; +/** + * Each PipelineRequest gets a unique id upon creation. + * This policy passes that unique id along via an HTTP header to enable better + * telemetry and tracing. + * @param requestIdHeaderName - The name of the header to pass the request ID to. + */ +function setClientRequestIdPolicy(requestIdHeaderName = "x-ms-client-request-id") { + return { + name: exports.setClientRequestIdPolicyName, + async sendRequest(request, next) { + if (!request.headers.has(requestIdHeaderName)) { + request.headers.set(requestIdHeaderName, request.requestId); + } + return next(request); + }, + }; +} +//# sourceMappingURL=setClientRequestIdPolicy.js.map + +/***/ }), + +/***/ 6518: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.systemErrorRetryPolicyName = void 0; +exports.systemErrorRetryPolicy = systemErrorRetryPolicy; +const exponentialRetryStrategy_js_1 = __nccwpck_require__(2); +const retryPolicy_js_1 = __nccwpck_require__(6085); +const constants_js_1 = __nccwpck_require__(6427); +/** + * Name of the {@link systemErrorRetryPolicy} + */ +exports.systemErrorRetryPolicyName = "systemErrorRetryPolicy"; +/** + * A retry policy that specifically seeks to handle errors in the + * underlying transport layer (e.g. DNS lookup failures) rather than + * retryable error codes from the server itself. + * @param options - Options that customize the policy. + */ +function systemErrorRetryPolicy(options = {}) { + var _a; + return { + name: exports.systemErrorRetryPolicyName, + sendRequest: (0, retryPolicy_js_1.retryPolicy)([ + (0, exponentialRetryStrategy_js_1.exponentialRetryStrategy)(Object.assign(Object.assign({}, options), { ignoreHttpStatusCodes: true })), + ], { + maxRetries: (_a = options.maxRetries) !== null && _a !== void 0 ? _a : constants_js_1.DEFAULT_RETRY_POLICY_COUNT, + }).sendRequest, + }; +} +//# sourceMappingURL=systemErrorRetryPolicy.js.map + +/***/ }), + +/***/ 7540: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.throttlingRetryPolicyName = void 0; +exports.throttlingRetryPolicy = throttlingRetryPolicy; +const throttlingRetryStrategy_js_1 = __nccwpck_require__(7084); +const retryPolicy_js_1 = __nccwpck_require__(6085); +const constants_js_1 = __nccwpck_require__(6427); +/** + * Name of the {@link throttlingRetryPolicy} + */ +exports.throttlingRetryPolicyName = "throttlingRetryPolicy"; +/** + * A policy that retries when the server sends a 429 response with a Retry-After header. + * + * 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 + * + * @param options - Options that configure retry logic. + */ +function throttlingRetryPolicy(options = {}) { + var _a; + return { + name: exports.throttlingRetryPolicyName, + sendRequest: (0, retryPolicy_js_1.retryPolicy)([(0, throttlingRetryStrategy_js_1.throttlingRetryStrategy)()], { + maxRetries: (_a = options.maxRetries) !== null && _a !== void 0 ? _a : constants_js_1.DEFAULT_RETRY_POLICY_COUNT, + }).sendRequest, + }; +} +//# sourceMappingURL=throttlingRetryPolicy.js.map + +/***/ }), + +/***/ 5798: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.tlsPolicyName = void 0; +exports.tlsPolicy = tlsPolicy; +/** + * Name of the TLS Policy + */ +exports.tlsPolicyName = "tlsPolicy"; +/** + * Gets a pipeline policy that adds the client certificate to the HttpClient agent for authentication. + */ +function tlsPolicy(tlsSettings) { + return { + name: exports.tlsPolicyName, + sendRequest: async (req, next) => { + // Users may define a request tlsSettings, honor those over the client level one + if (!req.tlsSettings) { + req.tlsSettings = tlsSettings; + } + return next(req); + }, + }; +} +//# sourceMappingURL=tlsPolicy.js.map + +/***/ }), + +/***/ 3237: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.tracingPolicyName = void 0; +exports.tracingPolicy = tracingPolicy; +const core_tracing_1 = __nccwpck_require__(623); +const constants_js_1 = __nccwpck_require__(6427); +const userAgent_js_1 = __nccwpck_require__(8431); +const log_js_1 = __nccwpck_require__(544); +const core_util_1 = __nccwpck_require__(7779); +const restError_js_1 = __nccwpck_require__(8666); +const sanitizer_js_1 = __nccwpck_require__(5204); +/** + * The programmatic identifier of the tracingPolicy. + */ +exports.tracingPolicyName = "tracingPolicy"; +/** + * A simple policy to create OpenTelemetry Spans for each request made by the pipeline + * that has SpanOptions with a parent. + * Requests made without a parent Span will not be recorded. + * @param options - Options to configure the telemetry logged by the tracing policy. + */ +function tracingPolicy(options = {}) { + const userAgentPromise = (0, userAgent_js_1.getUserAgentValue)(options.userAgentPrefix); + const sanitizer = new sanitizer_js_1.Sanitizer({ + additionalAllowedQueryParameters: options.additionalAllowedQueryParameters, + }); + const tracingClient = tryCreateTracingClient(); + return { + name: exports.tracingPolicyName, + async sendRequest(request, next) { + var _a; + if (!tracingClient) { + return next(request); + } + const userAgent = await userAgentPromise; + const spanAttributes = { + "http.url": sanitizer.sanitizeUrl(request.url), + "http.method": request.method, + "http.user_agent": userAgent, + requestId: request.requestId, + }; + if (userAgent) { + spanAttributes["http.user_agent"] = userAgent; + } + const { span, tracingContext } = (_a = tryCreateSpan(tracingClient, request, spanAttributes)) !== null && _a !== void 0 ? _a : {}; + if (!span || !tracingContext) { + return next(request); + } + try { + const response = await tracingClient.withContext(tracingContext, next, request); + tryProcessResponse(span, response); + return response; + } + catch (err) { + tryProcessError(span, err); + throw err; + } + }, + }; +} +function tryCreateTracingClient() { + try { + return (0, core_tracing_1.createTracingClient)({ + namespace: "", + packageName: "@azure/core-rest-pipeline", + packageVersion: constants_js_1.SDK_VERSION, + }); + } + catch (e) { + log_js_1.logger.warning(`Error when creating the TracingClient: ${(0, core_util_1.getErrorMessage)(e)}`); + return undefined; + } +} +function tryCreateSpan(tracingClient, request, spanAttributes) { + try { + // As per spec, we do not need to differentiate between HTTP and HTTPS in span name. + const { span, updatedOptions } = tracingClient.startSpan(`HTTP ${request.method}`, { tracingOptions: request.tracingOptions }, { + spanKind: "client", + spanAttributes, + }); + // If the span is not recording, don't do any more work. + if (!span.isRecording()) { + span.end(); + return undefined; + } + // set headers + const headers = tracingClient.createRequestHeaders(updatedOptions.tracingOptions.tracingContext); + for (const [key, value] of Object.entries(headers)) { + request.headers.set(key, value); + } + return { span, tracingContext: updatedOptions.tracingOptions.tracingContext }; + } + catch (e) { + log_js_1.logger.warning(`Skipping creating a tracing span due to an error: ${(0, core_util_1.getErrorMessage)(e)}`); + return undefined; + } +} +function tryProcessError(span, error) { + try { + span.setStatus({ + status: "error", + error: (0, core_util_1.isError)(error) ? error : undefined, + }); + if ((0, restError_js_1.isRestError)(error) && error.statusCode) { + span.setAttribute("http.status_code", error.statusCode); + } + span.end(); + } + catch (e) { + log_js_1.logger.warning(`Skipping tracing span processing due to an error: ${(0, core_util_1.getErrorMessage)(e)}`); + } +} +function tryProcessResponse(span, response) { + try { + span.setAttribute("http.status_code", response.status); + const serviceRequestId = response.headers.get("x-ms-request-id"); + if (serviceRequestId) { + span.setAttribute("serviceRequestId", serviceRequestId); + } + span.setStatus({ + status: "success", + }); + span.end(); + } + catch (e) { + log_js_1.logger.warning(`Skipping tracing span processing due to an error: ${(0, core_util_1.getErrorMessage)(e)}`); + } +} +//# sourceMappingURL=tracingPolicy.js.map + +/***/ }), + +/***/ 2799: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.userAgentPolicyName = void 0; +exports.userAgentPolicy = userAgentPolicy; +const userAgent_js_1 = __nccwpck_require__(8431); +const UserAgentHeaderName = (0, userAgent_js_1.getUserAgentHeaderName)(); +/** + * The programmatic identifier of the userAgentPolicy. + */ +exports.userAgentPolicyName = "userAgentPolicy"; +/** + * A policy that sets the User-Agent header (or equivalent) to reflect + * the library version. + * @param options - Options to customize the user agent value. + */ +function userAgentPolicy(options = {}) { + const userAgentValue = (0, userAgent_js_1.getUserAgentValue)(options.userAgentPrefix); + return { + name: exports.userAgentPolicyName, + async sendRequest(request, next) { + if (!request.headers.has(UserAgentHeaderName)) { + request.headers.set(UserAgentHeaderName, await userAgentValue); + } + return next(request); + }, + }; +} +//# sourceMappingURL=userAgentPolicy.js.map + +/***/ }), + +/***/ 8666: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RestError = void 0; +exports.isRestError = isRestError; +const core_util_1 = __nccwpck_require__(7779); +const inspect_js_1 = __nccwpck_require__(995); +const sanitizer_js_1 = __nccwpck_require__(5204); +const errorSanitizer = new sanitizer_js_1.Sanitizer(); +/** + * A custom error type for failed pipeline requests. + */ +class RestError extends Error { + constructor(message, options = {}) { + super(message); + this.name = "RestError"; + this.code = options.code; + this.statusCode = options.statusCode; + // The request and response may contain sensitive information in the headers or body. + // To help prevent this sensitive information being accidentally logged, the request and response + // properties are marked as non-enumerable here. This prevents them showing up in the output of + // JSON.stringify and console.log. + Object.defineProperty(this, "request", { value: options.request, enumerable: false }); + Object.defineProperty(this, "response", { value: options.response, enumerable: false }); + Object.setPrototypeOf(this, RestError.prototype); + } + /** + * Logging method for util.inspect in Node + */ + [inspect_js_1.custom]() { + // Extract non-enumerable properties and add them back. This is OK since in this output the request and + // response get sanitized. + return `RestError: ${this.message} \n ${errorSanitizer.sanitize(Object.assign(Object.assign({}, this), { request: this.request, response: this.response }))}`; + } +} +exports.RestError = RestError; +/** + * Something went wrong when making the request. + * This means the actual request failed for some reason, + * such as a DNS issue or the connection being lost. + */ +RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR"; +/** + * This means that parsing the response from the server failed. + * It may have been malformed. + */ +RestError.PARSE_ERROR = "PARSE_ERROR"; +/** + * Typeguard for RestError + * @param e - Something caught by a catch clause. + */ +function isRestError(e) { + if (e instanceof RestError) { + return true; + } + return (0, core_util_1.isError)(e) && e.name === "RestError"; +} +//# sourceMappingURL=restError.js.map + +/***/ }), + +/***/ 2: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.exponentialRetryStrategy = exponentialRetryStrategy; +exports.isExponentialRetryResponse = isExponentialRetryResponse; +exports.isSystemError = isSystemError; +const core_util_1 = __nccwpck_require__(7779); +const throttlingRetryStrategy_js_1 = __nccwpck_require__(7084); +// intervals are in milliseconds +const DEFAULT_CLIENT_RETRY_INTERVAL = 1000; +const DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 64; +/** + * A retry strategy that retries with an exponentially increasing delay in these two cases: + * - When there are errors in the underlying transport layer (e.g. DNS lookup failures). + * - Or otherwise if the outgoing request fails (408, greater or equal than 500, except for 501 and 505). + */ +function exponentialRetryStrategy(options = {}) { + var _a, _b; + const retryInterval = (_a = options.retryDelayInMs) !== null && _a !== void 0 ? _a : DEFAULT_CLIENT_RETRY_INTERVAL; + const maxRetryInterval = (_b = options.maxRetryDelayInMs) !== null && _b !== void 0 ? _b : DEFAULT_CLIENT_MAX_RETRY_INTERVAL; + let retryAfterInMs = retryInterval; + return { + name: "exponentialRetryStrategy", + retry({ retryCount, response, responseError }) { + const matchedSystemError = isSystemError(responseError); + const ignoreSystemErrors = matchedSystemError && options.ignoreSystemErrors; + const isExponential = isExponentialRetryResponse(response); + const ignoreExponentialResponse = isExponential && options.ignoreHttpStatusCodes; + const unknownResponse = response && ((0, throttlingRetryStrategy_js_1.isThrottlingRetryResponse)(response) || !isExponential); + if (unknownResponse || ignoreExponentialResponse || ignoreSystemErrors) { + return { skipStrategy: true }; + } + if (responseError && !matchedSystemError && !isExponential) { + return { errorToThrow: responseError }; + } + // Exponentially increase the delay each time + const exponentialDelay = retryAfterInMs * Math.pow(2, retryCount); + // Don't let the delay exceed the maximum + const clampedExponentialDelay = Math.min(maxRetryInterval, exponentialDelay); + // Allow the final value to have some "jitter" (within 50% of the delay size) so + // that retries across multiple clients don't occur simultaneously. + retryAfterInMs = + clampedExponentialDelay / 2 + (0, core_util_1.getRandomIntegerInclusive)(0, clampedExponentialDelay / 2); + return { retryAfterInMs }; + }, + }; +} +/** + * A response is a retry response if it has status codes: + * - 408, or + * - Greater or equal than 500, except for 501 and 505. + */ +function isExponentialRetryResponse(response) { + return Boolean(response && + response.status !== undefined && + (response.status >= 500 || response.status === 408) && + response.status !== 501 && + response.status !== 505); +} +/** + * Determines whether an error from a pipeline response was triggered in the network layer. + */ +function isSystemError(err) { + if (!err) { + return false; + } + return (err.code === "ETIMEDOUT" || + err.code === "ESOCKETTIMEDOUT" || + err.code === "ECONNREFUSED" || + err.code === "ECONNRESET" || + err.code === "ENOENT" || + err.code === "ENOTFOUND"); +} +//# sourceMappingURL=exponentialRetryStrategy.js.map + +/***/ }), + +/***/ 7084: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isThrottlingRetryResponse = isThrottlingRetryResponse; +exports.throttlingRetryStrategy = throttlingRetryStrategy; +const helpers_js_1 = __nccwpck_require__(3034); +/** + * The header that comes back from Azure services representing + * the amount of time (minimum) to wait to retry (in seconds or timestamp after which we can retry). + */ +const RetryAfterHeader = "Retry-After"; +/** + * The headers that come back from Azure services representing + * the amount of time (minimum) to wait to retry. + * + * "retry-after-ms", "x-ms-retry-after-ms" : milliseconds + * "Retry-After" : seconds or timestamp + */ +const AllRetryAfterHeaders = ["retry-after-ms", "x-ms-retry-after-ms", RetryAfterHeader]; +/** + * A response is a throttling retry response if it has a throttling status code (429 or 503), + * as long as one of the [ "Retry-After" or "retry-after-ms" or "x-ms-retry-after-ms" ] headers has a valid value. + * + * Returns the `retryAfterInMs` value if the response is a throttling retry response. + * If not throttling retry response, returns `undefined`. + * + * @internal + */ +function getRetryAfterInMs(response) { + if (!(response && [429, 503].includes(response.status))) + return undefined; + try { + // Headers: "retry-after-ms", "x-ms-retry-after-ms", "Retry-After" + for (const header of AllRetryAfterHeaders) { + const retryAfterValue = (0, helpers_js_1.parseHeaderValueAsNumber)(response, header); + if (retryAfterValue === 0 || retryAfterValue) { + // "Retry-After" header ==> seconds + // "retry-after-ms", "x-ms-retry-after-ms" headers ==> milli-seconds + const multiplyingFactor = header === RetryAfterHeader ? 1000 : 1; + return retryAfterValue * multiplyingFactor; // in milli-seconds + } + } + // RetryAfterHeader ("Retry-After") has a special case where it might be formatted as a date instead of a number of seconds + const retryAfterHeader = response.headers.get(RetryAfterHeader); + if (!retryAfterHeader) + return; + const date = Date.parse(retryAfterHeader); + const diff = date - Date.now(); + // negative diff would mean a date in the past, so retry asap with 0 milliseconds + return Number.isFinite(diff) ? Math.max(0, diff) : undefined; + } + catch (_a) { + return undefined; + } +} +/** + * A response is a retry response if it has a throttling status code (429 or 503), + * as long as one of the [ "Retry-After" or "retry-after-ms" or "x-ms-retry-after-ms" ] headers has a valid value. + */ +function isThrottlingRetryResponse(response) { + return Number.isFinite(getRetryAfterInMs(response)); +} +function throttlingRetryStrategy() { + return { + name: "throttlingRetryStrategy", + retry({ response }) { + const retryAfterInMs = getRetryAfterInMs(response); + if (!Number.isFinite(retryAfterInMs)) { + return { skipStrategy: true }; + } + return { + retryAfterInMs, + }; + }, + }; +} +//# sourceMappingURL=throttlingRetryStrategy.js.map + +/***/ }), + +/***/ 2471: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.concat = concat; +const tslib_1 = __nccwpck_require__(1860); +const node_stream_1 = __nccwpck_require__(7075); +const typeGuards_js_1 = __nccwpck_require__(2621); +const file_js_1 = __nccwpck_require__(7073); +function streamAsyncIterator() { + return tslib_1.__asyncGenerator(this, arguments, function* streamAsyncIterator_1() { + const reader = this.getReader(); + try { + while (true) { + const { done, value } = yield tslib_1.__await(reader.read()); + if (done) { + return yield tslib_1.__await(void 0); + } + yield yield tslib_1.__await(value); + } + } + finally { + reader.releaseLock(); + } + }); +} +function makeAsyncIterable(webStream) { + if (!webStream[Symbol.asyncIterator]) { + webStream[Symbol.asyncIterator] = streamAsyncIterator.bind(webStream); + } + if (!webStream.values) { + webStream.values = streamAsyncIterator.bind(webStream); + } +} +function ensureNodeStream(stream) { + if (stream instanceof ReadableStream) { + makeAsyncIterable(stream); + return node_stream_1.Readable.fromWeb(stream); + } + else { + return stream; + } +} +function toStream(source) { + if (source instanceof Uint8Array) { + return node_stream_1.Readable.from(Buffer.from(source)); + } + else if ((0, typeGuards_js_1.isBlob)(source)) { + return toStream((0, file_js_1.getRawContent)(source)); + } + else { + return ensureNodeStream(source); + } +} +/** + * Utility function that concatenates a set of binary inputs into one combined output. + * + * @param sources - array of sources for the concatenation + * @returns - in Node, a (() =\> NodeJS.ReadableStream) which, when read, produces a concatenation of all the inputs. + * In browser, returns a `Blob` representing all the concatenated inputs. + * + * @internal + */ +async function concat(sources) { + return function () { + const streams = sources.map((x) => (typeof x === "function" ? x() : x)).map(toStream); + return node_stream_1.Readable.from((function () { + return tslib_1.__asyncGenerator(this, arguments, function* () { + var _a, e_1, _b, _c; + for (const stream of streams) { + try { + for (var _d = true, stream_1 = (e_1 = void 0, tslib_1.__asyncValues(stream)), stream_1_1; stream_1_1 = yield tslib_1.__await(stream_1.next()), _a = stream_1_1.done, !_a; _d = true) { + _c = stream_1_1.value; + _d = false; + const chunk = _c; + yield yield tslib_1.__await(chunk); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = stream_1.return)) yield tslib_1.__await(_b.call(stream_1)); + } + finally { if (e_1) throw e_1.error; } + } + } + }); + })()); + }; +} +//# sourceMappingURL=concat.js.map + +/***/ }), + +/***/ 7073: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getRawContent = getRawContent; +exports.createFileFromStream = createFileFromStream; +exports.createFile = createFile; +const core_util_1 = __nccwpck_require__(7779); +const typeGuards_js_1 = __nccwpck_require__(2621); +const unimplementedMethods = { + arrayBuffer: () => { + throw new Error("Not implemented"); + }, + slice: () => { + throw new Error("Not implemented"); + }, + text: () => { + throw new Error("Not implemented"); + }, +}; +/** + * Private symbol used as key on objects created using createFile containing the + * original source of the file object. + * + * This is used in Node to access the original Node stream without using Blob#stream, which + * returns a web stream. This is done to avoid a couple of bugs to do with Blob#stream and + * Readable#to/fromWeb in Node versions we support: + * - https://github.com/nodejs/node/issues/42694 (fixed in Node 18.14) + * - https://github.com/nodejs/node/issues/48916 (fixed in Node 20.6) + * + * Once these versions are no longer supported, we may be able to stop doing this. + * + * @internal + */ +const rawContent = Symbol("rawContent"); +function hasRawContent(x) { + return typeof x[rawContent] === "function"; +} +/** + * Extract the raw content from a given blob-like object. If the input was created using createFile + * or createFileFromStream, the exact content passed into createFile/createFileFromStream will be used. + * For true instances of Blob and File, returns the blob's content as a Web ReadableStream. + * + * @internal + */ +function getRawContent(blob) { + if (hasRawContent(blob)) { + return blob[rawContent](); + } + else { + return blob.stream(); + } +} +/** + * Create an object that implements the File interface. This object is intended to be + * passed into RequestBodyType.formData, and is not guaranteed to work as expected in + * other situations. + * + * Use this function to: + * - Create a File object for use in RequestBodyType.formData in environments where the + * global File object is unavailable. + * - Create a File-like object from a readable stream without reading the stream into memory. + * + * @param stream - the content of the file as a callback returning a stream. When a File object made using createFile is + * passed in a request's form data map, the stream will not be read into memory + * and instead will be streamed when the request is made. In the event of a retry, the + * stream needs to be read again, so this callback SHOULD return a fresh stream if possible. + * @param name - the name of the file. + * @param options - optional metadata about the file, e.g. file name, file size, MIME type. + */ +function createFileFromStream(stream, name, options = {}) { + var _a, _b, _c, _d; + return Object.assign(Object.assign({}, unimplementedMethods), { type: (_a = options.type) !== null && _a !== void 0 ? _a : "", lastModified: (_b = options.lastModified) !== null && _b !== void 0 ? _b : new Date().getTime(), webkitRelativePath: (_c = options.webkitRelativePath) !== null && _c !== void 0 ? _c : "", size: (_d = options.size) !== null && _d !== void 0 ? _d : -1, name, stream: () => { + const s = stream(); + if ((0, typeGuards_js_1.isNodeReadableStream)(s)) { + throw new Error("Not supported: a Node stream was provided as input to createFileFromStream."); + } + return s; + }, [rawContent]: stream }); +} +/** + * Create an object that implements the File interface. This object is intended to be + * passed into RequestBodyType.formData, and is not guaranteed to work as expected in + * other situations. + * + * Use this function create a File object for use in RequestBodyType.formData in environments where the global File object is unavailable. + * + * @param content - the content of the file as a Uint8Array in memory. + * @param name - the name of the file. + * @param options - optional metadata about the file, e.g. file name, file size, MIME type. + */ +function createFile(content, name, options = {}) { + var _a, _b, _c; + if (core_util_1.isNodeLike) { + return Object.assign(Object.assign({}, unimplementedMethods), { type: (_a = options.type) !== null && _a !== void 0 ? _a : "", lastModified: (_b = options.lastModified) !== null && _b !== void 0 ? _b : new Date().getTime(), webkitRelativePath: (_c = options.webkitRelativePath) !== null && _c !== void 0 ? _c : "", size: content.byteLength, name, arrayBuffer: async () => content.buffer, stream: () => new Blob([content]).stream(), [rawContent]: () => content }); + } + else { + return new File([content], name, options); + } +} +//# sourceMappingURL=file.js.map + +/***/ }), + +/***/ 3034: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.delay = delay; +exports.parseHeaderValueAsNumber = parseHeaderValueAsNumber; +const abort_controller_1 = __nccwpck_require__(3287); +const StandardAbortMessage = "The operation was aborted."; +/** + * A wrapper for setTimeout that resolves a promise after delayInMs milliseconds. + * @param delayInMs - The number of milliseconds to be delayed. + * @param value - The value to be resolved with after a timeout of t milliseconds. + * @param options - The options for delay - currently abort options + * - abortSignal - The abortSignal associated with containing operation. + * - abortErrorMsg - The abort error message associated with containing operation. + * @returns Resolved promise + */ +function delay(delayInMs, value, options) { + return new Promise((resolve, reject) => { + let timer = undefined; + let onAborted = undefined; + const rejectOnAbort = () => { + return reject(new abort_controller_1.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage)); + }; + const removeListeners = () => { + if ((options === null || options === void 0 ? void 0 : options.abortSignal) && onAborted) { + options.abortSignal.removeEventListener("abort", onAborted); + } + }; + onAborted = () => { + if (timer) { + clearTimeout(timer); + } + removeListeners(); + return rejectOnAbort(); + }; + if ((options === null || options === void 0 ? void 0 : options.abortSignal) && options.abortSignal.aborted) { + return rejectOnAbort(); + } + timer = setTimeout(() => { + removeListeners(); + resolve(value); + }, delayInMs); + if (options === null || options === void 0 ? void 0 : options.abortSignal) { + options.abortSignal.addEventListener("abort", onAborted); + } + }); +} +/** + * @internal + * @returns the parsed value or undefined if the parsed value is invalid. + */ +function parseHeaderValueAsNumber(response, headerName) { + const value = response.headers.get(headerName); + if (!value) + return; + const valueAsNum = Number(value); + if (Number.isNaN(valueAsNum)) + return; + return valueAsNum; +} +//# sourceMappingURL=helpers.js.map + +/***/ }), + +/***/ 995: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.custom = void 0; +const node_util_1 = __nccwpck_require__(7975); +exports.custom = node_util_1.inspect.custom; +//# sourceMappingURL=inspect.js.map + +/***/ }), + +/***/ 5204: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Sanitizer = void 0; +const core_util_1 = __nccwpck_require__(7779); +const RedactedString = "REDACTED"; +// Make sure this list is up-to-date with the one under core/logger/Readme#Keyconcepts +const 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", + "WWW-Authenticate", +]; +const defaultAllowedQueryParameters = ["api-version"]; +/** + * @internal + */ +class Sanitizer { + constructor({ additionalAllowedHeaderNames: allowedHeaderNames = [], additionalAllowedQueryParameters: allowedQueryParameters = [], } = {}) { + allowedHeaderNames = defaultAllowedHeaderNames.concat(allowedHeaderNames); + allowedQueryParameters = defaultAllowedQueryParameters.concat(allowedQueryParameters); + this.allowedHeaderNames = new Set(allowedHeaderNames.map((n) => n.toLowerCase())); + this.allowedQueryParameters = new Set(allowedQueryParameters.map((p) => p.toLowerCase())); + } + sanitize(obj) { + const seen = new Set(); + return JSON.stringify(obj, (key, value) => { + // Ensure Errors include their interesting non-enumerable members + if (value instanceof Error) { + return Object.assign(Object.assign({}, value), { name: value.name, message: value.message }); + } + if (key === "headers") { + 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) || (0, core_util_1.isObject)(value)) { + if (seen.has(value)) { + return "[Circular]"; + } + seen.add(value); + } + return value; + }, 2); + } + sanitizeUrl(value) { + if (typeof value !== "string" || value === null || value === "") { + return value; + } + const url = new URL(value); + if (!url.search) { + return value; + } + for (const [key] of url.searchParams) { + if (!this.allowedQueryParameters.has(key.toLowerCase())) { + url.searchParams.set(key, RedactedString); + } + } + return url.toString(); + } + sanitizeHeaders(obj) { + const sanitized = {}; + for (const key of Object.keys(obj)) { + if (this.allowedHeaderNames.has(key.toLowerCase())) { + sanitized[key] = obj[key]; + } + else { + sanitized[key] = RedactedString; + } + } + return sanitized; + } + sanitizeQuery(value) { + if (typeof value !== "object" || value === null) { + return value; + } + const sanitized = {}; + for (const k of Object.keys(value)) { + if (this.allowedQueryParameters.has(k.toLowerCase())) { + sanitized[k] = value[k]; + } + else { + sanitized[k] = RedactedString; + } + } + return sanitized; + } +} +exports.Sanitizer = Sanitizer; +//# sourceMappingURL=sanitizer.js.map + +/***/ }), + +/***/ 9202: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DEFAULT_CYCLER_OPTIONS = void 0; +exports.createTokenCycler = createTokenCycler; +const helpers_js_1 = __nccwpck_require__(3034); +// Default options for the cycler if none are provided +exports.DEFAULT_CYCLER_OPTIONS = { + forcedRefreshWindowInMs: 1000, // Force waiting for a refresh 1s before the token expires + retryIntervalInMs: 3000, // Allow refresh attempts every 3s + 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 refreshTimeout - 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. + */ +async function beginRefresh(getAccessToken, retryIntervalInMs, refreshTimeout) { + // This wrapper handles exceptions gracefully as long as we haven't exceeded + // the timeout. + async function tryGetAccessToken() { + if (Date.now() < refreshTimeout) { + try { + return await getAccessToken(); + } + catch (_a) { + return null; + } + } + else { + const finalToken = await getAccessToken(); + // Timeout is up, so throw if it's still null + if (finalToken === null) { + throw new Error("Failed to refresh access token."); + } + return finalToken; + } + } + let token = await tryGetAccessToken(); + while (token === null) { + await (0, helpers_js_1.delay)(retryIntervalInMs); + token = await tryGetAccessToken(); + } + 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 tokenCyclerOptions - optionally override default settings for the cycler + * + * @returns - a function that reliably produces a valid access token + */ +function createTokenCycler(credential, tokenCyclerOptions) { + let refreshWorker = null; + let token = null; + let tenantId; + const options = Object.assign(Object.assign({}, exports.DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions); + /** + * This little holder defines several predicates that we use to construct + * the rules of refreshing the token. + */ + const 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; + if (cycler.isRefreshing) { + return false; + } + if ((token === null || token === void 0 ? void 0 : token.refreshAfterTimestamp) && token.refreshAfterTimestamp < Date.now()) { + return true; + } + return ((_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(scopes, getTokenOptions) { + var _a; + if (!cycler.isRefreshing) { + // We bind `scopes` here to avoid passing it around a lot + const tryGetAccessToken = () => 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((_token) => { + refreshWorker = null; + token = _token; + tenantId = getTokenOptions.tenantId; + return token; + }) + .catch((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; + tenantId = undefined; + throw reason; + }); + } + return refreshWorker; + } + return async (scopes, tokenOptions) => { + // + // 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. + // + const hasClaimChallenge = Boolean(tokenOptions.claims); + const tenantIdChanged = tenantId !== tokenOptions.tenantId; + if (hasClaimChallenge) { + // If we've received a claim, we know the existing token isn't valid + // We want to clear it so that that refresh worker won't use the old expiration time as a timeout + token = null; + } + // If the tenantId passed in token options is different to the one we have + // Or if we are in claim challenge and the token was rejected and a new access token need to be issued, we need to + // refresh the token with the new tenantId or token. + const mustRefresh = tenantIdChanged || hasClaimChallenge || cycler.mustRefresh; + if (mustRefresh) { + return refresh(scopes, tokenOptions); + } + if (cycler.shouldRefresh) { + refresh(scopes, tokenOptions); + } + return token; + }; +} +//# sourceMappingURL=tokenCycler.js.map + +/***/ }), + +/***/ 2621: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isNodeReadableStream = isNodeReadableStream; +exports.isWebReadableStream = isWebReadableStream; +exports.isReadableStream = isReadableStream; +exports.isBlob = isBlob; +function isNodeReadableStream(x) { + return Boolean(x && typeof x["pipe"] === "function"); +} +function isWebReadableStream(x) { + return Boolean(x && + typeof x.getReader === "function" && + typeof x.tee === "function"); +} +function isReadableStream(x) { + return isNodeReadableStream(x) || isWebReadableStream(x); +} +function isBlob(x) { + return typeof x.stream === "function"; +} +//# sourceMappingURL=typeGuards.js.map + +/***/ }), + +/***/ 8431: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getUserAgentHeaderName = getUserAgentHeaderName; +exports.getUserAgentValue = getUserAgentValue; +const userAgentPlatform_js_1 = __nccwpck_require__(1848); +const constants_js_1 = __nccwpck_require__(6427); +function getUserAgentString(telemetryInfo) { + const parts = []; + for (const [key, value] of telemetryInfo) { + const token = value ? `${key}/${value}` : key; + parts.push(token); + } + return parts.join(" "); +} +/** + * @internal + */ +function getUserAgentHeaderName() { + return (0, userAgentPlatform_js_1.getHeaderName)(); +} +/** + * @internal + */ +async function getUserAgentValue(prefix) { + const runtimeInfo = new Map(); + runtimeInfo.set("core-rest-pipeline", constants_js_1.SDK_VERSION); + await (0, userAgentPlatform_js_1.setPlatformSpecificData)(runtimeInfo); + const defaultAgent = getUserAgentString(runtimeInfo); + const userAgentValue = prefix ? `${prefix} ${defaultAgent}` : defaultAgent; + return userAgentValue; +} +//# sourceMappingURL=userAgent.js.map + +/***/ }), + +/***/ 1848: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getHeaderName = getHeaderName; +exports.setPlatformSpecificData = setPlatformSpecificData; +const tslib_1 = __nccwpck_require__(1860); +const os = tslib_1.__importStar(__nccwpck_require__(8161)); +const process = tslib_1.__importStar(__nccwpck_require__(1708)); +/** + * @internal + */ +function getHeaderName() { + return "User-Agent"; +} +/** + * @internal + */ +async function setPlatformSpecificData(map) { + if (process && process.versions) { + const versions = process.versions; + if (versions.bun) { + map.set("Bun", versions.bun); + } + else if (versions.deno) { + map.set("Deno", versions.deno); + } + else if (versions.node) { + map.set("Node", versions.node); + } + } + map.set("OS", `(${os.arch()}-${os.type()}-${os.release()})`); +} +//# sourceMappingURL=userAgentPlatform.js.map + +/***/ }), + +/***/ 5455: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AbortError = void 0; +/** + * 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. + * } + * } + * ``` + */ +class AbortError extends Error { + constructor(message) { + super(message); + this.name = "AbortError"; + } +} +exports.AbortError = AbortError; +//# sourceMappingURL=AbortError.js.map + +/***/ }), + +/***/ 3287: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AbortError = void 0; +var AbortError_js_1 = __nccwpck_require__(5455); +Object.defineProperty(exports, "AbortError", ({ enumerable: true, get: function () { return AbortError_js_1.AbortError; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 623: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createTracingClient = exports.useInstrumenter = void 0; +var instrumenter_js_1 = __nccwpck_require__(8729); +Object.defineProperty(exports, "useInstrumenter", ({ enumerable: true, get: function () { return instrumenter_js_1.useInstrumenter; } })); +var tracingClient_js_1 = __nccwpck_require__(3438); +Object.defineProperty(exports, "createTracingClient", ({ enumerable: true, get: function () { return tracingClient_js_1.createTracingClient; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 8729: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getInstrumenter = exports.useInstrumenter = exports.createDefaultInstrumenter = exports.createDefaultTracingSpan = void 0; +const tracingContext_js_1 = __nccwpck_require__(9186); +const state_js_1 = __nccwpck_require__(8914); +function createDefaultTracingSpan() { + return { + end: () => { + // noop + }, + isRecording: () => false, + recordException: () => { + // noop + }, + setAttribute: () => { + // noop + }, + setStatus: () => { + // noop + }, + }; +} +exports.createDefaultTracingSpan = createDefaultTracingSpan; +function createDefaultInstrumenter() { + return { + createRequestHeaders: () => { + return {}; + }, + parseTraceparentHeader: () => { + return undefined; + }, + startSpan: (_name, spanOptions) => { + return { + span: createDefaultTracingSpan(), + tracingContext: (0, tracingContext_js_1.createTracingContext)({ parentContext: spanOptions.tracingContext }), + }; + }, + withContext(_context, callback, ...callbackArgs) { + return callback(...callbackArgs); + }, + }; +} +exports.createDefaultInstrumenter = createDefaultInstrumenter; +/** + * Extends the Azure SDK with support for a given instrumenter implementation. + * + * @param instrumenter - The instrumenter implementation to use. + */ +function useInstrumenter(instrumenter) { + state_js_1.state.instrumenterImplementation = instrumenter; +} +exports.useInstrumenter = useInstrumenter; +/** + * Gets the currently set instrumenter, a No-Op instrumenter by default. + * + * @returns The currently set instrumenter + */ +function getInstrumenter() { + if (!state_js_1.state.instrumenterImplementation) { + state_js_1.state.instrumenterImplementation = createDefaultInstrumenter(); + } + return state_js_1.state.instrumenterImplementation; +} +exports.getInstrumenter = getInstrumenter; +//# sourceMappingURL=instrumenter.js.map + +/***/ }), + +/***/ 8914: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.state = void 0; +/** + * @internal + * + * Holds the singleton instrumenter, to be shared across CJS and ESM imports. + */ +exports.state = { + instrumenterImplementation: undefined, +}; +//# sourceMappingURL=state-cjs.cjs.map + +/***/ }), + +/***/ 3438: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createTracingClient = void 0; +const instrumenter_js_1 = __nccwpck_require__(8729); +const tracingContext_js_1 = __nccwpck_require__(9186); +/** + * Creates a new tracing client. + * + * @param options - Options used to configure the tracing client. + * @returns - An instance of {@link TracingClient}. + */ +function createTracingClient(options) { + const { namespace, packageName, packageVersion } = options; + function startSpan(name, operationOptions, spanOptions) { + var _a; + const startSpanResult = (0, instrumenter_js_1.getInstrumenter)().startSpan(name, Object.assign(Object.assign({}, spanOptions), { packageName: packageName, packageVersion: packageVersion, tracingContext: (_a = operationOptions === null || operationOptions === void 0 ? void 0 : operationOptions.tracingOptions) === null || _a === void 0 ? void 0 : _a.tracingContext })); + let tracingContext = startSpanResult.tracingContext; + const span = startSpanResult.span; + if (!tracingContext.getValue(tracingContext_js_1.knownContextKeys.namespace)) { + tracingContext = tracingContext.setValue(tracingContext_js_1.knownContextKeys.namespace, namespace); + } + span.setAttribute("az.namespace", tracingContext.getValue(tracingContext_js_1.knownContextKeys.namespace)); + const updatedOptions = Object.assign({}, operationOptions, { + tracingOptions: Object.assign(Object.assign({}, operationOptions === null || operationOptions === void 0 ? void 0 : operationOptions.tracingOptions), { tracingContext }), + }); + return { + span, + updatedOptions, + }; + } + async function withSpan(name, operationOptions, callback, spanOptions) { + const { span, updatedOptions } = startSpan(name, operationOptions, spanOptions); + try { + const result = await withContext(updatedOptions.tracingOptions.tracingContext, () => Promise.resolve(callback(updatedOptions, span))); + span.setStatus({ status: "success" }); + return result; + } + catch (err) { + span.setStatus({ status: "error", error: err }); + throw err; + } + finally { + span.end(); + } + } + function withContext(context, callback, ...callbackArgs) { + return (0, instrumenter_js_1.getInstrumenter)().withContext(context, callback, ...callbackArgs); + } + /** + * Parses a traceparent header value into a span identifier. + * + * @param traceparentHeader - The traceparent header to parse. + * @returns An implementation-specific identifier for the span. + */ + function parseTraceparentHeader(traceparentHeader) { + return (0, instrumenter_js_1.getInstrumenter)().parseTraceparentHeader(traceparentHeader); + } + /** + * Creates a set of request headers to propagate tracing information to a backend. + * + * @param tracingContext - The context containing the span to serialize. + * @returns The set of headers to add to a request. + */ + function createRequestHeaders(tracingContext) { + return (0, instrumenter_js_1.getInstrumenter)().createRequestHeaders(tracingContext); + } + return { + startSpan, + withSpan, + withContext, + parseTraceparentHeader, + createRequestHeaders, + }; +} +exports.createTracingClient = createTracingClient; +//# sourceMappingURL=tracingClient.js.map + +/***/ }), + +/***/ 9186: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TracingContextImpl = exports.createTracingContext = exports.knownContextKeys = void 0; +/** @internal */ +exports.knownContextKeys = { + span: Symbol.for("@azure/core-tracing span"), + namespace: Symbol.for("@azure/core-tracing namespace"), +}; +/** + * Creates a new {@link TracingContext} with the given options. + * @param options - A set of known keys that may be set on the context. + * @returns A new {@link TracingContext} with the given options. + * + * @internal + */ +function createTracingContext(options = {}) { + let context = new TracingContextImpl(options.parentContext); + if (options.span) { + context = context.setValue(exports.knownContextKeys.span, options.span); + } + if (options.namespace) { + context = context.setValue(exports.knownContextKeys.namespace, options.namespace); + } + return context; +} +exports.createTracingContext = createTracingContext; +/** @internal */ +class TracingContextImpl { + constructor(initialContext) { + this._contextMap = + initialContext instanceof TracingContextImpl + ? new Map(initialContext._contextMap) + : new Map(); + } + setValue(key, value) { + const newContext = new TracingContextImpl(this); + newContext._contextMap.set(key, value); + return newContext; + } + getValue(key) { + return this._contextMap.get(key); + } + deleteValue(key) { + const newContext = new TracingContextImpl(this); + newContext._contextMap.delete(key); + return newContext; + } +} +exports.TracingContextImpl = TracingContextImpl; +//# sourceMappingURL=tracingContext.js.map + +/***/ }), + +/***/ 5209: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.cancelablePromiseRace = cancelablePromiseRace; +/** + * promise.race() wrapper that aborts rest of promises as soon as the first promise settles. + */ +async function cancelablePromiseRace(abortablePromiseBuilders, options) { + var _a, _b; + const aborter = new AbortController(); + function abortHandler() { + aborter.abort(); + } + (_a = options === null || options === void 0 ? void 0 : options.abortSignal) === null || _a === void 0 ? void 0 : _a.addEventListener("abort", abortHandler); + try { + return await Promise.race(abortablePromiseBuilders.map((p) => p({ abortSignal: aborter.signal }))); + } + finally { + aborter.abort(); + (_b = options === null || options === void 0 ? void 0 : options.abortSignal) === null || _b === void 0 ? void 0 : _b.removeEventListener("abort", abortHandler); + } +} +//# sourceMappingURL=aborterUtils.js.map + +/***/ }), + +/***/ 2741: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.uint8ArrayToString = uint8ArrayToString; +exports.stringToUint8Array = stringToUint8Array; +/** + * The helper that transforms bytes with specific character encoding into string + * @param bytes - the uint8array bytes + * @param format - the format we use to encode the byte + * @returns a string of the encoded string + */ +function uint8ArrayToString(bytes, format) { + return Buffer.from(bytes).toString(format); +} +/** + * The helper that transforms string to specific character encoded bytes array. + * @param value - the string to be converted + * @param format - the format we use to decode the value + * @returns a uint8array + */ +function stringToUint8Array(value, format) { + return Buffer.from(value, format); +} +//# sourceMappingURL=bytesEncoding.js.map + +/***/ }), + +/***/ 8162: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +var _a, _b, _c, _d; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isReactNative = exports.isNodeRuntime = exports.isNode = exports.isNodeLike = exports.isBun = exports.isDeno = exports.isWebWorker = exports.isBrowser = void 0; +/** + * A constant that indicates whether the environment the code is running is a Web Browser. + */ +// eslint-disable-next-line @azure/azure-sdk/ts-no-window +exports.isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined"; +/** + * A constant that indicates whether the environment the code is running is a Web Worker. + */ +exports.isWebWorker = typeof self === "object" && + typeof (self === null || self === void 0 ? void 0 : self.importScripts) === "function" && + (((_a = self.constructor) === null || _a === void 0 ? void 0 : _a.name) === "DedicatedWorkerGlobalScope" || + ((_b = self.constructor) === null || _b === void 0 ? void 0 : _b.name) === "ServiceWorkerGlobalScope" || + ((_c = self.constructor) === null || _c === void 0 ? void 0 : _c.name) === "SharedWorkerGlobalScope"); +/** + * A constant that indicates whether the environment the code is running is Deno. + */ +exports.isDeno = typeof Deno !== "undefined" && + typeof Deno.version !== "undefined" && + typeof Deno.version.deno !== "undefined"; +/** + * A constant that indicates whether the environment the code is running is Bun.sh. + */ +exports.isBun = typeof Bun !== "undefined" && typeof Bun.version !== "undefined"; +/** + * A constant that indicates whether the environment the code is running is a Node.js compatible environment. + */ +exports.isNodeLike = typeof globalThis.process !== "undefined" && + Boolean(globalThis.process.version) && + Boolean((_d = globalThis.process.versions) === null || _d === void 0 ? void 0 : _d.node); +/** + * A constant that indicates whether the environment the code is running is a Node.js compatible environment. + * @deprecated Use `isNodeLike` instead. + */ +exports.isNode = exports.isNodeLike; +/** + * A constant that indicates whether the environment the code is running is Node.JS. + */ +exports.isNodeRuntime = exports.isNodeLike && !exports.isBun && !exports.isDeno; +/** + * A constant that indicates whether the environment the code is running is in React-Native. + */ +// https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Core/setUpNavigator.js +exports.isReactNative = typeof navigator !== "undefined" && (navigator === null || navigator === void 0 ? void 0 : navigator.product) === "ReactNative"; +//# sourceMappingURL=checkEnvironment.js.map + +/***/ }), + +/***/ 3128: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createAbortablePromise = createAbortablePromise; +const abort_controller_1 = __nccwpck_require__(6492); +/** + * Creates an abortable promise. + * @param buildPromise - A function that takes the resolve and reject functions as parameters. + * @param options - The options for the abortable promise. + * @returns A promise that can be aborted. + */ +function createAbortablePromise(buildPromise, options) { + const { cleanupBeforeAbort, abortSignal, abortErrorMsg } = options !== null && options !== void 0 ? options : {}; + return new Promise((resolve, reject) => { + function rejectOnAbort() { + reject(new abort_controller_1.AbortError(abortErrorMsg !== null && abortErrorMsg !== void 0 ? abortErrorMsg : "The operation was aborted.")); + } + function removeListeners() { + abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener("abort", onAbort); + } + function onAbort() { + cleanupBeforeAbort === null || cleanupBeforeAbort === void 0 ? void 0 : cleanupBeforeAbort(); + removeListeners(); + rejectOnAbort(); + } + if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) { + return rejectOnAbort(); + } + try { + buildPromise((x) => { + removeListeners(); + resolve(x); + }, (x) => { + removeListeners(); + reject(x); + }); + } + catch (err) { + reject(err); + } + abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener("abort", onAbort); + }); +} +//# sourceMappingURL=createAbortablePromise.js.map + +/***/ }), + +/***/ 636: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.delay = delay; +exports.calculateRetryDelay = calculateRetryDelay; +const createAbortablePromise_js_1 = __nccwpck_require__(3128); +const random_js_1 = __nccwpck_require__(4196); +const StandardAbortMessage = "The delay was aborted."; +/** + * A wrapper for setTimeout that resolves a promise after timeInMs milliseconds. + * @param timeInMs - The number of milliseconds to be delayed. + * @param options - The options for delay - currently abort options + * @returns Promise that is resolved after timeInMs + */ +function delay(timeInMs, options) { + let token; + const { abortSignal, abortErrorMsg } = options !== null && options !== void 0 ? options : {}; + return (0, createAbortablePromise_js_1.createAbortablePromise)((resolve) => { + token = setTimeout(resolve, timeInMs); + }, { + cleanupBeforeAbort: () => clearTimeout(token), + abortSignal, + abortErrorMsg: abortErrorMsg !== null && abortErrorMsg !== void 0 ? abortErrorMsg : StandardAbortMessage, + }); +} +/** + * Calculates the delay interval for retry attempts using exponential delay with jitter. + * @param retryAttempt - The current retry attempt number. + * @param config - The exponential retry configuration. + * @returns An object containing the calculated retry delay. + */ +function calculateRetryDelay(retryAttempt, config) { + // Exponentially increase the delay each time + const exponentialDelay = config.retryDelayInMs * Math.pow(2, retryAttempt); + // Don't let the delay exceed the maximum + const clampedDelay = Math.min(config.maxRetryDelayInMs, exponentialDelay); + // Allow the final value to have some "jitter" (within 50% of the delay size) so + // that retries across multiple clients don't occur simultaneously. + const retryAfterInMs = clampedDelay / 2 + (0, random_js_1.getRandomIntegerInclusive)(0, clampedDelay / 2); + return { retryAfterInMs }; +} +//# sourceMappingURL=delay.js.map + +/***/ }), + +/***/ 9945: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isError = isError; +exports.getErrorMessage = getErrorMessage; +const object_js_1 = __nccwpck_require__(7756); +/** + * Typeguard for an error object shape (has name and message) + * @param e - Something caught by a catch clause. + */ +function isError(e) { + if ((0, object_js_1.isObject)(e)) { + const hasName = typeof e.name === "string"; + const hasMessage = typeof e.message === "string"; + return hasName && hasMessage; + } + return false; +} +/** + * Given what is thought to be an error object, return the message if possible. + * If the message is missing, returns a stringified version of the input. + * @param e - Something thrown from a try block + * @returns The error message or a string of the input + */ +function getErrorMessage(e) { + if (isError(e)) { + return e.message; + } + else { + let stringified; + try { + if (typeof e === "object" && e) { + stringified = JSON.stringify(e); + } + else { + stringified = String(e); + } + } + catch (err) { + stringified = "[unable to stringify input]"; + } + return `Unknown error ${stringified}`; + } +} +//# sourceMappingURL=error.js.map + +/***/ }), + +/***/ 7779: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.stringToUint8Array = exports.uint8ArrayToString = exports.isWebWorker = exports.isReactNative = exports.isDeno = exports.isNodeRuntime = exports.isNodeLike = exports.isNode = exports.isBun = exports.isBrowser = exports.randomUUID = exports.objectHasProperty = exports.isObjectWithProperties = exports.isDefined = exports.computeSha256Hmac = exports.computeSha256Hash = exports.getErrorMessage = exports.isError = exports.isObject = exports.getRandomIntegerInclusive = exports.createAbortablePromise = exports.cancelablePromiseRace = exports.calculateRetryDelay = exports.delay = void 0; +var delay_js_1 = __nccwpck_require__(636); +Object.defineProperty(exports, "delay", ({ enumerable: true, get: function () { return delay_js_1.delay; } })); +Object.defineProperty(exports, "calculateRetryDelay", ({ enumerable: true, get: function () { return delay_js_1.calculateRetryDelay; } })); +var aborterUtils_js_1 = __nccwpck_require__(5209); +Object.defineProperty(exports, "cancelablePromiseRace", ({ enumerable: true, get: function () { return aborterUtils_js_1.cancelablePromiseRace; } })); +var createAbortablePromise_js_1 = __nccwpck_require__(3128); +Object.defineProperty(exports, "createAbortablePromise", ({ enumerable: true, get: function () { return createAbortablePromise_js_1.createAbortablePromise; } })); +var random_js_1 = __nccwpck_require__(4196); +Object.defineProperty(exports, "getRandomIntegerInclusive", ({ enumerable: true, get: function () { return random_js_1.getRandomIntegerInclusive; } })); +var object_js_1 = __nccwpck_require__(7756); +Object.defineProperty(exports, "isObject", ({ enumerable: true, get: function () { return object_js_1.isObject; } })); +var error_js_1 = __nccwpck_require__(9945); +Object.defineProperty(exports, "isError", ({ enumerable: true, get: function () { return error_js_1.isError; } })); +Object.defineProperty(exports, "getErrorMessage", ({ enumerable: true, get: function () { return error_js_1.getErrorMessage; } })); +var sha256_js_1 = __nccwpck_require__(9732); +Object.defineProperty(exports, "computeSha256Hash", ({ enumerable: true, get: function () { return sha256_js_1.computeSha256Hash; } })); +Object.defineProperty(exports, "computeSha256Hmac", ({ enumerable: true, get: function () { return sha256_js_1.computeSha256Hmac; } })); +var typeGuards_js_1 = __nccwpck_require__(6277); +Object.defineProperty(exports, "isDefined", ({ enumerable: true, get: function () { return typeGuards_js_1.isDefined; } })); +Object.defineProperty(exports, "isObjectWithProperties", ({ enumerable: true, get: function () { return typeGuards_js_1.isObjectWithProperties; } })); +Object.defineProperty(exports, "objectHasProperty", ({ enumerable: true, get: function () { return typeGuards_js_1.objectHasProperty; } })); +var uuidUtils_js_1 = __nccwpck_require__(8795); +Object.defineProperty(exports, "randomUUID", ({ enumerable: true, get: function () { return uuidUtils_js_1.randomUUID; } })); +var checkEnvironment_js_1 = __nccwpck_require__(8162); +Object.defineProperty(exports, "isBrowser", ({ enumerable: true, get: function () { return checkEnvironment_js_1.isBrowser; } })); +Object.defineProperty(exports, "isBun", ({ enumerable: true, get: function () { return checkEnvironment_js_1.isBun; } })); +Object.defineProperty(exports, "isNode", ({ enumerable: true, get: function () { return checkEnvironment_js_1.isNode; } })); +Object.defineProperty(exports, "isNodeLike", ({ enumerable: true, get: function () { return checkEnvironment_js_1.isNodeLike; } })); +Object.defineProperty(exports, "isNodeRuntime", ({ enumerable: true, get: function () { return checkEnvironment_js_1.isNodeRuntime; } })); +Object.defineProperty(exports, "isDeno", ({ enumerable: true, get: function () { return checkEnvironment_js_1.isDeno; } })); +Object.defineProperty(exports, "isReactNative", ({ enumerable: true, get: function () { return checkEnvironment_js_1.isReactNative; } })); +Object.defineProperty(exports, "isWebWorker", ({ enumerable: true, get: function () { return checkEnvironment_js_1.isWebWorker; } })); +var bytesEncoding_js_1 = __nccwpck_require__(2741); +Object.defineProperty(exports, "uint8ArrayToString", ({ enumerable: true, get: function () { return bytesEncoding_js_1.uint8ArrayToString; } })); +Object.defineProperty(exports, "stringToUint8Array", ({ enumerable: true, get: function () { return bytesEncoding_js_1.stringToUint8Array; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 7756: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isObject = isObject; +/** + * Helper to determine when an input is a generic JS object. + * @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)); +} +//# sourceMappingURL=object.js.map + +/***/ }), + +/***/ 4196: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getRandomIntegerInclusive = getRandomIntegerInclusive; +/** + * Returns a random integer value between a lower and upper bound, + * inclusive of both bounds. + * Note that this uses Math.random and isn't secure. If you need to use + * this for any kind of security purpose, find a better source of random. + * @param min - The smallest integer value allowed. + * @param max - The largest integer value allowed. + */ +function getRandomIntegerInclusive(min, max) { + // Make sure inputs are integers. + min = Math.ceil(min); + max = Math.floor(max); + // Pick a random offset from zero to the size of the range. + // Since Math.random() can never return 1, we have to make the range one larger + // in order to be inclusive of the maximum value after we take the floor. + const offset = Math.floor(Math.random() * (max - min + 1)); + return offset + min; +} +//# sourceMappingURL=random.js.map + +/***/ }), + +/***/ 9732: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.computeSha256Hmac = computeSha256Hmac; +exports.computeSha256Hash = computeSha256Hash; +const crypto_1 = __nccwpck_require__(6982); +/** + * Generates a SHA-256 HMAC signature. + * @param key - The HMAC key represented as a base64 string, used to generate the cryptographic HMAC hash. + * @param stringToSign - The data to be signed. + * @param encoding - The textual encoding to use for the returned HMAC digest. + */ +async function computeSha256Hmac(key, stringToSign, encoding) { + const decodedKey = Buffer.from(key, "base64"); + return (0, crypto_1.createHmac)("sha256", decodedKey).update(stringToSign).digest(encoding); +} +/** + * Generates a SHA-256 hash. + * @param content - The data to be included in the hash. + * @param encoding - The textual encoding to use for the returned hash. + */ +async function computeSha256Hash(content, encoding) { + return (0, crypto_1.createHash)("sha256").update(content).digest(encoding); +} +//# sourceMappingURL=sha256.js.map + +/***/ }), + +/***/ 6277: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isDefined = isDefined; +exports.isObjectWithProperties = isObjectWithProperties; +exports.objectHasProperty = objectHasProperty; +/** + * Helper TypeGuard that checks if something is defined or not. + * @param thing - Anything + */ +function isDefined(thing) { + return typeof thing !== "undefined" && thing !== null; +} +/** + * Helper TypeGuard that checks if the input is an object with the specified properties. + * @param thing - Anything. + * @param properties - The name of the properties that should appear in the object. + */ +function isObjectWithProperties(thing, properties) { + if (!isDefined(thing) || typeof thing !== "object") { + return false; + } + for (const property of properties) { + if (!objectHasProperty(thing, property)) { + return false; + } + } + return true; +} +/** + * Helper TypeGuard that checks if the input is an object with the specified property. + * @param thing - Any object. + * @param property - The name of the property that should appear in the object. + */ +function objectHasProperty(thing, property) { + return (isDefined(thing) && typeof thing === "object" && property in thing); +} +//# sourceMappingURL=typeGuards.js.map + +/***/ }), + +/***/ 8795: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.randomUUID = randomUUID; +const crypto_1 = __nccwpck_require__(6982); +// NOTE: This is a workaround until we can use `globalThis.crypto.randomUUID` in Node.js 19+. +const uuidFunction = typeof ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto) === null || _a === void 0 ? void 0 : _a.randomUUID) === "function" + ? globalThis.crypto.randomUUID.bind(globalThis.crypto) + : crypto_1.randomUUID; +/** + * Generated Universally Unique Identifier + * + * @returns RFC4122 v4 UUID. + */ +function randomUUID() { + return uuidFunction(); +} +//# sourceMappingURL=uuidUtils.js.map + +/***/ }), + +/***/ 1658: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AbortError = void 0; +/** + * 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. + * } + * } + * ``` + */ +class AbortError extends Error { + constructor(message) { + super(message); + this.name = "AbortError"; + } +} +exports.AbortError = AbortError; +//# sourceMappingURL=AbortError.js.map + +/***/ }), + +/***/ 6492: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AbortError = void 0; +var AbortError_js_1 = __nccwpck_require__(1658); +Object.defineProperty(exports, "AbortError", ({ enumerable: true, get: function () { return AbortError_js_1.AbortError; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 760: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AbortError = void 0; +/** + * 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. + * } + * } + * ``` + */ +class AbortError extends Error { + constructor(message) { + super(message); + this.name = "AbortError"; + } +} +exports.AbortError = AbortError; +//# sourceMappingURL=AbortError.js.map + +/***/ }), + +/***/ 7934: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AbortError = void 0; +var AbortError_js_1 = __nccwpck_require__(760); +Object.defineProperty(exports, "AbortError", ({ enumerable: true, get: function () { return AbortError_js_1.AbortError; } })); +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 1676: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +const log_js_1 = __nccwpck_require__(6757); +const debugEnvVariable = (typeof process !== "undefined" && process.env && process.env.DEBUG) || undefined; +let enabledString; +let enabledNamespaces = []; +let skippedNamespaces = []; +const debuggers = []; +if (debugEnvVariable) { + enable(debugEnvVariable); +} +const debugObj = Object.assign((namespace) => { + return createDebugger(namespace); +}, { + enable, + enabled, + disable, + log: log_js_1.log, +}); +function enable(namespaces) { + enabledString = namespaces; + enabledNamespaces = []; + skippedNamespaces = []; + const wildcard = /\*/g; + const namespaceList = namespaces.split(",").map((ns) => ns.trim().replace(wildcard, ".*?")); + for (const ns of namespaceList) { + if (ns.startsWith("-")) { + skippedNamespaces.push(new RegExp(`^${ns.substr(1)}$`)); + } + else { + enabledNamespaces.push(new RegExp(`^${ns}$`)); + } + } + for (const instance of debuggers) { + instance.enabled = enabled(instance.namespace); + } +} +function enabled(namespace) { + if (namespace.endsWith("*")) { + return true; + } + for (const skipped of skippedNamespaces) { + if (skipped.test(namespace)) { + return false; + } + } + for (const enabledNamespace of enabledNamespaces) { + if (enabledNamespace.test(namespace)) { + return true; + } + } + return false; +} +function disable() { + const result = enabledString || ""; + enable(""); + return result; +} +function createDebugger(namespace) { + const newDebugger = Object.assign(debug, { + enabled: enabled(namespace), + destroy, + log: debugObj.log, + namespace, + extend, + }); + function debug(...args) { + if (!newDebugger.enabled) { + return; + } + if (args.length > 0) { + args[0] = `${namespace} ${args[0]}`; + } + newDebugger.log(...args); + } + debuggers.push(newDebugger); + return newDebugger; +} +function destroy() { + const index = debuggers.indexOf(this); + if (index >= 0) { + debuggers.splice(index, 1); + return true; + } + return false; +} +function extend(namespace) { + const newDebugger = createDebugger(`${this.namespace}:${namespace}`); + newDebugger.log = this.log; + return newDebugger; +} +exports["default"] = debugObj; +//# sourceMappingURL=debug.js.map + +/***/ }), + +/***/ 6515: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createClientLogger = exports.getLogLevel = exports.setLogLevel = exports.AzureLogger = void 0; +const tslib_1 = __nccwpck_require__(1860); +const debug_js_1 = tslib_1.__importDefault(__nccwpck_require__(1676)); +const registeredLoggers = new Set(); +const logLevelFromEnv = (typeof process !== "undefined" && process.env && process.env.AZURE_LOG_LEVEL) || undefined; +let 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. + */ +exports.AzureLogger = (0, debug_js_1.default)("azure"); +exports.AzureLogger.log = (...args) => { + debug_js_1.default.log(...args); +}; +const 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. If no level is specified, logging is disabled. + * @param level - The log level to enable for logging. + * Options from most verbose to least verbose are: + * - verbose + * - info + * - warning + * - error + */ +function setLogLevel(level) { + if (level && !isAzureLogLevel(level)) { + throw new Error(`Unknown log level '${level}'. Acceptable values: ${AZURE_LOG_LEVELS.join(",")}`); + } + azureLogLevel = level; + const enabledNamespaces = []; + for (const logger of registeredLoggers) { + if (shouldEnable(logger)) { + enabledNamespaces.push(logger.namespace); + } + } + debug_js_1.default.enable(enabledNamespaces.join(",")); +} +exports.setLogLevel = setLogLevel; +/** + * Retrieves the currently specified log level. + */ +function getLogLevel() { + return azureLogLevel; +} +exports.getLogLevel = getLogLevel; +const 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) { + const clientRootLogger = exports.AzureLogger.extend(namespace); + patchLogMethod(exports.AzureLogger, clientRootLogger); + return { + error: createLogger(clientRootLogger, "error"), + warning: createLogger(clientRootLogger, "warning"), + info: createLogger(clientRootLogger, "info"), + verbose: createLogger(clientRootLogger, "verbose"), + }; +} +exports.createClientLogger = createClientLogger; +function patchLogMethod(parent, child) { + child.log = (...args) => { + parent.log(...args); + }; +} +function createLogger(parent, level) { + const logger = Object.assign(parent.extend(level), { + level, + }); + patchLogMethod(parent, logger); + if (shouldEnable(logger)) { + const enabledNamespaces = debug_js_1.default.disable(); + debug_js_1.default.enable(enabledNamespaces + "," + logger.namespace); + } + registeredLoggers.add(logger); + return logger; +} +function shouldEnable(logger) { + return Boolean(azureLogLevel && levelMap[logger.level] <= levelMap[azureLogLevel]); +} +function isAzureLogLevel(logLevel) { + return AZURE_LOG_LEVELS.includes(logLevel); +} +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 6757: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.log = void 0; +const tslib_1 = __nccwpck_require__(1860); +const node_os_1 = __nccwpck_require__(8161); +const node_util_1 = tslib_1.__importDefault(__nccwpck_require__(7975)); +const process = tslib_1.__importStar(__nccwpck_require__(1708)); +function log(message, ...args) { + process.stderr.write(`${node_util_1.default.format(message, ...args)}${node_os_1.EOL}`); +} +exports.log = log; +//# sourceMappingURL=log.js.map + +/***/ }), + +/***/ 7182: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const WritableStream = (__nccwpck_require__(7075).Writable) +const inherits = (__nccwpck_require__(7975).inherits) + +const StreamSearch = __nccwpck_require__(4136) + +const PartStream = __nccwpck_require__(612) +const HeaderParser = __nccwpck_require__(2271) + +const DASH = 45 +const B_ONEDASH = Buffer.from('-') +const B_CRLF = Buffer.from('\r\n') +const EMPTY_FN = function () {} + +function Dicer (cfg) { + if (!(this instanceof Dicer)) { return new Dicer(cfg) } + WritableStream.call(this, cfg) + + if (!cfg || (!cfg.headerFirst && typeof cfg.boundary !== 'string')) { throw new TypeError('Boundary required') } + + if (typeof cfg.boundary === 'string') { this.setBoundary(cfg.boundary) } else { this._bparser = undefined } + + this._headerFirst = cfg.headerFirst + + this._dashes = 0 + this._parts = 0 + this._finished = false + this._realFinish = false + this._isPreamble = true + this._justMatched = false + this._firstWrite = true + this._inHeader = true + this._part = undefined + this._cb = undefined + this._ignoreData = false + this._partOpts = { highWaterMark: cfg.partHwm } + this._pause = false + + const self = this + this._hparser = new HeaderParser(cfg) + this._hparser.on('header', function (header) { + self._inHeader = false + self._part.emit('header', header) + }) +} +inherits(Dicer, WritableStream) + +Dicer.prototype.emit = function (ev) { + if (ev === 'finish' && !this._realFinish) { + if (!this._finished) { + const self = this + process.nextTick(function () { + self.emit('error', new Error('Unexpected end of multipart data')) + if (self._part && !self._ignoreData) { + const type = (self._isPreamble ? 'Preamble' : 'Part') + self._part.emit('error', new Error(type + ' terminated early due to unexpected end of multipart data')) + self._part.push(null) + process.nextTick(function () { + self._realFinish = true + self.emit('finish') + self._realFinish = false + }) + return + } + self._realFinish = true + self.emit('finish') + self._realFinish = false + }) + } + } else { WritableStream.prototype.emit.apply(this, arguments) } +} + +Dicer.prototype._write = function (data, encoding, cb) { + // ignore unexpected data (e.g. extra trailer data after finished) + if (!this._hparser && !this._bparser) { return cb() } + + if (this._headerFirst && this._isPreamble) { + if (!this._part) { + this._part = new PartStream(this._partOpts) + if (this.listenerCount('preamble') !== 0) { this.emit('preamble', this._part) } else { this._ignore() } + } + const r = this._hparser.push(data) + if (!this._inHeader && r !== undefined && r < data.length) { data = data.slice(r) } else { return cb() } + } + + // allows for "easier" testing + if (this._firstWrite) { + this._bparser.push(B_CRLF) + this._firstWrite = false + } + + this._bparser.push(data) + + if (this._pause) { this._cb = cb } else { cb() } +} + +Dicer.prototype.reset = function () { + this._part = undefined + this._bparser = undefined + this._hparser = undefined +} + +Dicer.prototype.setBoundary = function (boundary) { + const self = this + this._bparser = new StreamSearch('\r\n--' + boundary) + this._bparser.on('info', function (isMatch, data, start, end) { + self._oninfo(isMatch, data, start, end) + }) +} + +Dicer.prototype._ignore = function () { + if (this._part && !this._ignoreData) { + this._ignoreData = true + this._part.on('error', EMPTY_FN) + // we must perform some kind of read on the stream even though we are + // ignoring the data, otherwise node's Readable stream will not emit 'end' + // after pushing null to the stream + this._part.resume() + } +} + +Dicer.prototype._oninfo = function (isMatch, data, start, end) { + let buf; const self = this; let i = 0; let r; let shouldWriteMore = true + + if (!this._part && this._justMatched && data) { + while (this._dashes < 2 && (start + i) < end) { + if (data[start + i] === DASH) { + ++i + ++this._dashes + } else { + if (this._dashes) { buf = B_ONEDASH } + this._dashes = 0 + break + } + } + if (this._dashes === 2) { + if ((start + i) < end && this.listenerCount('trailer') !== 0) { this.emit('trailer', data.slice(start + i, end)) } + this.reset() + this._finished = true + // no more parts will be added + if (self._parts === 0) { + self._realFinish = true + self.emit('finish') + self._realFinish = false + } + } + if (this._dashes) { return } + } + if (this._justMatched) { this._justMatched = false } + if (!this._part) { + this._part = new PartStream(this._partOpts) + this._part._read = function (n) { + self._unpause() + } + if (this._isPreamble && this.listenerCount('preamble') !== 0) { + this.emit('preamble', this._part) + } else if (this._isPreamble !== true && this.listenerCount('part') !== 0) { + this.emit('part', this._part) + } else { + this._ignore() + } + if (!this._isPreamble) { this._inHeader = true } + } + if (data && start < end && !this._ignoreData) { + if (this._isPreamble || !this._inHeader) { + if (buf) { shouldWriteMore = this._part.push(buf) } + shouldWriteMore = this._part.push(data.slice(start, end)) + if (!shouldWriteMore) { this._pause = true } + } else if (!this._isPreamble && this._inHeader) { + if (buf) { this._hparser.push(buf) } + r = this._hparser.push(data.slice(start, end)) + if (!this._inHeader && r !== undefined && r < end) { this._oninfo(false, data, start + r, end) } + } + } + if (isMatch) { + this._hparser.reset() + if (this._isPreamble) { this._isPreamble = false } else { + if (start !== end) { + ++this._parts + this._part.on('end', function () { + if (--self._parts === 0) { + if (self._finished) { + self._realFinish = true + self.emit('finish') + self._realFinish = false + } else { + self._unpause() + } + } + }) + } + } + this._part.push(null) + this._part = undefined + this._ignoreData = false + this._justMatched = true + this._dashes = 0 + } +} + +Dicer.prototype._unpause = function () { + if (!this._pause) { return } + + this._pause = false + if (this._cb) { + const cb = this._cb + this._cb = undefined + cb() + } +} + +module.exports = Dicer + + +/***/ }), + +/***/ 2271: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const EventEmitter = (__nccwpck_require__(8474).EventEmitter) +const inherits = (__nccwpck_require__(7975).inherits) +const getLimit = __nccwpck_require__(2393) + +const StreamSearch = __nccwpck_require__(4136) + +const B_DCRLF = Buffer.from('\r\n\r\n') +const RE_CRLF = /\r\n/g +const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/ // eslint-disable-line no-control-regex + +function HeaderParser (cfg) { + EventEmitter.call(this) + + cfg = cfg || {} + const self = this + this.nread = 0 + this.maxed = false + this.npairs = 0 + this.maxHeaderPairs = getLimit(cfg, 'maxHeaderPairs', 2000) + this.maxHeaderSize = getLimit(cfg, 'maxHeaderSize', 80 * 1024) + this.buffer = '' + this.header = {} + this.finished = false + this.ss = new StreamSearch(B_DCRLF) + this.ss.on('info', function (isMatch, data, start, end) { + if (data && !self.maxed) { + if (self.nread + end - start >= self.maxHeaderSize) { + end = self.maxHeaderSize - self.nread + start + self.nread = self.maxHeaderSize + self.maxed = true + } else { self.nread += (end - start) } + + self.buffer += data.toString('binary', start, end) + } + if (isMatch) { self._finish() } + }) +} +inherits(HeaderParser, EventEmitter) + +HeaderParser.prototype.push = function (data) { + const r = this.ss.push(data) + if (this.finished) { return r } +} + +HeaderParser.prototype.reset = function () { + this.finished = false + this.buffer = '' + this.header = {} + this.ss.reset() +} + +HeaderParser.prototype._finish = function () { + if (this.buffer) { this._parseHeader() } + this.ss.matches = this.ss.maxMatches + const header = this.header + this.header = {} + this.buffer = '' + this.finished = true + this.nread = this.npairs = 0 + this.maxed = false + this.emit('header', header) +} + +HeaderParser.prototype._parseHeader = function () { + if (this.npairs === this.maxHeaderPairs) { return } + + const lines = this.buffer.split(RE_CRLF) + const len = lines.length + let m, h + + for (var i = 0; i < len; ++i) { // eslint-disable-line no-var + if (lines[i].length === 0) { continue } + if (lines[i][0] === '\t' || lines[i][0] === ' ') { + // folded header content + // RFC2822 says to just remove the CRLF and not the whitespace following + // it, so we follow the RFC and include the leading whitespace ... + if (h) { + this.header[h][this.header[h].length - 1] += lines[i] + continue + } + } + + const posColon = lines[i].indexOf(':') + if ( + posColon === -1 || + posColon === 0 + ) { + return + } + m = RE_HDR.exec(lines[i]) + h = m[1].toLowerCase() + this.header[h] = this.header[h] || [] + this.header[h].push((m[2] || '')) + if (++this.npairs === this.maxHeaderPairs) { break } + } +} + +module.exports = HeaderParser + + +/***/ }), + +/***/ 612: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const inherits = (__nccwpck_require__(7975).inherits) +const ReadableStream = (__nccwpck_require__(7075).Readable) + +function PartStream (opts) { + ReadableStream.call(this, opts) +} +inherits(PartStream, ReadableStream) + +PartStream.prototype._read = function (n) {} + +module.exports = PartStream + + +/***/ }), + +/***/ 4136: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +/** + * Copyright Brian White. All rights reserved. + * + * @see https://github.com/mscdex/streamsearch + * + * 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. + * + * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation + * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool + */ +const EventEmitter = (__nccwpck_require__(8474).EventEmitter) +const inherits = (__nccwpck_require__(7975).inherits) + +function SBMH (needle) { + if (typeof needle === 'string') { + needle = Buffer.from(needle) + } + + if (!Buffer.isBuffer(needle)) { + throw new TypeError('The needle has to be a String or a Buffer.') + } + + const needleLength = needle.length + + if (needleLength === 0) { + throw new Error('The needle cannot be an empty String/Buffer.') + } + + if (needleLength > 256) { + throw new Error('The needle cannot have a length bigger than 256.') + } + + this.maxMatches = Infinity + this.matches = 0 + + this._occ = new Array(256) + .fill(needleLength) // Initialize occurrence table. + this._lookbehind_size = 0 + this._needle = needle + this._bufpos = 0 + + this._lookbehind = Buffer.alloc(needleLength) + + // Populate occurrence table with analysis of the needle, + // ignoring last letter. + for (var i = 0; i < needleLength - 1; ++i) { // eslint-disable-line no-var + this._occ[needle[i]] = needleLength - 1 - i + } +} +inherits(SBMH, EventEmitter) + +SBMH.prototype.reset = function () { + this._lookbehind_size = 0 + this.matches = 0 + this._bufpos = 0 +} + +SBMH.prototype.push = function (chunk, pos) { + if (!Buffer.isBuffer(chunk)) { + chunk = Buffer.from(chunk, 'binary') + } + const chlen = chunk.length + this._bufpos = pos || 0 + let r + while (r !== chlen && this.matches < this.maxMatches) { r = this._sbmh_feed(chunk) } + return r +} + +SBMH.prototype._sbmh_feed = function (data) { + const len = data.length + const needle = this._needle + const needleLength = needle.length + const lastNeedleChar = needle[needleLength - 1] + + // Positive: points to a position in `data` + // pos == 3 points to data[3] + // Negative: points to a position in the lookbehind buffer + // pos == -2 points to lookbehind[lookbehind_size - 2] + let pos = -this._lookbehind_size + let ch + + if (pos < 0) { + // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool + // search with character lookup code that considers both the + // lookbehind buffer and the current round's haystack data. + // + // Loop until + // there is a match. + // or until + // we've moved past the position that requires the + // lookbehind buffer. In this case we switch to the + // optimized loop. + // or until + // the character to look at lies outside the haystack. + while (pos < 0 && pos <= len - needleLength) { + ch = this._sbmh_lookup_char(data, pos + needleLength - 1) + + if ( + ch === lastNeedleChar && + this._sbmh_memcmp(data, pos, needleLength - 1) + ) { + this._lookbehind_size = 0 + ++this.matches + this.emit('info', true) + + return (this._bufpos = pos + needleLength) + } + pos += this._occ[ch] + } + + // No match. + + if (pos < 0) { + // There's too few data for Boyer-Moore-Horspool to run, + // so let's use a different algorithm to skip as much as + // we can. + // Forward pos until + // the trailing part of lookbehind + data + // looks like the beginning of the needle + // or until + // pos == 0 + while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) { ++pos } + } + + if (pos >= 0) { + // Discard lookbehind buffer. + this.emit('info', false, this._lookbehind, 0, this._lookbehind_size) + this._lookbehind_size = 0 + } else { + // Cut off part of the lookbehind buffer that has + // been processed and append the entire haystack + // into it. + const bytesToCutOff = this._lookbehind_size + pos + if (bytesToCutOff > 0) { + // The cut off data is guaranteed not to contain the needle. + this.emit('info', false, this._lookbehind, 0, bytesToCutOff) + } + + this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, + this._lookbehind_size - bytesToCutOff) + this._lookbehind_size -= bytesToCutOff + + data.copy(this._lookbehind, this._lookbehind_size) + this._lookbehind_size += len + + this._bufpos = len + return len + } + } + + pos += (pos >= 0) * this._bufpos + + // Lookbehind buffer is now empty. We only need to check if the + // needle is in the haystack. + if (data.indexOf(needle, pos) !== -1) { + pos = data.indexOf(needle, pos) + ++this.matches + if (pos > 0) { this.emit('info', true, data, this._bufpos, pos) } else { this.emit('info', true) } + + return (this._bufpos = pos + needleLength) + } else { + pos = len - needleLength + } + + // There was no match. If there's trailing haystack data that we cannot + // match yet using the Boyer-Moore-Horspool algorithm (because the trailing + // data is less than the needle size) then match using a modified + // algorithm that starts matching from the beginning instead of the end. + // Whatever trailing data is left after running this algorithm is added to + // the lookbehind buffer. + while ( + pos < len && + ( + data[pos] !== needle[0] || + ( + (Buffer.compare( + data.subarray(pos, pos + len - pos), + needle.subarray(0, len - pos) + ) !== 0) + ) + ) + ) { + ++pos + } + if (pos < len) { + data.copy(this._lookbehind, 0, pos, pos + (len - pos)) + this._lookbehind_size = len - pos + } + + // Everything until pos is guaranteed not to contain needle data. + if (pos > 0) { this.emit('info', false, data, this._bufpos, pos < len ? pos : len) } + + this._bufpos = len + return len +} + +SBMH.prototype._sbmh_lookup_char = function (data, pos) { + return (pos < 0) + ? this._lookbehind[this._lookbehind_size + pos] + : data[pos] +} + +SBMH.prototype._sbmh_memcmp = function (data, pos, len) { + for (var i = 0; i < len; ++i) { // eslint-disable-line no-var + if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) { return false } + } + return true +} + +module.exports = SBMH + + +/***/ }), + +/***/ 9581: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const WritableStream = (__nccwpck_require__(7075).Writable) +const { inherits } = __nccwpck_require__(7975) +const Dicer = __nccwpck_require__(7182) + +const MultipartParser = __nccwpck_require__(1192) +const UrlencodedParser = __nccwpck_require__(855) +const parseParams = __nccwpck_require__(8929) + +function Busboy (opts) { + if (!(this instanceof Busboy)) { return new Busboy(opts) } + + if (typeof opts !== 'object') { + throw new TypeError('Busboy expected an options-Object.') + } + if (typeof opts.headers !== 'object') { + throw new TypeError('Busboy expected an options-Object with headers-attribute.') + } + if (typeof opts.headers['content-type'] !== 'string') { + throw new TypeError('Missing Content-Type-header.') + } + + const { + headers, + ...streamOptions + } = opts + + this.opts = { + autoDestroy: false, + ...streamOptions + } + WritableStream.call(this, this.opts) + + this._done = false + this._parser = this.getParserByHeaders(headers) + this._finished = false +} +inherits(Busboy, WritableStream) + +Busboy.prototype.emit = function (ev) { + if (ev === 'finish') { + if (!this._done) { + this._parser?.end() + return + } else if (this._finished) { + return + } + this._finished = true + } + WritableStream.prototype.emit.apply(this, arguments) +} + +Busboy.prototype.getParserByHeaders = function (headers) { + const parsed = parseParams(headers['content-type']) + + const cfg = { + defCharset: this.opts.defCharset, + fileHwm: this.opts.fileHwm, + headers, + highWaterMark: this.opts.highWaterMark, + isPartAFile: this.opts.isPartAFile, + limits: this.opts.limits, + parsedConType: parsed, + preservePath: this.opts.preservePath + } + + if (MultipartParser.detect.test(parsed[0])) { + return new MultipartParser(this, cfg) + } + if (UrlencodedParser.detect.test(parsed[0])) { + return new UrlencodedParser(this, cfg) + } + throw new Error('Unsupported Content-Type.') +} + +Busboy.prototype._write = function (chunk, encoding, cb) { + this._parser.write(chunk, cb) +} + +module.exports = Busboy +module.exports["default"] = Busboy +module.exports.Busboy = Busboy + +module.exports.Dicer = Dicer + + +/***/ }), + +/***/ 1192: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +// TODO: +// * support 1 nested multipart level +// (see second multipart example here: +// http://www.w3.org/TR/html401/interact/forms.html#didx-multipartform-data) +// * support limits.fieldNameSize +// -- this will require modifications to utils.parseParams + +const { Readable } = __nccwpck_require__(7075) +const { inherits } = __nccwpck_require__(7975) + +const Dicer = __nccwpck_require__(7182) + +const parseParams = __nccwpck_require__(8929) +const decodeText = __nccwpck_require__(2747) +const basename = __nccwpck_require__(692) +const getLimit = __nccwpck_require__(2393) + +const RE_BOUNDARY = /^boundary$/i +const RE_FIELD = /^form-data$/i +const RE_CHARSET = /^charset$/i +const RE_FILENAME = /^filename$/i +const RE_NAME = /^name$/i + +Multipart.detect = /^multipart\/form-data/i +function Multipart (boy, cfg) { + let i + let len + const self = this + let boundary + const limits = cfg.limits + const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => (contentType === 'application/octet-stream' || fileName !== undefined)) + const parsedConType = cfg.parsedConType || [] + const defCharset = cfg.defCharset || 'utf8' + const preservePath = cfg.preservePath + const fileOpts = { highWaterMark: cfg.fileHwm } + + for (i = 0, len = parsedConType.length; i < len; ++i) { + if (Array.isArray(parsedConType[i]) && + RE_BOUNDARY.test(parsedConType[i][0])) { + boundary = parsedConType[i][1] + break + } + } + + function checkFinished () { + if (nends === 0 && finished && !boy._done) { + finished = false + self.end() + } + } + + if (typeof boundary !== 'string') { throw new Error('Multipart: Boundary not found') } + + const fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) + const fileSizeLimit = getLimit(limits, 'fileSize', Infinity) + const filesLimit = getLimit(limits, 'files', Infinity) + const fieldsLimit = getLimit(limits, 'fields', Infinity) + const partsLimit = getLimit(limits, 'parts', Infinity) + const headerPairsLimit = getLimit(limits, 'headerPairs', 2000) + const headerSizeLimit = getLimit(limits, 'headerSize', 80 * 1024) + + let nfiles = 0 + let nfields = 0 + let nends = 0 + let curFile + let curField + let finished = false + + this._needDrain = false + this._pause = false + this._cb = undefined + this._nparts = 0 + this._boy = boy + + const parserCfg = { + boundary, + maxHeaderPairs: headerPairsLimit, + maxHeaderSize: headerSizeLimit, + partHwm: fileOpts.highWaterMark, + highWaterMark: cfg.highWaterMark + } + + this.parser = new Dicer(parserCfg) + this.parser.on('drain', function () { + self._needDrain = false + if (self._cb && !self._pause) { + const cb = self._cb + self._cb = undefined + cb() + } + }).on('part', function onPart (part) { + if (++self._nparts > partsLimit) { + self.parser.removeListener('part', onPart) + self.parser.on('part', skipPart) + boy.hitPartsLimit = true + boy.emit('partsLimit') + return skipPart(part) + } + + // hack because streams2 _always_ doesn't emit 'end' until nextTick, so let + // us emit 'end' early since we know the part has ended if we are already + // seeing the next part + if (curField) { + const field = curField + field.emit('end') + field.removeAllListeners('end') + } + + part.on('header', function (header) { + let contype + let fieldname + let parsed + let charset + let encoding + let filename + let nsize = 0 + + if (header['content-type']) { + parsed = parseParams(header['content-type'][0]) + if (parsed[0]) { + contype = parsed[0].toLowerCase() + for (i = 0, len = parsed.length; i < len; ++i) { + if (RE_CHARSET.test(parsed[i][0])) { + charset = parsed[i][1].toLowerCase() + break + } + } + } + } + + if (contype === undefined) { contype = 'text/plain' } + if (charset === undefined) { charset = defCharset } + + if (header['content-disposition']) { + parsed = parseParams(header['content-disposition'][0]) + if (!RE_FIELD.test(parsed[0])) { return skipPart(part) } + for (i = 0, len = parsed.length; i < len; ++i) { + if (RE_NAME.test(parsed[i][0])) { + fieldname = parsed[i][1] + } else if (RE_FILENAME.test(parsed[i][0])) { + filename = parsed[i][1] + if (!preservePath) { filename = basename(filename) } + } + } + } else { return skipPart(part) } + + if (header['content-transfer-encoding']) { encoding = header['content-transfer-encoding'][0].toLowerCase() } else { encoding = '7bit' } + + let onData, + onEnd + + if (isPartAFile(fieldname, contype, filename)) { + // file/binary field + if (nfiles === filesLimit) { + if (!boy.hitFilesLimit) { + boy.hitFilesLimit = true + boy.emit('filesLimit') + } + return skipPart(part) + } + + ++nfiles + + if (boy.listenerCount('file') === 0) { + self.parser._ignore() + return + } + + ++nends + const file = new FileStream(fileOpts) + curFile = file + file.on('end', function () { + --nends + self._pause = false + checkFinished() + if (self._cb && !self._needDrain) { + const cb = self._cb + self._cb = undefined + cb() + } + }) + file._read = function (n) { + if (!self._pause) { return } + self._pause = false + if (self._cb && !self._needDrain) { + const cb = self._cb + self._cb = undefined + cb() + } + } + boy.emit('file', fieldname, file, filename, encoding, contype) + + onData = function (data) { + if ((nsize += data.length) > fileSizeLimit) { + const extralen = fileSizeLimit - nsize + data.length + if (extralen > 0) { file.push(data.slice(0, extralen)) } + file.truncated = true + file.bytesRead = fileSizeLimit + part.removeAllListeners('data') + file.emit('limit') + return + } else if (!file.push(data)) { self._pause = true } + + file.bytesRead = nsize + } + + onEnd = function () { + curFile = undefined + file.push(null) + } + } else { + // non-file field + if (nfields === fieldsLimit) { + if (!boy.hitFieldsLimit) { + boy.hitFieldsLimit = true + boy.emit('fieldsLimit') + } + return skipPart(part) + } + + ++nfields + ++nends + let buffer = '' + let truncated = false + curField = part + + onData = function (data) { + if ((nsize += data.length) > fieldSizeLimit) { + const extralen = (fieldSizeLimit - (nsize - data.length)) + buffer += data.toString('binary', 0, extralen) + truncated = true + part.removeAllListeners('data') + } else { buffer += data.toString('binary') } + } + + onEnd = function () { + curField = undefined + if (buffer.length) { buffer = decodeText(buffer, 'binary', charset) } + boy.emit('field', fieldname, buffer, false, truncated, encoding, contype) + --nends + checkFinished() + } + } + + /* As of node@2efe4ab761666 (v0.10.29+/v0.11.14+), busboy had become + broken. Streams2/streams3 is a huge black box of confusion, but + somehow overriding the sync state seems to fix things again (and still + seems to work for previous node versions). + */ + part._readableState.sync = false + + part.on('data', onData) + part.on('end', onEnd) + }).on('error', function (err) { + if (curFile) { curFile.emit('error', err) } + }) + }).on('error', function (err) { + boy.emit('error', err) + }).on('finish', function () { + finished = true + checkFinished() + }) +} + +Multipart.prototype.write = function (chunk, cb) { + const r = this.parser.write(chunk) + if (r && !this._pause) { + cb() + } else { + this._needDrain = !r + this._cb = cb + } +} + +Multipart.prototype.end = function () { + const self = this + + if (self.parser.writable) { + self.parser.end() + } else if (!self._boy._done) { + process.nextTick(function () { + self._boy._done = true + self._boy.emit('finish') + }) + } +} + +function skipPart (part) { + part.resume() +} + +function FileStream (opts) { + Readable.call(this, opts) + + this.bytesRead = 0 + + this.truncated = false +} + +inherits(FileStream, Readable) + +FileStream.prototype._read = function (n) {} + +module.exports = Multipart + + +/***/ }), + +/***/ 855: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +const Decoder = __nccwpck_require__(1496) +const decodeText = __nccwpck_require__(2747) +const getLimit = __nccwpck_require__(2393) + +const RE_CHARSET = /^charset$/i + +UrlEncoded.detect = /^application\/x-www-form-urlencoded/i +function UrlEncoded (boy, cfg) { + const limits = cfg.limits + const parsedConType = cfg.parsedConType + this.boy = boy + + this.fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) + this.fieldNameSizeLimit = getLimit(limits, 'fieldNameSize', 100) + this.fieldsLimit = getLimit(limits, 'fields', Infinity) + + let charset + for (var i = 0, len = parsedConType.length; i < len; ++i) { // eslint-disable-line no-var + if (Array.isArray(parsedConType[i]) && + RE_CHARSET.test(parsedConType[i][0])) { + charset = parsedConType[i][1].toLowerCase() + break + } + } + + if (charset === undefined) { charset = cfg.defCharset || 'utf8' } + + this.decoder = new Decoder() + this.charset = charset + this._fields = 0 + this._state = 'key' + this._checkingBytes = true + this._bytesKey = 0 + this._bytesVal = 0 + this._key = '' + this._val = '' + this._keyTrunc = false + this._valTrunc = false + this._hitLimit = false +} + +UrlEncoded.prototype.write = function (data, cb) { + if (this._fields === this.fieldsLimit) { + if (!this.boy.hitFieldsLimit) { + this.boy.hitFieldsLimit = true + this.boy.emit('fieldsLimit') + } + return cb() + } + + let idxeq; let idxamp; let i; let p = 0; const len = data.length + + while (p < len) { + if (this._state === 'key') { + idxeq = idxamp = undefined + for (i = p; i < len; ++i) { + if (!this._checkingBytes) { ++p } + if (data[i] === 0x3D/* = */) { + idxeq = i + break + } else if (data[i] === 0x26/* & */) { + idxamp = i + break + } + if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) { + this._hitLimit = true + break + } else if (this._checkingBytes) { ++this._bytesKey } + } + + if (idxeq !== undefined) { + // key with assignment + if (idxeq > p) { this._key += this.decoder.write(data.toString('binary', p, idxeq)) } + this._state = 'val' + + this._hitLimit = false + this._checkingBytes = true + this._val = '' + this._bytesVal = 0 + this._valTrunc = false + this.decoder.reset() + + p = idxeq + 1 + } else if (idxamp !== undefined) { + // key with no assignment + ++this._fields + let key; const keyTrunc = this._keyTrunc + if (idxamp > p) { key = (this._key += this.decoder.write(data.toString('binary', p, idxamp))) } else { key = this._key } + + this._hitLimit = false + this._checkingBytes = true + this._key = '' + this._bytesKey = 0 + this._keyTrunc = false + this.decoder.reset() + + if (key.length) { + this.boy.emit('field', decodeText(key, 'binary', this.charset), + '', + keyTrunc, + false) + } + + p = idxamp + 1 + if (this._fields === this.fieldsLimit) { return cb() } + } else if (this._hitLimit) { + // we may not have hit the actual limit if there are encoded bytes... + if (i > p) { this._key += this.decoder.write(data.toString('binary', p, i)) } + p = i + if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) { + // yep, we actually did hit the limit + this._checkingBytes = false + this._keyTrunc = true + } + } else { + if (p < len) { this._key += this.decoder.write(data.toString('binary', p)) } + p = len + } + } else { + idxamp = undefined + for (i = p; i < len; ++i) { + if (!this._checkingBytes) { ++p } + if (data[i] === 0x26/* & */) { + idxamp = i + break + } + if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) { + this._hitLimit = true + break + } else if (this._checkingBytes) { ++this._bytesVal } + } + + if (idxamp !== undefined) { + ++this._fields + if (idxamp > p) { this._val += this.decoder.write(data.toString('binary', p, idxamp)) } + this.boy.emit('field', decodeText(this._key, 'binary', this.charset), + decodeText(this._val, 'binary', this.charset), + this._keyTrunc, + this._valTrunc) + this._state = 'key' + + this._hitLimit = false + this._checkingBytes = true + this._key = '' + this._bytesKey = 0 + this._keyTrunc = false + this.decoder.reset() + + p = idxamp + 1 + if (this._fields === this.fieldsLimit) { return cb() } + } else if (this._hitLimit) { + // we may not have hit the actual limit if there are encoded bytes... + if (i > p) { this._val += this.decoder.write(data.toString('binary', p, i)) } + p = i + if ((this._val === '' && this.fieldSizeLimit === 0) || + (this._bytesVal = this._val.length) === this.fieldSizeLimit) { + // yep, we actually did hit the limit + this._checkingBytes = false + this._valTrunc = true + } + } else { + if (p < len) { this._val += this.decoder.write(data.toString('binary', p)) } + p = len + } + } + } + cb() +} + +UrlEncoded.prototype.end = function () { + if (this.boy._done) { return } + + if (this._state === 'key' && this._key.length > 0) { + this.boy.emit('field', decodeText(this._key, 'binary', this.charset), + '', + this._keyTrunc, + false) + } else if (this._state === 'val') { + this.boy.emit('field', decodeText(this._key, 'binary', this.charset), + decodeText(this._val, 'binary', this.charset), + this._keyTrunc, + this._valTrunc) + } + this.boy._done = true + this.boy.emit('finish') +} + +module.exports = UrlEncoded + + +/***/ }), + +/***/ 1496: +/***/ ((module) => { + +"use strict"; + + +const RE_PLUS = /\+/g + +const HEX = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +] + +function Decoder () { + this.buffer = undefined +} +Decoder.prototype.write = function (str) { + // Replace '+' with ' ' before decoding + str = str.replace(RE_PLUS, ' ') + let res = '' + let i = 0; let p = 0; const len = str.length + for (; i < len; ++i) { + if (this.buffer !== undefined) { + if (!HEX[str.charCodeAt(i)]) { + res += '%' + this.buffer + this.buffer = undefined + --i // retry character + } else { + this.buffer += str[i] + ++p + if (this.buffer.length === 2) { + res += String.fromCharCode(parseInt(this.buffer, 16)) + this.buffer = undefined + } + } + } else if (str[i] === '%') { + if (i > p) { + res += str.substring(p, i) + p = i + } + this.buffer = '' + ++p + } + } + if (p < len && this.buffer === undefined) { res += str.substring(p) } + return res +} +Decoder.prototype.reset = function () { + this.buffer = undefined +} + +module.exports = Decoder + + +/***/ }), + +/***/ 692: +/***/ ((module) => { + +"use strict"; + + +module.exports = function basename (path) { + if (typeof path !== 'string') { return '' } + for (var i = path.length - 1; i >= 0; --i) { // eslint-disable-line no-var + switch (path.charCodeAt(i)) { + case 0x2F: // '/' + case 0x5C: // '\' + path = path.slice(i + 1) + return (path === '..' || path === '.' ? '' : path) + } + } + return (path === '..' || path === '.' ? '' : path) +} + + +/***/ }), + +/***/ 2747: +/***/ (function(module) { + +"use strict"; + + +// Node has always utf-8 +const utf8Decoder = new TextDecoder('utf-8') +const textDecoders = new Map([ + ['utf-8', utf8Decoder], + ['utf8', utf8Decoder] +]) + +function getDecoder (charset) { + let lc + while (true) { + switch (charset) { + case 'utf-8': + case 'utf8': + return decoders.utf8 + case 'latin1': + case 'ascii': // TODO: Make these a separate, strict decoder? + case 'us-ascii': + case 'iso-8859-1': + case 'iso8859-1': + case 'iso88591': + case 'iso_8859-1': + case 'windows-1252': + case 'iso_8859-1:1987': + case 'cp1252': + case 'x-cp1252': + return decoders.latin1 + case 'utf16le': + case 'utf-16le': + case 'ucs2': + case 'ucs-2': + return decoders.utf16le + case 'base64': + return decoders.base64 + default: + if (lc === undefined) { + lc = true + charset = charset.toLowerCase() + continue + } + return decoders.other.bind(charset) + } + } +} + +const decoders = { + utf8: (data, sourceEncoding) => { + if (data.length === 0) { + return '' + } + if (typeof data === 'string') { + data = Buffer.from(data, sourceEncoding) + } + return data.utf8Slice(0, data.length) + }, + + latin1: (data, sourceEncoding) => { + if (data.length === 0) { + return '' + } + if (typeof data === 'string') { + return data + } + return data.latin1Slice(0, data.length) + }, + + utf16le: (data, sourceEncoding) => { + if (data.length === 0) { + return '' + } + if (typeof data === 'string') { + data = Buffer.from(data, sourceEncoding) + } + return data.ucs2Slice(0, data.length) + }, + + base64: (data, sourceEncoding) => { + if (data.length === 0) { + return '' + } + if (typeof data === 'string') { + data = Buffer.from(data, sourceEncoding) + } + return data.base64Slice(0, data.length) + }, + + other: (data, sourceEncoding) => { + if (data.length === 0) { + return '' + } + if (typeof data === 'string') { + data = Buffer.from(data, sourceEncoding) + } + + if (textDecoders.has(this.toString())) { + try { + return textDecoders.get(this).decode(data) + } catch {} + } + return typeof data === 'string' + ? data + : data.toString() + } +} + +function decodeText (text, sourceEncoding, destEncoding) { + if (text) { + return getDecoder(destEncoding)(text, sourceEncoding) + } + return text +} + +module.exports = decodeText + + +/***/ }), + +/***/ 2393: +/***/ ((module) => { + +"use strict"; + + +module.exports = function getLimit (limits, name, defaultLimit) { + if ( + !limits || + limits[name] === undefined || + limits[name] === null + ) { return defaultLimit } + + if ( + typeof limits[name] !== 'number' || + isNaN(limits[name]) + ) { throw new TypeError('Limit ' + name + ' is not a valid number') } + + return limits[name] +} + + +/***/ }), + +/***/ 8929: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +/* eslint-disable object-property-newline */ + + +const decodeText = __nccwpck_require__(2747) + +const RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g + +const EncodedLookup = { + '%00': '\x00', '%01': '\x01', '%02': '\x02', '%03': '\x03', '%04': '\x04', + '%05': '\x05', '%06': '\x06', '%07': '\x07', '%08': '\x08', '%09': '\x09', + '%0a': '\x0a', '%0A': '\x0a', '%0b': '\x0b', '%0B': '\x0b', '%0c': '\x0c', + '%0C': '\x0c', '%0d': '\x0d', '%0D': '\x0d', '%0e': '\x0e', '%0E': '\x0e', + '%0f': '\x0f', '%0F': '\x0f', '%10': '\x10', '%11': '\x11', '%12': '\x12', + '%13': '\x13', '%14': '\x14', '%15': '\x15', '%16': '\x16', '%17': '\x17', + '%18': '\x18', '%19': '\x19', '%1a': '\x1a', '%1A': '\x1a', '%1b': '\x1b', + '%1B': '\x1b', '%1c': '\x1c', '%1C': '\x1c', '%1d': '\x1d', '%1D': '\x1d', + '%1e': '\x1e', '%1E': '\x1e', '%1f': '\x1f', '%1F': '\x1f', '%20': '\x20', + '%21': '\x21', '%22': '\x22', '%23': '\x23', '%24': '\x24', '%25': '\x25', + '%26': '\x26', '%27': '\x27', '%28': '\x28', '%29': '\x29', '%2a': '\x2a', + '%2A': '\x2a', '%2b': '\x2b', '%2B': '\x2b', '%2c': '\x2c', '%2C': '\x2c', + '%2d': '\x2d', '%2D': '\x2d', '%2e': '\x2e', '%2E': '\x2e', '%2f': '\x2f', + '%2F': '\x2f', '%30': '\x30', '%31': '\x31', '%32': '\x32', '%33': '\x33', + '%34': '\x34', '%35': '\x35', '%36': '\x36', '%37': '\x37', '%38': '\x38', + '%39': '\x39', '%3a': '\x3a', '%3A': '\x3a', '%3b': '\x3b', '%3B': '\x3b', + '%3c': '\x3c', '%3C': '\x3c', '%3d': '\x3d', '%3D': '\x3d', '%3e': '\x3e', + '%3E': '\x3e', '%3f': '\x3f', '%3F': '\x3f', '%40': '\x40', '%41': '\x41', + '%42': '\x42', '%43': '\x43', '%44': '\x44', '%45': '\x45', '%46': '\x46', + '%47': '\x47', '%48': '\x48', '%49': '\x49', '%4a': '\x4a', '%4A': '\x4a', + '%4b': '\x4b', '%4B': '\x4b', '%4c': '\x4c', '%4C': '\x4c', '%4d': '\x4d', + '%4D': '\x4d', '%4e': '\x4e', '%4E': '\x4e', '%4f': '\x4f', '%4F': '\x4f', + '%50': '\x50', '%51': '\x51', '%52': '\x52', '%53': '\x53', '%54': '\x54', + '%55': '\x55', '%56': '\x56', '%57': '\x57', '%58': '\x58', '%59': '\x59', + '%5a': '\x5a', '%5A': '\x5a', '%5b': '\x5b', '%5B': '\x5b', '%5c': '\x5c', + '%5C': '\x5c', '%5d': '\x5d', '%5D': '\x5d', '%5e': '\x5e', '%5E': '\x5e', + '%5f': '\x5f', '%5F': '\x5f', '%60': '\x60', '%61': '\x61', '%62': '\x62', + '%63': '\x63', '%64': '\x64', '%65': '\x65', '%66': '\x66', '%67': '\x67', + '%68': '\x68', '%69': '\x69', '%6a': '\x6a', '%6A': '\x6a', '%6b': '\x6b', + '%6B': '\x6b', '%6c': '\x6c', '%6C': '\x6c', '%6d': '\x6d', '%6D': '\x6d', + '%6e': '\x6e', '%6E': '\x6e', '%6f': '\x6f', '%6F': '\x6f', '%70': '\x70', + '%71': '\x71', '%72': '\x72', '%73': '\x73', '%74': '\x74', '%75': '\x75', + '%76': '\x76', '%77': '\x77', '%78': '\x78', '%79': '\x79', '%7a': '\x7a', + '%7A': '\x7a', '%7b': '\x7b', '%7B': '\x7b', '%7c': '\x7c', '%7C': '\x7c', + '%7d': '\x7d', '%7D': '\x7d', '%7e': '\x7e', '%7E': '\x7e', '%7f': '\x7f', + '%7F': '\x7f', '%80': '\x80', '%81': '\x81', '%82': '\x82', '%83': '\x83', + '%84': '\x84', '%85': '\x85', '%86': '\x86', '%87': '\x87', '%88': '\x88', + '%89': '\x89', '%8a': '\x8a', '%8A': '\x8a', '%8b': '\x8b', '%8B': '\x8b', + '%8c': '\x8c', '%8C': '\x8c', '%8d': '\x8d', '%8D': '\x8d', '%8e': '\x8e', + '%8E': '\x8e', '%8f': '\x8f', '%8F': '\x8f', '%90': '\x90', '%91': '\x91', + '%92': '\x92', '%93': '\x93', '%94': '\x94', '%95': '\x95', '%96': '\x96', + '%97': '\x97', '%98': '\x98', '%99': '\x99', '%9a': '\x9a', '%9A': '\x9a', + '%9b': '\x9b', '%9B': '\x9b', '%9c': '\x9c', '%9C': '\x9c', '%9d': '\x9d', + '%9D': '\x9d', '%9e': '\x9e', '%9E': '\x9e', '%9f': '\x9f', '%9F': '\x9f', + '%a0': '\xa0', '%A0': '\xa0', '%a1': '\xa1', '%A1': '\xa1', '%a2': '\xa2', + '%A2': '\xa2', '%a3': '\xa3', '%A3': '\xa3', '%a4': '\xa4', '%A4': '\xa4', + '%a5': '\xa5', '%A5': '\xa5', '%a6': '\xa6', '%A6': '\xa6', '%a7': '\xa7', + '%A7': '\xa7', '%a8': '\xa8', '%A8': '\xa8', '%a9': '\xa9', '%A9': '\xa9', + '%aa': '\xaa', '%Aa': '\xaa', '%aA': '\xaa', '%AA': '\xaa', '%ab': '\xab', + '%Ab': '\xab', '%aB': '\xab', '%AB': '\xab', '%ac': '\xac', '%Ac': '\xac', + '%aC': '\xac', '%AC': '\xac', '%ad': '\xad', '%Ad': '\xad', '%aD': '\xad', + '%AD': '\xad', '%ae': '\xae', '%Ae': '\xae', '%aE': '\xae', '%AE': '\xae', + '%af': '\xaf', '%Af': '\xaf', '%aF': '\xaf', '%AF': '\xaf', '%b0': '\xb0', + '%B0': '\xb0', '%b1': '\xb1', '%B1': '\xb1', '%b2': '\xb2', '%B2': '\xb2', + '%b3': '\xb3', '%B3': '\xb3', '%b4': '\xb4', '%B4': '\xb4', '%b5': '\xb5', + '%B5': '\xb5', '%b6': '\xb6', '%B6': '\xb6', '%b7': '\xb7', '%B7': '\xb7', + '%b8': '\xb8', '%B8': '\xb8', '%b9': '\xb9', '%B9': '\xb9', '%ba': '\xba', + '%Ba': '\xba', '%bA': '\xba', '%BA': '\xba', '%bb': '\xbb', '%Bb': '\xbb', + '%bB': '\xbb', '%BB': '\xbb', '%bc': '\xbc', '%Bc': '\xbc', '%bC': '\xbc', + '%BC': '\xbc', '%bd': '\xbd', '%Bd': '\xbd', '%bD': '\xbd', '%BD': '\xbd', + '%be': '\xbe', '%Be': '\xbe', '%bE': '\xbe', '%BE': '\xbe', '%bf': '\xbf', + '%Bf': '\xbf', '%bF': '\xbf', '%BF': '\xbf', '%c0': '\xc0', '%C0': '\xc0', + '%c1': '\xc1', '%C1': '\xc1', '%c2': '\xc2', '%C2': '\xc2', '%c3': '\xc3', + '%C3': '\xc3', '%c4': '\xc4', '%C4': '\xc4', '%c5': '\xc5', '%C5': '\xc5', + '%c6': '\xc6', '%C6': '\xc6', '%c7': '\xc7', '%C7': '\xc7', '%c8': '\xc8', + '%C8': '\xc8', '%c9': '\xc9', '%C9': '\xc9', '%ca': '\xca', '%Ca': '\xca', + '%cA': '\xca', '%CA': '\xca', '%cb': '\xcb', '%Cb': '\xcb', '%cB': '\xcb', + '%CB': '\xcb', '%cc': '\xcc', '%Cc': '\xcc', '%cC': '\xcc', '%CC': '\xcc', + '%cd': '\xcd', '%Cd': '\xcd', '%cD': '\xcd', '%CD': '\xcd', '%ce': '\xce', + '%Ce': '\xce', '%cE': '\xce', '%CE': '\xce', '%cf': '\xcf', '%Cf': '\xcf', + '%cF': '\xcf', '%CF': '\xcf', '%d0': '\xd0', '%D0': '\xd0', '%d1': '\xd1', + '%D1': '\xd1', '%d2': '\xd2', '%D2': '\xd2', '%d3': '\xd3', '%D3': '\xd3', + '%d4': '\xd4', '%D4': '\xd4', '%d5': '\xd5', '%D5': '\xd5', '%d6': '\xd6', + '%D6': '\xd6', '%d7': '\xd7', '%D7': '\xd7', '%d8': '\xd8', '%D8': '\xd8', + '%d9': '\xd9', '%D9': '\xd9', '%da': '\xda', '%Da': '\xda', '%dA': '\xda', + '%DA': '\xda', '%db': '\xdb', '%Db': '\xdb', '%dB': '\xdb', '%DB': '\xdb', + '%dc': '\xdc', '%Dc': '\xdc', '%dC': '\xdc', '%DC': '\xdc', '%dd': '\xdd', + '%Dd': '\xdd', '%dD': '\xdd', '%DD': '\xdd', '%de': '\xde', '%De': '\xde', + '%dE': '\xde', '%DE': '\xde', '%df': '\xdf', '%Df': '\xdf', '%dF': '\xdf', + '%DF': '\xdf', '%e0': '\xe0', '%E0': '\xe0', '%e1': '\xe1', '%E1': '\xe1', + '%e2': '\xe2', '%E2': '\xe2', '%e3': '\xe3', '%E3': '\xe3', '%e4': '\xe4', + '%E4': '\xe4', '%e5': '\xe5', '%E5': '\xe5', '%e6': '\xe6', '%E6': '\xe6', + '%e7': '\xe7', '%E7': '\xe7', '%e8': '\xe8', '%E8': '\xe8', '%e9': '\xe9', + '%E9': '\xe9', '%ea': '\xea', '%Ea': '\xea', '%eA': '\xea', '%EA': '\xea', + '%eb': '\xeb', '%Eb': '\xeb', '%eB': '\xeb', '%EB': '\xeb', '%ec': '\xec', + '%Ec': '\xec', '%eC': '\xec', '%EC': '\xec', '%ed': '\xed', '%Ed': '\xed', + '%eD': '\xed', '%ED': '\xed', '%ee': '\xee', '%Ee': '\xee', '%eE': '\xee', + '%EE': '\xee', '%ef': '\xef', '%Ef': '\xef', '%eF': '\xef', '%EF': '\xef', + '%f0': '\xf0', '%F0': '\xf0', '%f1': '\xf1', '%F1': '\xf1', '%f2': '\xf2', + '%F2': '\xf2', '%f3': '\xf3', '%F3': '\xf3', '%f4': '\xf4', '%F4': '\xf4', + '%f5': '\xf5', '%F5': '\xf5', '%f6': '\xf6', '%F6': '\xf6', '%f7': '\xf7', + '%F7': '\xf7', '%f8': '\xf8', '%F8': '\xf8', '%f9': '\xf9', '%F9': '\xf9', + '%fa': '\xfa', '%Fa': '\xfa', '%fA': '\xfa', '%FA': '\xfa', '%fb': '\xfb', + '%Fb': '\xfb', '%fB': '\xfb', '%FB': '\xfb', '%fc': '\xfc', '%Fc': '\xfc', + '%fC': '\xfc', '%FC': '\xfc', '%fd': '\xfd', '%Fd': '\xfd', '%fD': '\xfd', + '%FD': '\xfd', '%fe': '\xfe', '%Fe': '\xfe', '%fE': '\xfe', '%FE': '\xfe', + '%ff': '\xff', '%Ff': '\xff', '%fF': '\xff', '%FF': '\xff' +} + +function encodedReplacer (match) { + return EncodedLookup[match] +} + +const STATE_KEY = 0 +const STATE_VALUE = 1 +const STATE_CHARSET = 2 +const STATE_LANG = 3 + +function parseParams (str) { + const res = [] + let state = STATE_KEY + let charset = '' + let inquote = false + let escaping = false + let p = 0 + let tmp = '' + const len = str.length + + for (var i = 0; i < len; ++i) { // eslint-disable-line no-var + const char = str[i] + if (char === '\\' && inquote) { + if (escaping) { escaping = false } else { + escaping = true + continue + } + } else if (char === '"') { + if (!escaping) { + if (inquote) { + inquote = false + state = STATE_KEY + } else { inquote = true } + continue + } else { escaping = false } + } else { + if (escaping && inquote) { tmp += '\\' } + escaping = false + if ((state === STATE_CHARSET || state === STATE_LANG) && char === "'") { + if (state === STATE_CHARSET) { + state = STATE_LANG + charset = tmp.substring(1) + } else { state = STATE_VALUE } + tmp = '' + continue + } else if (state === STATE_KEY && + (char === '*' || char === '=') && + res.length) { + state = char === '*' + ? STATE_CHARSET + : STATE_VALUE + res[p] = [tmp, undefined] + tmp = '' + continue + } else if (!inquote && char === ';') { + state = STATE_KEY + if (charset) { + if (tmp.length) { + tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), + 'binary', + charset) + } + charset = '' + } else if (tmp.length) { + tmp = decodeText(tmp, 'binary', 'utf8') + } + if (res[p] === undefined) { res[p] = tmp } else { res[p][1] = tmp } + tmp = '' + ++p + continue + } else if (!inquote && (char === ' ' || char === '\t')) { continue } + } + tmp += char + } + if (charset && tmp.length) { + tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), + 'binary', + charset) + } else if (tmp) { + tmp = decodeText(tmp, 'binary', 'utf8') + } + + if (res[p] === undefined) { + if (tmp) { res[p] = tmp } + } else { res[p][1] = tmp } + + return res +} + +module.exports = parseParams + + +/***/ }), + +/***/ 7: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; +/*! @azure/msal-node v2.15.0 2024-10-03 */ + +'use strict'; + +var http = __nccwpck_require__(8611); +var https = __nccwpck_require__(5692); +var uuid = __nccwpck_require__(2048); +var crypto = __nccwpck_require__(6982); +var jwt = __nccwpck_require__(9653); +var fs = __nccwpck_require__(9896); +var path = __nccwpck_require__(6928); + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class Serializer { + /** + * serialize the JSON blob + * @param data + */ + static serializeJSONBlob(data) { + return JSON.stringify(data); + } + /** + * Serialize Accounts + * @param accCache + */ + static serializeAccounts(accCache) { + const accounts = {}; + Object.keys(accCache).map(function (key) { + const accountEntity = accCache[key]; + accounts[key] = { + home_account_id: accountEntity.homeAccountId, + environment: accountEntity.environment, + realm: accountEntity.realm, + local_account_id: accountEntity.localAccountId, + username: accountEntity.username, + authority_type: accountEntity.authorityType, + name: accountEntity.name, + client_info: accountEntity.clientInfo, + last_modification_time: accountEntity.lastModificationTime, + last_modification_app: accountEntity.lastModificationApp, + tenantProfiles: accountEntity.tenantProfiles?.map((tenantProfile) => { + return JSON.stringify(tenantProfile); + }), + }; + }); + return accounts; + } + /** + * Serialize IdTokens + * @param idTCache + */ + static serializeIdTokens(idTCache) { + const idTokens = {}; + Object.keys(idTCache).map(function (key) { + const idTEntity = idTCache[key]; + idTokens[key] = { + home_account_id: idTEntity.homeAccountId, + environment: idTEntity.environment, + credential_type: idTEntity.credentialType, + client_id: idTEntity.clientId, + secret: idTEntity.secret, + realm: idTEntity.realm, + }; + }); + return idTokens; + } + /** + * Serializes AccessTokens + * @param atCache + */ + static serializeAccessTokens(atCache) { + const accessTokens = {}; + Object.keys(atCache).map(function (key) { + const atEntity = atCache[key]; + accessTokens[key] = { + home_account_id: atEntity.homeAccountId, + environment: atEntity.environment, + credential_type: atEntity.credentialType, + client_id: atEntity.clientId, + secret: atEntity.secret, + realm: atEntity.realm, + target: atEntity.target, + cached_at: atEntity.cachedAt, + expires_on: atEntity.expiresOn, + extended_expires_on: atEntity.extendedExpiresOn, + refresh_on: atEntity.refreshOn, + key_id: atEntity.keyId, + token_type: atEntity.tokenType, + requestedClaims: atEntity.requestedClaims, + requestedClaimsHash: atEntity.requestedClaimsHash, + userAssertionHash: atEntity.userAssertionHash, + }; + }); + return accessTokens; + } + /** + * Serialize refreshTokens + * @param rtCache + */ + static serializeRefreshTokens(rtCache) { + const refreshTokens = {}; + Object.keys(rtCache).map(function (key) { + const rtEntity = rtCache[key]; + refreshTokens[key] = { + home_account_id: rtEntity.homeAccountId, + environment: rtEntity.environment, + credential_type: rtEntity.credentialType, + client_id: rtEntity.clientId, + secret: rtEntity.secret, + family_id: rtEntity.familyId, + target: rtEntity.target, + realm: rtEntity.realm, + }; + }); + return refreshTokens; + } + /** + * Serialize amdtCache + * @param amdtCache + */ + static serializeAppMetadata(amdtCache) { + const appMetadata = {}; + Object.keys(amdtCache).map(function (key) { + const amdtEntity = amdtCache[key]; + appMetadata[key] = { + client_id: amdtEntity.clientId, + environment: amdtEntity.environment, + family_id: amdtEntity.familyId, + }; + }); + return appMetadata; + } + /** + * Serialize the cache + * @param jsonContent + */ + static serializeAllCache(inMemCache) { + return { + Account: this.serializeAccounts(inMemCache.accounts), + IdToken: this.serializeIdTokens(inMemCache.idTokens), + AccessToken: this.serializeAccessTokens(inMemCache.accessTokens), + RefreshToken: this.serializeRefreshTokens(inMemCache.refreshTokens), + AppMetadata: this.serializeAppMetadata(inMemCache.appMetadata), + }; + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const Constants$1 = { + LIBRARY_NAME: "MSAL.JS", + SKU: "msal.js.common", + // Prefix for all library cache entries + CACHE_PREFIX: "msal", + // default authority + DEFAULT_AUTHORITY: "https://login.microsoftonline.com/common/", + DEFAULT_AUTHORITY_HOST: "login.microsoftonline.com", + DEFAULT_COMMON_TENANT: "common", + // ADFS String + ADFS: "adfs", + DSTS: "dstsv2", + // Default AAD Instance Discovery Endpoint + AAD_INSTANCE_DISCOVERY_ENDPT: "https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=", + // CIAM URL + CIAM_AUTH_URL: ".ciamlogin.com", + AAD_TENANT_DOMAIN_SUFFIX: ".onmicrosoft.com", + // Resource delimiter - used for certain cache entries + RESOURCE_DELIM: "|", + // Placeholder for non-existent account ids/objects + NO_ACCOUNT: "NO_ACCOUNT", + // Claims + CLAIMS: "claims", + // Consumer UTID + CONSUMER_UTID: "9188040d-6c67-4c5b-b112-36a304b66dad", + // Default scopes + OPENID_SCOPE: "openid", + PROFILE_SCOPE: "profile", + OFFLINE_ACCESS_SCOPE: "offline_access", + EMAIL_SCOPE: "email", + // Default response type for authorization code flow + CODE_RESPONSE_TYPE: "code", + CODE_GRANT_TYPE: "authorization_code", + RT_GRANT_TYPE: "refresh_token", + FRAGMENT_RESPONSE_MODE: "fragment", + S256_CODE_CHALLENGE_METHOD: "S256", + URL_FORM_CONTENT_TYPE: "application/x-www-form-urlencoded;charset=utf-8", + AUTHORIZATION_PENDING: "authorization_pending", + NOT_DEFINED: "not_defined", + EMPTY_STRING: "", + NOT_APPLICABLE: "N/A", + NOT_AVAILABLE: "Not Available", + FORWARD_SLASH: "/", + IMDS_ENDPOINT: "http://169.254.169.254/metadata/instance/compute/location", + IMDS_VERSION: "2020-06-01", + IMDS_TIMEOUT: 2000, + AZURE_REGION_AUTO_DISCOVER_FLAG: "TryAutoDetect", + REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX: "login.microsoft.com", + KNOWN_PUBLIC_CLOUDS: [ + "login.microsoftonline.com", + "login.windows.net", + "login.microsoft.com", + "sts.windows.net", + ], + TOKEN_RESPONSE_TYPE: "token", + ID_TOKEN_RESPONSE_TYPE: "id_token", + SHR_NONCE_VALIDITY: 240, + INVALID_INSTANCE: "invalid_instance", +}; +const HttpStatus = { + SUCCESS: 200, + SUCCESS_RANGE_START: 200, + SUCCESS_RANGE_END: 299, + REDIRECT: 302, + CLIENT_ERROR: 400, + CLIENT_ERROR_RANGE_START: 400, + BAD_REQUEST: 400, + UNAUTHORIZED: 401, + NOT_FOUND: 404, + REQUEST_TIMEOUT: 408, + TOO_MANY_REQUESTS: 429, + CLIENT_ERROR_RANGE_END: 499, + SERVER_ERROR: 500, + SERVER_ERROR_RANGE_START: 500, + SERVICE_UNAVAILABLE: 503, + GATEWAY_TIMEOUT: 504, + SERVER_ERROR_RANGE_END: 599, + MULTI_SIDED_ERROR: 600, +}; +const OIDC_DEFAULT_SCOPES = [ + Constants$1.OPENID_SCOPE, + Constants$1.PROFILE_SCOPE, + Constants$1.OFFLINE_ACCESS_SCOPE, +]; +const OIDC_SCOPES = [...OIDC_DEFAULT_SCOPES, Constants$1.EMAIL_SCOPE]; +/** + * Request header names + */ +const HeaderNames = { + CONTENT_TYPE: "Content-Type", + RETRY_AFTER: "Retry-After", + CCS_HEADER: "X-AnchorMailbox", + WWWAuthenticate: "WWW-Authenticate", + AuthenticationInfo: "Authentication-Info", + X_MS_REQUEST_ID: "x-ms-request-id", + X_MS_HTTP_VERSION: "x-ms-httpver", +}; +/** + * String constants related to AAD Authority + */ +const AADAuthorityConstants = { + COMMON: "common", + ORGANIZATIONS: "organizations", + CONSUMERS: "consumers", +}; +/** + * Claims request keys + */ +const ClaimsRequestKeys = { + ACCESS_TOKEN: "access_token", + XMS_CC: "xms_cc", +}; +/** + * we considered making this "enum" in the request instead of string, however it looks like the allowed list of + * prompt values kept changing over past couple of years. There are some undocumented prompt values for some + * internal partners too, hence the choice of generic "string" type instead of the "enum" + */ +const PromptValue = { + LOGIN: "login", + SELECT_ACCOUNT: "select_account", + CONSENT: "consent", + NONE: "none", + CREATE: "create", + NO_SESSION: "no_session", +}; +/** + * allowed values for codeVerifier + */ +const CodeChallengeMethodValues = { + PLAIN: "plain", + S256: "S256", +}; +/** + * allowed values for server response type + */ +const ServerResponseType = { + QUERY: "query", + FRAGMENT: "fragment", +}; +/** + * allowed values for response_mode + */ +const ResponseMode = { + ...ServerResponseType, + FORM_POST: "form_post", +}; +/** + * allowed grant_type + */ +const GrantType = { + IMPLICIT_GRANT: "implicit", + AUTHORIZATION_CODE_GRANT: "authorization_code", + CLIENT_CREDENTIALS_GRANT: "client_credentials", + RESOURCE_OWNER_PASSWORD_GRANT: "password", + REFRESH_TOKEN_GRANT: "refresh_token", + DEVICE_CODE_GRANT: "device_code", + JWT_BEARER: "urn:ietf:params:oauth:grant-type:jwt-bearer", +}; +/** + * Account types in Cache + */ +const CacheAccountType = { + MSSTS_ACCOUNT_TYPE: "MSSTS", + ADFS_ACCOUNT_TYPE: "ADFS", + MSAV1_ACCOUNT_TYPE: "MSA", + GENERIC_ACCOUNT_TYPE: "Generic", // NTLM, Kerberos, FBA, Basic etc +}; +/** + * Separators used in cache + */ +const Separators = { + CACHE_KEY_SEPARATOR: "-", + CLIENT_INFO_SEPARATOR: ".", +}; +/** + * Credential Type stored in the cache + */ +const CredentialType = { + ID_TOKEN: "IdToken", + ACCESS_TOKEN: "AccessToken", + ACCESS_TOKEN_WITH_AUTH_SCHEME: "AccessToken_With_AuthScheme", + REFRESH_TOKEN: "RefreshToken", +}; +/** + * More Cache related constants + */ +const APP_METADATA = "appmetadata"; +const CLIENT_INFO = "client_info"; +const THE_FAMILY_ID = "1"; +const AUTHORITY_METADATA_CONSTANTS = { + CACHE_KEY: "authority-metadata", + REFRESH_TIME_SECONDS: 3600 * 24, // 24 Hours +}; +const AuthorityMetadataSource = { + CONFIG: "config", + CACHE: "cache", + NETWORK: "network", + HARDCODED_VALUES: "hardcoded_values", +}; +const SERVER_TELEM_CONSTANTS = { + SCHEMA_VERSION: 5, + MAX_CUR_HEADER_BYTES: 80, + MAX_LAST_HEADER_BYTES: 330, + MAX_CACHED_ERRORS: 50, + CACHE_KEY: "server-telemetry", + CATEGORY_SEPARATOR: "|", + VALUE_SEPARATOR: ",", + OVERFLOW_TRUE: "1", + OVERFLOW_FALSE: "0", + UNKNOWN_ERROR: "unknown_error", +}; +/** + * Type of the authentication request + */ +const AuthenticationScheme = { + BEARER: "Bearer", + POP: "pop", + SSH: "ssh-cert", +}; +/** + * Constants related to throttling + */ +const ThrottlingConstants = { + // Default time to throttle RequestThumbprint in seconds + DEFAULT_THROTTLE_TIME_SECONDS: 60, + // Default maximum time to throttle in seconds, overrides what the server sends back + DEFAULT_MAX_THROTTLE_TIME_SECONDS: 3600, + // Prefix for storing throttling entries + THROTTLING_PREFIX: "throttling", + // Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling + X_MS_LIB_CAPABILITY_VALUE: "retry-after, h429", +}; +const Errors = { + INVALID_GRANT_ERROR: "invalid_grant", + CLIENT_MISMATCH_ERROR: "client_mismatch", +}; +/** + * Password grant parameters + */ +const PasswordGrantConstants = { + username: "username", + password: "password", +}; +/** + * Response codes + */ +const ResponseCodes = { + httpSuccess: 200, + httpBadRequest: 400, +}; +/** + * Region Discovery Sources + */ +const RegionDiscoverySources = { + FAILED_AUTO_DETECTION: "1", + INTERNAL_CACHE: "2", + ENVIRONMENT_VARIABLE: "3", + IMDS: "4", +}; +/** + * Region Discovery Outcomes + */ +const RegionDiscoveryOutcomes = { + CONFIGURED_MATCHES_DETECTED: "1", + CONFIGURED_NO_AUTO_DETECTION: "2", + CONFIGURED_NOT_DETECTED: "3", + AUTO_DETECTION_REQUESTED_SUCCESSFUL: "4", + AUTO_DETECTION_REQUESTED_FAILED: "5", +}; +/** + * Specifies the reason for fetching the access token from the identity provider + */ +const CacheOutcome = { + // When a token is found in the cache or the cache is not supposed to be hit when making the request + NOT_APPLICABLE: "0", + // When the token request goes to the identity provider because force_refresh was set to true. Also occurs if claims were requested + FORCE_REFRESH_OR_CLAIMS: "1", + // When the token request goes to the identity provider because no cached access token exists + NO_CACHED_ACCESS_TOKEN: "2", + // When the token request goes to the identity provider because cached access token expired + CACHED_ACCESS_TOKEN_EXPIRED: "3", + // When the token request goes to the identity provider because refresh_in was used and the existing token needs to be refreshed + PROACTIVELY_REFRESHED: "4", +}; +// Token renewal offset default in seconds +const DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * AuthErrorMessage class containing string constants used by error codes and messages. + */ +const unexpectedError = "unexpected_error"; +const postRequestFailed = "post_request_failed"; + +var AuthErrorCodes = /*#__PURE__*/Object.freeze({ + __proto__: null, + postRequestFailed: postRequestFailed, + unexpectedError: unexpectedError +}); + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const AuthErrorMessages = { + [unexpectedError]: "Unexpected error in authentication.", + [postRequestFailed]: "Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details.", +}; +/** + * AuthErrorMessage class containing string constants used by error codes and messages. + * @deprecated Use AuthErrorCodes instead + */ +const AuthErrorMessage = { + unexpectedError: { + code: unexpectedError, + desc: AuthErrorMessages[unexpectedError], + }, + postRequestFailed: { + code: postRequestFailed, + desc: AuthErrorMessages[postRequestFailed], + }, +}; +/** + * General error class thrown by the MSAL.js library. + */ +class AuthError extends Error { + constructor(errorCode, errorMessage, suberror) { + const errorString = errorMessage + ? `${errorCode}: ${errorMessage}` + : errorCode; + super(errorString); + Object.setPrototypeOf(this, AuthError.prototype); + this.errorCode = errorCode || Constants$1.EMPTY_STRING; + this.errorMessage = errorMessage || Constants$1.EMPTY_STRING; + this.subError = suberror || Constants$1.EMPTY_STRING; + this.name = "AuthError"; + } + setCorrelationId(correlationId) { + this.correlationId = correlationId; + } +} +function createAuthError(code, additionalMessage) { + return new AuthError(code, additionalMessage + ? `${AuthErrorMessages[code]} ${additionalMessage}` + : AuthErrorMessages[code]); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const clientInfoDecodingError = "client_info_decoding_error"; +const clientInfoEmptyError = "client_info_empty_error"; +const tokenParsingError = "token_parsing_error"; +const nullOrEmptyToken = "null_or_empty_token"; +const endpointResolutionError = "endpoints_resolution_error"; +const networkError = "network_error"; +const openIdConfigError = "openid_config_error"; +const hashNotDeserialized = "hash_not_deserialized"; +const invalidState = "invalid_state"; +const stateMismatch = "state_mismatch"; +const stateNotFound = "state_not_found"; +const nonceMismatch = "nonce_mismatch"; +const authTimeNotFound = "auth_time_not_found"; +const maxAgeTranspired = "max_age_transpired"; +const multipleMatchingTokens = "multiple_matching_tokens"; +const multipleMatchingAccounts = "multiple_matching_accounts"; +const multipleMatchingAppMetadata = "multiple_matching_appMetadata"; +const requestCannotBeMade = "request_cannot_be_made"; +const cannotRemoveEmptyScope = "cannot_remove_empty_scope"; +const cannotAppendScopeSet = "cannot_append_scopeset"; +const emptyInputScopeSet = "empty_input_scopeset"; +const deviceCodePollingCancelled = "device_code_polling_cancelled"; +const deviceCodeExpired = "device_code_expired"; +const deviceCodeUnknownError = "device_code_unknown_error"; +const noAccountInSilentRequest = "no_account_in_silent_request"; +const invalidCacheRecord = "invalid_cache_record"; +const invalidCacheEnvironment = "invalid_cache_environment"; +const noAccountFound = "no_account_found"; +const noCryptoObject = "no_crypto_object"; +const unexpectedCredentialType = "unexpected_credential_type"; +const invalidAssertion = "invalid_assertion"; +const invalidClientCredential = "invalid_client_credential"; +const tokenRefreshRequired = "token_refresh_required"; +const userTimeoutReached = "user_timeout_reached"; +const tokenClaimsCnfRequiredForSignedJwt = "token_claims_cnf_required_for_signedjwt"; +const authorizationCodeMissingFromServerResponse = "authorization_code_missing_from_server_response"; +const bindingKeyNotRemoved = "binding_key_not_removed"; +const endSessionEndpointNotSupported = "end_session_endpoint_not_supported"; +const keyIdMissing = "key_id_missing"; +const noNetworkConnectivity = "no_network_connectivity"; +const userCanceled = "user_canceled"; +const missingTenantIdError = "missing_tenant_id_error"; +const methodNotImplemented = "method_not_implemented"; +const nestedAppAuthBridgeDisabled = "nested_app_auth_bridge_disabled"; + +var ClientAuthErrorCodes = /*#__PURE__*/Object.freeze({ + __proto__: null, + authTimeNotFound: authTimeNotFound, + authorizationCodeMissingFromServerResponse: authorizationCodeMissingFromServerResponse, + bindingKeyNotRemoved: bindingKeyNotRemoved, + cannotAppendScopeSet: cannotAppendScopeSet, + cannotRemoveEmptyScope: cannotRemoveEmptyScope, + clientInfoDecodingError: clientInfoDecodingError, + clientInfoEmptyError: clientInfoEmptyError, + deviceCodeExpired: deviceCodeExpired, + deviceCodePollingCancelled: deviceCodePollingCancelled, + deviceCodeUnknownError: deviceCodeUnknownError, + emptyInputScopeSet: emptyInputScopeSet, + endSessionEndpointNotSupported: endSessionEndpointNotSupported, + endpointResolutionError: endpointResolutionError, + hashNotDeserialized: hashNotDeserialized, + invalidAssertion: invalidAssertion, + invalidCacheEnvironment: invalidCacheEnvironment, + invalidCacheRecord: invalidCacheRecord, + invalidClientCredential: invalidClientCredential, + invalidState: invalidState, + keyIdMissing: keyIdMissing, + maxAgeTranspired: maxAgeTranspired, + methodNotImplemented: methodNotImplemented, + missingTenantIdError: missingTenantIdError, + multipleMatchingAccounts: multipleMatchingAccounts, + multipleMatchingAppMetadata: multipleMatchingAppMetadata, + multipleMatchingTokens: multipleMatchingTokens, + nestedAppAuthBridgeDisabled: nestedAppAuthBridgeDisabled, + networkError: networkError, + noAccountFound: noAccountFound, + noAccountInSilentRequest: noAccountInSilentRequest, + noCryptoObject: noCryptoObject, + noNetworkConnectivity: noNetworkConnectivity, + nonceMismatch: nonceMismatch, + nullOrEmptyToken: nullOrEmptyToken, + openIdConfigError: openIdConfigError, + requestCannotBeMade: requestCannotBeMade, + stateMismatch: stateMismatch, + stateNotFound: stateNotFound, + tokenClaimsCnfRequiredForSignedJwt: tokenClaimsCnfRequiredForSignedJwt, + tokenParsingError: tokenParsingError, + tokenRefreshRequired: tokenRefreshRequired, + unexpectedCredentialType: unexpectedCredentialType, + userCanceled: userCanceled, + userTimeoutReached: userTimeoutReached +}); + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * ClientAuthErrorMessage class containing string constants used by error codes and messages. + */ +const ClientAuthErrorMessages = { + [clientInfoDecodingError]: "The client info could not be parsed/decoded correctly", + [clientInfoEmptyError]: "The client info was empty", + [tokenParsingError]: "Token cannot be parsed", + [nullOrEmptyToken]: "The token is null or empty", + [endpointResolutionError]: "Endpoints cannot be resolved", + [networkError]: "Network request failed", + [openIdConfigError]: "Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.", + [hashNotDeserialized]: "The hash parameters could not be deserialized", + [invalidState]: "State was not the expected format", + [stateMismatch]: "State mismatch error", + [stateNotFound]: "State not found", + [nonceMismatch]: "Nonce mismatch error", + [authTimeNotFound]: "Max Age was requested and the ID token is missing the auth_time variable." + + " auth_time is an optional claim and is not enabled by default - it must be enabled." + + " See https://aka.ms/msaljs/optional-claims for more information.", + [maxAgeTranspired]: "Max Age is set to 0, or too much time has elapsed since the last end-user authentication.", + [multipleMatchingTokens]: "The cache contains multiple tokens satisfying the requirements. " + + "Call AcquireToken again providing more requirements such as authority or account.", + [multipleMatchingAccounts]: "The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account", + [multipleMatchingAppMetadata]: "The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata", + [requestCannotBeMade]: "Token request cannot be made without authorization code or refresh token.", + [cannotRemoveEmptyScope]: "Cannot remove null or empty scope from ScopeSet", + [cannotAppendScopeSet]: "Cannot append ScopeSet", + [emptyInputScopeSet]: "Empty input ScopeSet cannot be processed", + [deviceCodePollingCancelled]: "Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.", + [deviceCodeExpired]: "Device code is expired.", + [deviceCodeUnknownError]: "Device code stopped polling for unknown reasons.", + [noAccountInSilentRequest]: "Please pass an account object, silent flow is not supported without account information", + [invalidCacheRecord]: "Cache record object was null or undefined.", + [invalidCacheEnvironment]: "Invalid environment when attempting to create cache entry", + [noAccountFound]: "No account found in cache for given key.", + [noCryptoObject]: "No crypto object detected.", + [unexpectedCredentialType]: "Unexpected credential type.", + [invalidAssertion]: "Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515", + [invalidClientCredential]: "Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential", + [tokenRefreshRequired]: "Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.", + [userTimeoutReached]: "User defined timeout for device code polling reached", + [tokenClaimsCnfRequiredForSignedJwt]: "Cannot generate a POP jwt if the token_claims are not populated", + [authorizationCodeMissingFromServerResponse]: "Server response does not contain an authorization code to proceed", + [bindingKeyNotRemoved]: "Could not remove the credential's binding key from storage.", + [endSessionEndpointNotSupported]: "The provided authority does not support logout", + [keyIdMissing]: "A keyId value is missing from the requested bound token's cache record and is required to match the token to it's stored binding key.", + [noNetworkConnectivity]: "No network connectivity. Check your internet connection.", + [userCanceled]: "User cancelled the flow.", + [missingTenantIdError]: "A tenant id - not common, organizations, or consumers - must be specified when using the client_credentials flow.", + [methodNotImplemented]: "This method has not been implemented", + [nestedAppAuthBridgeDisabled]: "The nested app auth bridge is disabled", +}; +/** + * String constants used by error codes and messages. + * @deprecated Use ClientAuthErrorCodes instead + */ +const ClientAuthErrorMessage = { + clientInfoDecodingError: { + code: clientInfoDecodingError, + desc: ClientAuthErrorMessages[clientInfoDecodingError], + }, + clientInfoEmptyError: { + code: clientInfoEmptyError, + desc: ClientAuthErrorMessages[clientInfoEmptyError], + }, + tokenParsingError: { + code: tokenParsingError, + desc: ClientAuthErrorMessages[tokenParsingError], + }, + nullOrEmptyToken: { + code: nullOrEmptyToken, + desc: ClientAuthErrorMessages[nullOrEmptyToken], + }, + endpointResolutionError: { + code: endpointResolutionError, + desc: ClientAuthErrorMessages[endpointResolutionError], + }, + networkError: { + code: networkError, + desc: ClientAuthErrorMessages[networkError], + }, + unableToGetOpenidConfigError: { + code: openIdConfigError, + desc: ClientAuthErrorMessages[openIdConfigError], + }, + hashNotDeserialized: { + code: hashNotDeserialized, + desc: ClientAuthErrorMessages[hashNotDeserialized], + }, + invalidStateError: { + code: invalidState, + desc: ClientAuthErrorMessages[invalidState], + }, + stateMismatchError: { + code: stateMismatch, + desc: ClientAuthErrorMessages[stateMismatch], + }, + stateNotFoundError: { + code: stateNotFound, + desc: ClientAuthErrorMessages[stateNotFound], + }, + nonceMismatchError: { + code: nonceMismatch, + desc: ClientAuthErrorMessages[nonceMismatch], + }, + authTimeNotFoundError: { + code: authTimeNotFound, + desc: ClientAuthErrorMessages[authTimeNotFound], + }, + maxAgeTranspired: { + code: maxAgeTranspired, + desc: ClientAuthErrorMessages[maxAgeTranspired], + }, + multipleMatchingTokens: { + code: multipleMatchingTokens, + desc: ClientAuthErrorMessages[multipleMatchingTokens], + }, + multipleMatchingAccounts: { + code: multipleMatchingAccounts, + desc: ClientAuthErrorMessages[multipleMatchingAccounts], + }, + multipleMatchingAppMetadata: { + code: multipleMatchingAppMetadata, + desc: ClientAuthErrorMessages[multipleMatchingAppMetadata], + }, + tokenRequestCannotBeMade: { + code: requestCannotBeMade, + desc: ClientAuthErrorMessages[requestCannotBeMade], + }, + removeEmptyScopeError: { + code: cannotRemoveEmptyScope, + desc: ClientAuthErrorMessages[cannotRemoveEmptyScope], + }, + appendScopeSetError: { + code: cannotAppendScopeSet, + desc: ClientAuthErrorMessages[cannotAppendScopeSet], + }, + emptyInputScopeSetError: { + code: emptyInputScopeSet, + desc: ClientAuthErrorMessages[emptyInputScopeSet], + }, + DeviceCodePollingCancelled: { + code: deviceCodePollingCancelled, + desc: ClientAuthErrorMessages[deviceCodePollingCancelled], + }, + DeviceCodeExpired: { + code: deviceCodeExpired, + desc: ClientAuthErrorMessages[deviceCodeExpired], + }, + DeviceCodeUnknownError: { + code: deviceCodeUnknownError, + desc: ClientAuthErrorMessages[deviceCodeUnknownError], + }, + NoAccountInSilentRequest: { + code: noAccountInSilentRequest, + desc: ClientAuthErrorMessages[noAccountInSilentRequest], + }, + invalidCacheRecord: { + code: invalidCacheRecord, + desc: ClientAuthErrorMessages[invalidCacheRecord], + }, + invalidCacheEnvironment: { + code: invalidCacheEnvironment, + desc: ClientAuthErrorMessages[invalidCacheEnvironment], + }, + noAccountFound: { + code: noAccountFound, + desc: ClientAuthErrorMessages[noAccountFound], + }, + noCryptoObj: { + code: noCryptoObject, + desc: ClientAuthErrorMessages[noCryptoObject], + }, + unexpectedCredentialType: { + code: unexpectedCredentialType, + desc: ClientAuthErrorMessages[unexpectedCredentialType], + }, + invalidAssertion: { + code: invalidAssertion, + desc: ClientAuthErrorMessages[invalidAssertion], + }, + invalidClientCredential: { + code: invalidClientCredential, + desc: ClientAuthErrorMessages[invalidClientCredential], + }, + tokenRefreshRequired: { + code: tokenRefreshRequired, + desc: ClientAuthErrorMessages[tokenRefreshRequired], + }, + userTimeoutReached: { + code: userTimeoutReached, + desc: ClientAuthErrorMessages[userTimeoutReached], + }, + tokenClaimsRequired: { + code: tokenClaimsCnfRequiredForSignedJwt, + desc: ClientAuthErrorMessages[tokenClaimsCnfRequiredForSignedJwt], + }, + noAuthorizationCodeFromServer: { + code: authorizationCodeMissingFromServerResponse, + desc: ClientAuthErrorMessages[authorizationCodeMissingFromServerResponse], + }, + bindingKeyNotRemovedError: { + code: bindingKeyNotRemoved, + desc: ClientAuthErrorMessages[bindingKeyNotRemoved], + }, + logoutNotSupported: { + code: endSessionEndpointNotSupported, + desc: ClientAuthErrorMessages[endSessionEndpointNotSupported], + }, + keyIdMissing: { + code: keyIdMissing, + desc: ClientAuthErrorMessages[keyIdMissing], + }, + noNetworkConnectivity: { + code: noNetworkConnectivity, + desc: ClientAuthErrorMessages[noNetworkConnectivity], + }, + userCanceledError: { + code: userCanceled, + desc: ClientAuthErrorMessages[userCanceled], + }, + missingTenantIdError: { + code: missingTenantIdError, + desc: ClientAuthErrorMessages[missingTenantIdError], + }, + nestedAppAuthBridgeDisabled: { + code: nestedAppAuthBridgeDisabled, + desc: ClientAuthErrorMessages[nestedAppAuthBridgeDisabled], + }, +}; +/** + * Error thrown when there is an error in the client code running on the browser. + */ +class ClientAuthError extends AuthError { + constructor(errorCode, additionalMessage) { + super(errorCode, additionalMessage + ? `${ClientAuthErrorMessages[errorCode]}: ${additionalMessage}` + : ClientAuthErrorMessages[errorCode]); + this.name = "ClientAuthError"; + Object.setPrototypeOf(this, ClientAuthError.prototype); + } +} +function createClientAuthError(errorCode, additionalMessage) { + return new ClientAuthError(errorCode, additionalMessage); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const DEFAULT_CRYPTO_IMPLEMENTATION = { + createNewGuid: () => { + throw createClientAuthError(methodNotImplemented); + }, + base64Decode: () => { + throw createClientAuthError(methodNotImplemented); + }, + base64Encode: () => { + throw createClientAuthError(methodNotImplemented); + }, + base64UrlEncode: () => { + throw createClientAuthError(methodNotImplemented); + }, + encodeKid: () => { + throw createClientAuthError(methodNotImplemented); + }, + async getPublicKeyThumbprint() { + throw createClientAuthError(methodNotImplemented); + }, + async removeTokenBindingKey() { + throw createClientAuthError(methodNotImplemented); + }, + async clearKeystore() { + throw createClientAuthError(methodNotImplemented); + }, + async signJwt() { + throw createClientAuthError(methodNotImplemented); + }, + async hashString() { + throw createClientAuthError(methodNotImplemented); + }, +}; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Log message level. + */ +exports.LogLevel = void 0; +(function (LogLevel) { + LogLevel[LogLevel["Error"] = 0] = "Error"; + LogLevel[LogLevel["Warning"] = 1] = "Warning"; + LogLevel[LogLevel["Info"] = 2] = "Info"; + LogLevel[LogLevel["Verbose"] = 3] = "Verbose"; + LogLevel[LogLevel["Trace"] = 4] = "Trace"; +})(exports.LogLevel || (exports.LogLevel = {})); +/** + * Class which facilitates logging of messages to a specific place. + */ +class Logger { + constructor(loggerOptions, packageName, packageVersion) { + // Current log level, defaults to info. + this.level = exports.LogLevel.Info; + const defaultLoggerCallback = () => { + return; + }; + const setLoggerOptions = loggerOptions || Logger.createDefaultLoggerOptions(); + this.localCallback = + setLoggerOptions.loggerCallback || defaultLoggerCallback; + this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false; + this.level = + typeof setLoggerOptions.logLevel === "number" + ? setLoggerOptions.logLevel + : exports.LogLevel.Info; + this.correlationId = + setLoggerOptions.correlationId || Constants$1.EMPTY_STRING; + this.packageName = packageName || Constants$1.EMPTY_STRING; + this.packageVersion = packageVersion || Constants$1.EMPTY_STRING; + } + static createDefaultLoggerOptions() { + return { + loggerCallback: () => { + // allow users to not set loggerCallback + }, + piiLoggingEnabled: false, + logLevel: exports.LogLevel.Info, + }; + } + /** + * Create new Logger with existing configurations. + */ + clone(packageName, packageVersion, correlationId) { + return new Logger({ + loggerCallback: this.localCallback, + piiLoggingEnabled: this.piiLoggingEnabled, + logLevel: this.level, + correlationId: correlationId || this.correlationId, + }, packageName, packageVersion); + } + /** + * Log message with required options. + */ + logMessage(logMessage, options) { + if (options.logLevel > this.level || + (!this.piiLoggingEnabled && options.containsPii)) { + return; + } + const timestamp = new Date().toUTCString(); + // Add correlationId to logs if set, correlationId provided on log messages take precedence + const logHeader = `[${timestamp}] : [${options.correlationId || this.correlationId || ""}]`; + const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${exports.LogLevel[options.logLevel]} - ${logMessage}`; + // debug(`msal:${LogLevel[options.logLevel]}${options.containsPii ? "-Pii": Constants.EMPTY_STRING}${options.context ? `:${options.context}` : Constants.EMPTY_STRING}`)(logMessage); + this.executeCallback(options.logLevel, log, options.containsPii || false); + } + /** + * Execute callback with message. + */ + executeCallback(level, message, containsPii) { + if (this.localCallback) { + this.localCallback(level, message, containsPii); + } + } + /** + * Logs error messages. + */ + error(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Error, + containsPii: false, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs error messages with PII. + */ + errorPii(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Error, + containsPii: true, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs warning messages. + */ + warning(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Warning, + containsPii: false, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs warning messages with PII. + */ + warningPii(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Warning, + containsPii: true, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs info messages. + */ + info(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Info, + containsPii: false, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs info messages with PII. + */ + infoPii(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Info, + containsPii: true, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs verbose messages. + */ + verbose(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Verbose, + containsPii: false, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs verbose messages with PII. + */ + verbosePii(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Verbose, + containsPii: true, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs trace messages. + */ + trace(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Trace, + containsPii: false, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Logs trace messages with PII. + */ + tracePii(message, correlationId) { + this.logMessage(message, { + logLevel: exports.LogLevel.Trace, + containsPii: true, + correlationId: correlationId || Constants$1.EMPTY_STRING, + }); + } + /** + * Returns whether PII Logging is enabled or not. + */ + isPiiLoggingEnabled() { + return this.piiLoggingEnabled || false; + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* eslint-disable header/header */ +const name$1 = "@azure/msal-common"; +const version$1 = "14.15.0"; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const AzureCloudInstance = { + // AzureCloudInstance is not specified. + None: "none", + // Microsoft Azure public cloud + AzurePublic: "https://login.microsoftonline.com", + // Microsoft PPE + AzurePpe: "https://login.windows-ppe.net", + // Microsoft Chinese national/regional cloud + AzureChina: "https://login.chinacloudapi.cn", + // Microsoft German national/regional cloud ("Black Forest") + AzureGermany: "https://login.microsoftonline.de", + // US Government cloud + AzureUsGovernment: "https://login.microsoftonline.us", +}; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Extract token by decoding the rawToken + * + * @param encodedToken + */ +function extractTokenClaims(encodedToken, base64Decode) { + const jswPayload = getJWSPayload(encodedToken); + // token will be decoded to get the username + try { + // base64Decode() should throw an error if there is an issue + const base64Decoded = base64Decode(jswPayload); + return JSON.parse(base64Decoded); + } + catch (err) { + throw createClientAuthError(tokenParsingError); + } +} +/** + * decode a JWT + * + * @param authToken + */ +function getJWSPayload(authToken) { + if (!authToken) { + throw createClientAuthError(nullOrEmptyToken); + } + const tokenPartsRegex = /^([^\.\s]*)\.([^\.\s]+)\.([^\.\s]*)$/; + const matches = tokenPartsRegex.exec(authToken); + if (!matches || matches.length < 4) { + throw createClientAuthError(tokenParsingError); + } + /** + * const crackedToken = { + * header: matches[1], + * JWSPayload: matches[2], + * JWSSig: matches[3], + * }; + */ + return matches[2]; +} +/** + * Determine if the token's max_age has transpired + */ +function checkMaxAge(authTime, maxAge) { + /* + * per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest + * To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access, + * provide a value of 0 for the max_age parameter and the AS will force a fresh login. + */ + const fiveMinuteSkew = 300000; // five minutes in milliseconds + if (maxAge === 0 || Date.now() - fiveMinuteSkew > authTime + maxAge) { + throw createClientAuthError(maxAgeTranspired); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Utility functions for managing date and time operations. + */ +/** + * return the current time in Unix time (seconds). + */ +function nowSeconds() { + // Date.getTime() returns in milliseconds. + return Math.round(new Date().getTime() / 1000.0); +} +/** + * check if a token is expired based on given UTC time in seconds. + * @param expiresOn + */ +function isTokenExpired(expiresOn, offset) { + // check for access token expiry + const expirationSec = Number(expiresOn) || 0; + const offsetCurrentTimeSec = nowSeconds() + offset; + // If current time + offset is greater than token expiration time, then token is expired. + return offsetCurrentTimeSec > expirationSec; +} +/** + * If the current time is earlier than the time that a token was cached at, we must discard the token + * i.e. The system clock was turned back after acquiring the cached token + * @param cachedAt + * @param offset + */ +function wasClockTurnedBack(cachedAt) { + const cachedAtSec = Number(cachedAt); + return cachedAtSec > nowSeconds(); +} +/** + * Waits for t number of milliseconds + * @param t number + * @param value T + */ +function delay(t, value) { + return new Promise((resolve) => setTimeout(() => resolve(value), t)); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Cache Key: ------- + * IdToken Example: uid.utid-login.microsoftonline.com-idtoken-app_client_id-contoso.com + * AccessToken Example: uid.utid-login.microsoftonline.com-accesstoken-app_client_id-contoso.com-scope1 scope2--pop + * RefreshToken Example: uid.utid-login.microsoftonline.com-refreshtoken-1-contoso.com + * @param credentialEntity + * @returns + */ +function generateCredentialKey(credentialEntity) { + const credentialKey = [ + generateAccountId(credentialEntity), + generateCredentialId(credentialEntity), + generateTarget(credentialEntity), + generateClaimsHash(credentialEntity), + generateScheme(credentialEntity), + ]; + return credentialKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase(); +} +/** + * Create IdTokenEntity + * @param homeAccountId + * @param authenticationResult + * @param clientId + * @param authority + */ +function createIdTokenEntity(homeAccountId, environment, idToken, clientId, tenantId) { + const idTokenEntity = { + credentialType: CredentialType.ID_TOKEN, + homeAccountId: homeAccountId, + environment: environment, + clientId: clientId, + secret: idToken, + realm: tenantId, + }; + return idTokenEntity; +} +/** + * Create AccessTokenEntity + * @param homeAccountId + * @param environment + * @param accessToken + * @param clientId + * @param tenantId + * @param scopes + * @param expiresOn + * @param extExpiresOn + */ +function createAccessTokenEntity(homeAccountId, environment, accessToken, clientId, tenantId, scopes, expiresOn, extExpiresOn, base64Decode, refreshOn, tokenType, userAssertionHash, keyId, requestedClaims, requestedClaimsHash) { + const atEntity = { + homeAccountId: homeAccountId, + credentialType: CredentialType.ACCESS_TOKEN, + secret: accessToken, + cachedAt: nowSeconds().toString(), + expiresOn: expiresOn.toString(), + extendedExpiresOn: extExpiresOn.toString(), + environment: environment, + clientId: clientId, + realm: tenantId, + target: scopes, + tokenType: tokenType || AuthenticationScheme.BEARER, + }; + if (userAssertionHash) { + atEntity.userAssertionHash = userAssertionHash; + } + if (refreshOn) { + atEntity.refreshOn = refreshOn.toString(); + } + if (requestedClaims) { + atEntity.requestedClaims = requestedClaims; + atEntity.requestedClaimsHash = requestedClaimsHash; + } + /* + * Create Access Token With Auth Scheme instead of regular access token + * Cast to lower to handle "bearer" from ADFS + */ + if (atEntity.tokenType?.toLowerCase() !== + AuthenticationScheme.BEARER.toLowerCase()) { + atEntity.credentialType = CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME; + switch (atEntity.tokenType) { + case AuthenticationScheme.POP: + // Make sure keyId is present and add it to credential + const tokenClaims = extractTokenClaims(accessToken, base64Decode); + if (!tokenClaims?.cnf?.kid) { + throw createClientAuthError(tokenClaimsCnfRequiredForSignedJwt); + } + atEntity.keyId = tokenClaims.cnf.kid; + break; + case AuthenticationScheme.SSH: + atEntity.keyId = keyId; + } + } + return atEntity; +} +/** + * Create RefreshTokenEntity + * @param homeAccountId + * @param authenticationResult + * @param clientId + * @param authority + */ +function createRefreshTokenEntity(homeAccountId, environment, refreshToken, clientId, familyId, userAssertionHash, expiresOn) { + const rtEntity = { + credentialType: CredentialType.REFRESH_TOKEN, + homeAccountId: homeAccountId, + environment: environment, + clientId: clientId, + secret: refreshToken, + }; + if (userAssertionHash) { + rtEntity.userAssertionHash = userAssertionHash; + } + if (familyId) { + rtEntity.familyId = familyId; + } + if (expiresOn) { + rtEntity.expiresOn = expiresOn.toString(); + } + return rtEntity; +} +function isCredentialEntity(entity) { + return (entity.hasOwnProperty("homeAccountId") && + entity.hasOwnProperty("environment") && + entity.hasOwnProperty("credentialType") && + entity.hasOwnProperty("clientId") && + entity.hasOwnProperty("secret")); +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isAccessTokenEntity(entity) { + if (!entity) { + return false; + } + return (isCredentialEntity(entity) && + entity.hasOwnProperty("realm") && + entity.hasOwnProperty("target") && + (entity["credentialType"] === CredentialType.ACCESS_TOKEN || + entity["credentialType"] === + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME)); +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isIdTokenEntity(entity) { + if (!entity) { + return false; + } + return (isCredentialEntity(entity) && + entity.hasOwnProperty("realm") && + entity["credentialType"] === CredentialType.ID_TOKEN); +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isRefreshTokenEntity(entity) { + if (!entity) { + return false; + } + return (isCredentialEntity(entity) && + entity["credentialType"] === CredentialType.REFRESH_TOKEN); +} +/** + * Generate Account Id key component as per the schema: - + */ +function generateAccountId(credentialEntity) { + const accountId = [ + credentialEntity.homeAccountId, + credentialEntity.environment, + ]; + return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase(); +} +/** + * Generate Credential Id key component as per the schema: -- + */ +function generateCredentialId(credentialEntity) { + const clientOrFamilyId = credentialEntity.credentialType === CredentialType.REFRESH_TOKEN + ? credentialEntity.familyId || credentialEntity.clientId + : credentialEntity.clientId; + const credentialId = [ + credentialEntity.credentialType, + clientOrFamilyId, + credentialEntity.realm || "", + ]; + return credentialId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase(); +} +/** + * Generate target key component as per schema: + */ +function generateTarget(credentialEntity) { + return (credentialEntity.target || "").toLowerCase(); +} +/** + * Generate requested claims key component as per schema: + */ +function generateClaimsHash(credentialEntity) { + return (credentialEntity.requestedClaimsHash || "").toLowerCase(); +} +/** + * Generate scheme key componenet as per schema: + */ +function generateScheme(credentialEntity) { + /* + * PoP Tokens and SSH certs include scheme in cache key + * Cast to lowercase to handle "bearer" from ADFS + */ + return credentialEntity.tokenType && + credentialEntity.tokenType.toLowerCase() !== + AuthenticationScheme.BEARER.toLowerCase() + ? credentialEntity.tokenType.toLowerCase() + : ""; +} +/** + * validates if a given cache entry is "Telemetry", parses + * @param key + * @param entity + */ +function isServerTelemetryEntity(key, entity) { + const validateKey = key.indexOf(SERVER_TELEM_CONSTANTS.CACHE_KEY) === 0; + let validateEntity = true; + if (entity) { + validateEntity = + entity.hasOwnProperty("failedRequests") && + entity.hasOwnProperty("errors") && + entity.hasOwnProperty("cacheHits"); + } + return validateKey && validateEntity; +} +/** + * validates if a given cache entry is "Throttling", parses + * @param key + * @param entity + */ +function isThrottlingEntity(key, entity) { + let validateKey = false; + if (key) { + validateKey = key.indexOf(ThrottlingConstants.THROTTLING_PREFIX) === 0; + } + let validateEntity = true; + if (entity) { + validateEntity = entity.hasOwnProperty("throttleTime"); + } + return validateKey && validateEntity; +} +/** + * Generate AppMetadata Cache Key as per the schema: appmetadata-- + */ +function generateAppMetadataKey({ environment, clientId, }) { + const appMetaDataKeyArray = [ + APP_METADATA, + environment, + clientId, + ]; + return appMetaDataKeyArray + .join(Separators.CACHE_KEY_SEPARATOR) + .toLowerCase(); +} +/* + * Validates an entity: checks for all expected params + * @param entity + */ +function isAppMetadataEntity(key, entity) { + if (!entity) { + return false; + } + return (key.indexOf(APP_METADATA) === 0 && + entity.hasOwnProperty("clientId") && + entity.hasOwnProperty("environment")); +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isAuthorityMetadataEntity(key, entity) { + if (!entity) { + return false; + } + return (key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) === 0 && + entity.hasOwnProperty("aliases") && + entity.hasOwnProperty("preferred_cache") && + entity.hasOwnProperty("preferred_network") && + entity.hasOwnProperty("canonical_authority") && + entity.hasOwnProperty("authorization_endpoint") && + entity.hasOwnProperty("token_endpoint") && + entity.hasOwnProperty("issuer") && + entity.hasOwnProperty("aliasesFromNetwork") && + entity.hasOwnProperty("endpointsFromNetwork") && + entity.hasOwnProperty("expiresAt") && + entity.hasOwnProperty("jwks_uri")); +} +/** + * Reset the exiresAt value + */ +function generateAuthorityMetadataExpiresAt() { + return (nowSeconds() + + AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS); +} +function updateAuthorityEndpointMetadata(authorityMetadata, updatedValues, fromNetwork) { + authorityMetadata.authorization_endpoint = + updatedValues.authorization_endpoint; + authorityMetadata.token_endpoint = updatedValues.token_endpoint; + authorityMetadata.end_session_endpoint = updatedValues.end_session_endpoint; + authorityMetadata.issuer = updatedValues.issuer; + authorityMetadata.endpointsFromNetwork = fromNetwork; + authorityMetadata.jwks_uri = updatedValues.jwks_uri; +} +function updateCloudDiscoveryMetadata(authorityMetadata, updatedValues, fromNetwork) { + authorityMetadata.aliases = updatedValues.aliases; + authorityMetadata.preferred_cache = updatedValues.preferred_cache; + authorityMetadata.preferred_network = updatedValues.preferred_network; + authorityMetadata.aliasesFromNetwork = fromNetwork; +} +/** + * Returns whether or not the data needs to be refreshed + */ +function isAuthorityMetadataExpired(metadata) { + return metadata.expiresAt <= nowSeconds(); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const redirectUriEmpty = "redirect_uri_empty"; +const claimsRequestParsingError = "claims_request_parsing_error"; +const authorityUriInsecure = "authority_uri_insecure"; +const urlParseError = "url_parse_error"; +const urlEmptyError = "empty_url_error"; +const emptyInputScopesError = "empty_input_scopes_error"; +const invalidPromptValue = "invalid_prompt_value"; +const invalidClaims = "invalid_claims"; +const tokenRequestEmpty = "token_request_empty"; +const logoutRequestEmpty = "logout_request_empty"; +const invalidCodeChallengeMethod = "invalid_code_challenge_method"; +const pkceParamsMissing = "pkce_params_missing"; +const invalidCloudDiscoveryMetadata = "invalid_cloud_discovery_metadata"; +const invalidAuthorityMetadata = "invalid_authority_metadata"; +const untrustedAuthority = "untrusted_authority"; +const missingSshJwk = "missing_ssh_jwk"; +const missingSshKid = "missing_ssh_kid"; +const missingNonceAuthenticationHeader = "missing_nonce_authentication_header"; +const invalidAuthenticationHeader = "invalid_authentication_header"; +const cannotSetOIDCOptions = "cannot_set_OIDCOptions"; +const cannotAllowNativeBroker = "cannot_allow_native_broker"; +const authorityMismatch = "authority_mismatch"; + +var ClientConfigurationErrorCodes = /*#__PURE__*/Object.freeze({ + __proto__: null, + authorityMismatch: authorityMismatch, + authorityUriInsecure: authorityUriInsecure, + cannotAllowNativeBroker: cannotAllowNativeBroker, + cannotSetOIDCOptions: cannotSetOIDCOptions, + claimsRequestParsingError: claimsRequestParsingError, + emptyInputScopesError: emptyInputScopesError, + invalidAuthenticationHeader: invalidAuthenticationHeader, + invalidAuthorityMetadata: invalidAuthorityMetadata, + invalidClaims: invalidClaims, + invalidCloudDiscoveryMetadata: invalidCloudDiscoveryMetadata, + invalidCodeChallengeMethod: invalidCodeChallengeMethod, + invalidPromptValue: invalidPromptValue, + logoutRequestEmpty: logoutRequestEmpty, + missingNonceAuthenticationHeader: missingNonceAuthenticationHeader, + missingSshJwk: missingSshJwk, + missingSshKid: missingSshKid, + pkceParamsMissing: pkceParamsMissing, + redirectUriEmpty: redirectUriEmpty, + tokenRequestEmpty: tokenRequestEmpty, + untrustedAuthority: untrustedAuthority, + urlEmptyError: urlEmptyError, + urlParseError: urlParseError +}); + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const ClientConfigurationErrorMessages = { + [redirectUriEmpty]: "A redirect URI is required for all calls, and none has been set.", + [claimsRequestParsingError]: "Could not parse the given claims request object.", + [authorityUriInsecure]: "Authority URIs must use https. Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options", + [urlParseError]: "URL could not be parsed into appropriate segments.", + [urlEmptyError]: "URL was empty or null.", + [emptyInputScopesError]: "Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.", + [invalidPromptValue]: "Please see here for valid configuration options: https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_common.html#commonauthorizationurlrequest", + [invalidClaims]: "Given claims parameter must be a stringified JSON object.", + [tokenRequestEmpty]: "Token request was empty and not found in cache.", + [logoutRequestEmpty]: "The logout request was null or undefined.", + [invalidCodeChallengeMethod]: 'code_challenge_method passed is invalid. Valid values are "plain" and "S256".', + [pkceParamsMissing]: "Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request", + [invalidCloudDiscoveryMetadata]: "Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields", + [invalidAuthorityMetadata]: "Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.", + [untrustedAuthority]: "The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.", + [missingSshJwk]: "Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.", + [missingSshKid]: "Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.", + [missingNonceAuthenticationHeader]: "Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.", + [invalidAuthenticationHeader]: "Invalid authentication header provided", + [cannotSetOIDCOptions]: "Cannot set OIDCOptions parameter. Please change the protocol mode to OIDC or use a non-Microsoft authority.", + [cannotAllowNativeBroker]: "Cannot set allowNativeBroker parameter to true when not in AAD protocol mode.", + [authorityMismatch]: "Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.", +}; +/** + * ClientConfigurationErrorMessage class containing string constants used by error codes and messages. + * @deprecated Use ClientConfigurationErrorCodes instead + */ +const ClientConfigurationErrorMessage = { + redirectUriNotSet: { + code: redirectUriEmpty, + desc: ClientConfigurationErrorMessages[redirectUriEmpty], + }, + claimsRequestParsingError: { + code: claimsRequestParsingError, + desc: ClientConfigurationErrorMessages[claimsRequestParsingError], + }, + authorityUriInsecure: { + code: authorityUriInsecure, + desc: ClientConfigurationErrorMessages[authorityUriInsecure], + }, + urlParseError: { + code: urlParseError, + desc: ClientConfigurationErrorMessages[urlParseError], + }, + urlEmptyError: { + code: urlEmptyError, + desc: ClientConfigurationErrorMessages[urlEmptyError], + }, + emptyScopesError: { + code: emptyInputScopesError, + desc: ClientConfigurationErrorMessages[emptyInputScopesError], + }, + invalidPrompt: { + code: invalidPromptValue, + desc: ClientConfigurationErrorMessages[invalidPromptValue], + }, + invalidClaimsRequest: { + code: invalidClaims, + desc: ClientConfigurationErrorMessages[invalidClaims], + }, + tokenRequestEmptyError: { + code: tokenRequestEmpty, + desc: ClientConfigurationErrorMessages[tokenRequestEmpty], + }, + logoutRequestEmptyError: { + code: logoutRequestEmpty, + desc: ClientConfigurationErrorMessages[logoutRequestEmpty], + }, + invalidCodeChallengeMethod: { + code: invalidCodeChallengeMethod, + desc: ClientConfigurationErrorMessages[invalidCodeChallengeMethod], + }, + invalidCodeChallengeParams: { + code: pkceParamsMissing, + desc: ClientConfigurationErrorMessages[pkceParamsMissing], + }, + invalidCloudDiscoveryMetadata: { + code: invalidCloudDiscoveryMetadata, + desc: ClientConfigurationErrorMessages[invalidCloudDiscoveryMetadata], + }, + invalidAuthorityMetadata: { + code: invalidAuthorityMetadata, + desc: ClientConfigurationErrorMessages[invalidAuthorityMetadata], + }, + untrustedAuthority: { + code: untrustedAuthority, + desc: ClientConfigurationErrorMessages[untrustedAuthority], + }, + missingSshJwk: { + code: missingSshJwk, + desc: ClientConfigurationErrorMessages[missingSshJwk], + }, + missingSshKid: { + code: missingSshKid, + desc: ClientConfigurationErrorMessages[missingSshKid], + }, + missingNonceAuthenticationHeader: { + code: missingNonceAuthenticationHeader, + desc: ClientConfigurationErrorMessages[missingNonceAuthenticationHeader], + }, + invalidAuthenticationHeader: { + code: invalidAuthenticationHeader, + desc: ClientConfigurationErrorMessages[invalidAuthenticationHeader], + }, + cannotSetOIDCOptions: { + code: cannotSetOIDCOptions, + desc: ClientConfigurationErrorMessages[cannotSetOIDCOptions], + }, + cannotAllowNativeBroker: { + code: cannotAllowNativeBroker, + desc: ClientConfigurationErrorMessages[cannotAllowNativeBroker], + }, + authorityMismatch: { + code: authorityMismatch, + desc: ClientConfigurationErrorMessages[authorityMismatch], + }, +}; +/** + * Error thrown when there is an error in configuration of the MSAL.js library. + */ +class ClientConfigurationError extends AuthError { + constructor(errorCode) { + super(errorCode, ClientConfigurationErrorMessages[errorCode]); + this.name = "ClientConfigurationError"; + Object.setPrototypeOf(this, ClientConfigurationError.prototype); + } +} +function createClientConfigurationError(errorCode) { + return new ClientConfigurationError(errorCode); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * @hidden + */ +class StringUtils { + /** + * Check if stringified object is empty + * @param strObj + */ + static isEmptyObj(strObj) { + if (strObj) { + try { + const obj = JSON.parse(strObj); + return Object.keys(obj).length === 0; + } + catch (e) { } + } + return true; + } + static startsWith(str, search) { + return str.indexOf(search) === 0; + } + static endsWith(str, search) { + return (str.length >= search.length && + str.lastIndexOf(search) === str.length - search.length); + } + /** + * Parses string into an object. + * + * @param query + */ + static queryStringToObject(query) { + const obj = {}; + const params = query.split("&"); + const decode = (s) => decodeURIComponent(s.replace(/\+/g, " ")); + params.forEach((pair) => { + if (pair.trim()) { + const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character + if (key && value) { + obj[decode(key)] = decode(value); + } + } + }); + return obj; + } + /** + * Trims entries in an array. + * + * @param arr + */ + static trimArrayEntries(arr) { + return arr.map((entry) => entry.trim()); + } + /** + * Removes empty strings from array + * @param arr + */ + static removeEmptyStringsFromArray(arr) { + return arr.filter((entry) => { + return !!entry; + }); + } + /** + * Attempts to parse a string into JSON + * @param str + */ + static jsonParseHelper(str) { + try { + return JSON.parse(str); + } + catch (e) { + return null; + } + } + /** + * Tests if a given string matches a given pattern, with support for wildcards and queries. + * @param pattern Wildcard pattern to string match. Supports "*" for wildcards and "?" for queries + * @param input String to match against + */ + static matchPattern(pattern, input) { + /** + * Wildcard support: https://stackoverflow.com/a/3117248/4888559 + * Queries: replaces "?" in string with escaped "\?" for regex test + */ + // eslint-disable-next-line security/detect-non-literal-regexp + const regex = new RegExp(pattern + .replace(/\\/g, "\\\\") + .replace(/\*/g, "[^ ]*") + .replace(/\?/g, "\\?")); + return regex.test(input); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * The ScopeSet class creates a set of scopes. Scopes are case-insensitive, unique values, so the Set object in JS makes + * the most sense to implement for this class. All scopes are trimmed and converted to lower case strings in intersection and union functions + * to ensure uniqueness of strings. + */ +class ScopeSet { + constructor(inputScopes) { + // Filter empty string and null/undefined array items + const scopeArr = inputScopes + ? StringUtils.trimArrayEntries([...inputScopes]) + : []; + const filteredInput = scopeArr + ? StringUtils.removeEmptyStringsFromArray(scopeArr) + : []; + // Validate and filter scopes (validate function throws if validation fails) + this.validateInputScopes(filteredInput); + this.scopes = new Set(); // Iterator in constructor not supported by IE11 + filteredInput.forEach((scope) => this.scopes.add(scope)); + } + /** + * Factory method to create ScopeSet from space-delimited string + * @param inputScopeString + * @param appClientId + * @param scopesRequired + */ + static fromString(inputScopeString) { + const scopeString = inputScopeString || Constants$1.EMPTY_STRING; + const inputScopes = scopeString.split(" "); + return new ScopeSet(inputScopes); + } + /** + * Creates the set of scopes to search for in cache lookups + * @param inputScopeString + * @returns + */ + static createSearchScopes(inputScopeString) { + const scopeSet = new ScopeSet(inputScopeString); + if (!scopeSet.containsOnlyOIDCScopes()) { + scopeSet.removeOIDCScopes(); + } + else { + scopeSet.removeScope(Constants$1.OFFLINE_ACCESS_SCOPE); + } + return scopeSet; + } + /** + * Used to validate the scopes input parameter requested by the developer. + * @param {Array} inputScopes - Developer requested permissions. Not all scopes are guaranteed to be included in the access token returned. + * @param {boolean} scopesRequired - Boolean indicating whether the scopes array is required or not + */ + validateInputScopes(inputScopes) { + // Check if scopes are required but not given or is an empty array + if (!inputScopes || inputScopes.length < 1) { + throw createClientConfigurationError(emptyInputScopesError); + } + } + /** + * Check if a given scope is present in this set of scopes. + * @param scope + */ + containsScope(scope) { + const lowerCaseScopes = this.printScopesLowerCase().split(" "); + const lowerCaseScopesSet = new ScopeSet(lowerCaseScopes); + // compare lowercase scopes + return scope + ? lowerCaseScopesSet.scopes.has(scope.toLowerCase()) + : false; + } + /** + * Check if a set of scopes is present in this set of scopes. + * @param scopeSet + */ + containsScopeSet(scopeSet) { + if (!scopeSet || scopeSet.scopes.size <= 0) { + return false; + } + return (this.scopes.size >= scopeSet.scopes.size && + scopeSet.asArray().every((scope) => this.containsScope(scope))); + } + /** + * Check if set of scopes contains only the defaults + */ + containsOnlyOIDCScopes() { + let defaultScopeCount = 0; + OIDC_SCOPES.forEach((defaultScope) => { + if (this.containsScope(defaultScope)) { + defaultScopeCount += 1; + } + }); + return this.scopes.size === defaultScopeCount; + } + /** + * Appends single scope if passed + * @param newScope + */ + appendScope(newScope) { + if (newScope) { + this.scopes.add(newScope.trim()); + } + } + /** + * Appends multiple scopes if passed + * @param newScopes + */ + appendScopes(newScopes) { + try { + newScopes.forEach((newScope) => this.appendScope(newScope)); + } + catch (e) { + throw createClientAuthError(cannotAppendScopeSet); + } + } + /** + * Removes element from set of scopes. + * @param scope + */ + removeScope(scope) { + if (!scope) { + throw createClientAuthError(cannotRemoveEmptyScope); + } + this.scopes.delete(scope.trim()); + } + /** + * Removes default scopes from set of scopes + * Primarily used to prevent cache misses if the default scopes are not returned from the server + */ + removeOIDCScopes() { + OIDC_SCOPES.forEach((defaultScope) => { + this.scopes.delete(defaultScope); + }); + } + /** + * Combines an array of scopes with the current set of scopes. + * @param otherScopes + */ + unionScopeSets(otherScopes) { + if (!otherScopes) { + throw createClientAuthError(emptyInputScopeSet); + } + const unionScopes = new Set(); // Iterator in constructor not supported in IE11 + otherScopes.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase())); + this.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase())); + return unionScopes; + } + /** + * Check if scopes intersect between this set and another. + * @param otherScopes + */ + intersectingScopeSets(otherScopes) { + if (!otherScopes) { + throw createClientAuthError(emptyInputScopeSet); + } + // Do not allow OIDC scopes to be the only intersecting scopes + if (!otherScopes.containsOnlyOIDCScopes()) { + otherScopes.removeOIDCScopes(); + } + const unionScopes = this.unionScopeSets(otherScopes); + const sizeOtherScopes = otherScopes.getScopeCount(); + const sizeThisScopes = this.getScopeCount(); + const sizeUnionScopes = unionScopes.size; + return sizeUnionScopes < sizeThisScopes + sizeOtherScopes; + } + /** + * Returns size of set of scopes. + */ + getScopeCount() { + return this.scopes.size; + } + /** + * Returns the scopes as an array of string values + */ + asArray() { + const array = []; + this.scopes.forEach((val) => array.push(val)); + return array; + } + /** + * Prints scopes into a space-delimited string + */ + printScopes() { + if (this.scopes) { + const scopeArr = this.asArray(); + return scopeArr.join(" "); + } + return Constants$1.EMPTY_STRING; + } + /** + * Prints scopes into a space-delimited lower-case string (used for caching) + */ + printScopesLowerCase() { + return this.printScopes().toLowerCase(); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Function to build a client info object from server clientInfo string + * @param rawClientInfo + * @param crypto + */ +function buildClientInfo(rawClientInfo, base64Decode) { + if (!rawClientInfo) { + throw createClientAuthError(clientInfoEmptyError); + } + try { + const decodedClientInfo = base64Decode(rawClientInfo); + return JSON.parse(decodedClientInfo); + } + catch (e) { + throw createClientAuthError(clientInfoDecodingError); + } +} +/** + * Function to build a client info object from cached homeAccountId string + * @param homeAccountId + */ +function buildClientInfoFromHomeAccountId(homeAccountId) { + if (!homeAccountId) { + throw createClientAuthError(clientInfoDecodingError); + } + const clientInfoParts = homeAccountId.split(Separators.CLIENT_INFO_SEPARATOR, 2); + return { + uid: clientInfoParts[0], + utid: clientInfoParts.length < 2 + ? Constants$1.EMPTY_STRING + : clientInfoParts[1], + }; +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Returns true if tenantId matches the utid portion of homeAccountId + * @param tenantId + * @param homeAccountId + * @returns + */ +function tenantIdMatchesHomeTenant(tenantId, homeAccountId) { + return (!!tenantId && + !!homeAccountId && + tenantId === homeAccountId.split(".")[1]); +} +/** + * Build tenant profile + * @param homeAccountId - Home account identifier for this account object + * @param localAccountId - Local account identifer for this account object + * @param tenantId - Full tenant or organizational id that this account belongs to + * @param idTokenClaims - Claims from the ID token + * @returns + */ +function buildTenantProfile(homeAccountId, localAccountId, tenantId, idTokenClaims) { + if (idTokenClaims) { + const { oid, sub, tid, name, tfp, acr } = idTokenClaims; + /** + * Since there is no way to determine if the authority is AAD or B2C, we exhaust all the possible claims that can serve as tenant ID with the following precedence: + * tid - TenantID claim that identifies the tenant that issued the token in AAD. Expected in all AAD ID tokens, not present in B2C ID Tokens. + * tfp - Trust Framework Policy claim that identifies the policy that was used to authenticate the user. Functions as tenant for B2C scenarios. + * acr - Authentication Context Class Reference claim used only with older B2C policies. Fallback in case tfp is not present, but likely won't be present anyway. + */ + const tenantId = tid || tfp || acr || ""; + return { + tenantId: tenantId, + localAccountId: oid || sub || "", + name: name, + isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId), + }; + } + else { + return { + tenantId, + localAccountId, + isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId), + }; + } +} +/** + * Replaces account info that varies by tenant profile sourced from the ID token claims passed in with the tenant-specific account info + * @param baseAccountInfo + * @param idTokenClaims + * @returns + */ +function updateAccountTenantProfileData(baseAccountInfo, tenantProfile, idTokenClaims, idTokenSecret) { + let updatedAccountInfo = baseAccountInfo; + // Tenant Profile overrides passed in account info + if (tenantProfile) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { isHomeTenant, ...tenantProfileOverride } = tenantProfile; + updatedAccountInfo = { ...baseAccountInfo, ...tenantProfileOverride }; + } + // ID token claims override passed in account info and tenant profile + if (idTokenClaims) { + // Ignore isHomeTenant, loginHint, and sid which are part of tenant profile but not base account info + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { isHomeTenant, ...claimsSourcedTenantProfile } = buildTenantProfile(baseAccountInfo.homeAccountId, baseAccountInfo.localAccountId, baseAccountInfo.tenantId, idTokenClaims); + updatedAccountInfo = { + ...updatedAccountInfo, + ...claimsSourcedTenantProfile, + idTokenClaims: idTokenClaims, + idToken: idTokenSecret, + }; + return updatedAccountInfo; + } + return updatedAccountInfo; +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Authority types supported by MSAL. + */ +const AuthorityType = { + Default: 0, + Adfs: 1, + Dsts: 2, + Ciam: 3, +}; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Gets tenantId from available ID token claims to set as credential realm with the following precedence: + * 1. tid - if the token is acquired from an Azure AD tenant tid will be present + * 2. tfp - if the token is acquired from a modern B2C tenant tfp should be present + * 3. acr - if the token is acquired from a legacy B2C tenant acr should be present + * Downcased to match the realm case-insensitive comparison requirements + * @param idTokenClaims + * @returns + */ +function getTenantIdFromIdTokenClaims(idTokenClaims) { + if (idTokenClaims) { + const tenantId = idTokenClaims.tid || idTokenClaims.tfp || idTokenClaims.acr; + return tenantId || null; + } + return null; +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Protocol modes supported by MSAL. + */ +const ProtocolMode = { + AAD: "AAD", + OIDC: "OIDC", +}; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs). + * + * Key : Value Schema + * + * Key: -- + * + * Value Schema: + * { + * homeAccountId: home account identifier for the auth scheme, + * environment: entity that issued the token, represented as a full host + * realm: Full tenant or organizational identifier that the account belongs to + * localAccountId: Original tenant-specific accountID, usually used for legacy cases + * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt + * authorityType: Accounts authority type as a string + * name: Full name for the account, including given name and family name, + * lastModificationTime: last time this entity was modified in the cache + * lastModificationApp: + * nativeAccountId: Account identifier on the native device + * tenantProfiles: Array of tenant profile objects for each tenant that the account has authenticated with in the browser + * } + * @internal + */ +class AccountEntity { + /** + * Generate Account Id key component as per the schema: - + */ + generateAccountId() { + const accountId = [this.homeAccountId, this.environment]; + return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase(); + } + /** + * Generate Account Cache Key as per the schema: -- + */ + generateAccountKey() { + return AccountEntity.generateAccountCacheKey({ + homeAccountId: this.homeAccountId, + environment: this.environment, + tenantId: this.realm, + username: this.username, + localAccountId: this.localAccountId, + }); + } + /** + * Returns the AccountInfo interface for this account. + */ + getAccountInfo() { + return { + homeAccountId: this.homeAccountId, + environment: this.environment, + tenantId: this.realm, + username: this.username, + localAccountId: this.localAccountId, + name: this.name, + nativeAccountId: this.nativeAccountId, + authorityType: this.authorityType, + // Deserialize tenant profiles array into a Map + tenantProfiles: new Map((this.tenantProfiles || []).map((tenantProfile) => { + return [tenantProfile.tenantId, tenantProfile]; + })), + }; + } + /** + * Returns true if the account entity is in single tenant format (outdated), false otherwise + */ + isSingleTenant() { + return !this.tenantProfiles; + } + /** + * Generates account key from interface + * @param accountInterface + */ + static generateAccountCacheKey(accountInterface) { + const homeTenantId = accountInterface.homeAccountId.split(".")[1]; + const accountKey = [ + accountInterface.homeAccountId, + accountInterface.environment || "", + homeTenantId || accountInterface.tenantId || "", + ]; + return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase(); + } + /** + * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD. + * @param accountDetails + */ + static createAccount(accountDetails, authority, base64Decode) { + const account = new AccountEntity(); + if (authority.authorityType === AuthorityType.Adfs) { + account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE; + } + else if (authority.protocolMode === ProtocolMode.AAD) { + account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE; + } + else { + account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE; + } + let clientInfo; + if (accountDetails.clientInfo && base64Decode) { + clientInfo = buildClientInfo(accountDetails.clientInfo, base64Decode); + } + account.clientInfo = accountDetails.clientInfo; + account.homeAccountId = accountDetails.homeAccountId; + account.nativeAccountId = accountDetails.nativeAccountId; + const env = accountDetails.environment || + (authority && authority.getPreferredCache()); + if (!env) { + throw createClientAuthError(invalidCacheEnvironment); + } + account.environment = env; + // non AAD scenarios can have empty realm + account.realm = + clientInfo?.utid || + getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) || + ""; + // How do you account for MSA CID here? + account.localAccountId = + clientInfo?.uid || + accountDetails.idTokenClaims?.oid || + accountDetails.idTokenClaims?.sub || + ""; + /* + * In B2C scenarios the emails claim is used instead of preferred_username and it is an array. + * In most cases it will contain a single email. This field should not be relied upon if a custom + * policy is configured to return more than 1 email. + */ + const preferredUsername = accountDetails.idTokenClaims?.preferred_username || + accountDetails.idTokenClaims?.upn; + const email = accountDetails.idTokenClaims?.emails + ? accountDetails.idTokenClaims.emails[0] + : null; + account.username = preferredUsername || email || ""; + account.name = accountDetails.idTokenClaims?.name || ""; + account.cloudGraphHostName = accountDetails.cloudGraphHostName; + account.msGraphHost = accountDetails.msGraphHost; + if (accountDetails.tenantProfiles) { + account.tenantProfiles = accountDetails.tenantProfiles; + } + else { + const tenantProfile = buildTenantProfile(accountDetails.homeAccountId, account.localAccountId, account.realm, accountDetails.idTokenClaims); + account.tenantProfiles = [tenantProfile]; + } + return account; + } + /** + * Creates an AccountEntity object from AccountInfo + * @param accountInfo + * @param cloudGraphHostName + * @param msGraphHost + * @returns + */ + static createFromAccountInfo(accountInfo, cloudGraphHostName, msGraphHost) { + const account = new AccountEntity(); + account.authorityType = + accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE; + account.homeAccountId = accountInfo.homeAccountId; + account.localAccountId = accountInfo.localAccountId; + account.nativeAccountId = accountInfo.nativeAccountId; + account.realm = accountInfo.tenantId; + account.environment = accountInfo.environment; + account.username = accountInfo.username; + account.name = accountInfo.name; + account.cloudGraphHostName = cloudGraphHostName; + account.msGraphHost = msGraphHost; + // Serialize tenant profiles map into an array + account.tenantProfiles = Array.from(accountInfo.tenantProfiles?.values() || []); + return account; + } + /** + * Generate HomeAccountId from server response + * @param serverClientInfo + * @param authType + */ + static generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, idTokenClaims) { + // since ADFS/DSTS do not have tid and does not set client_info + if (!(authType === AuthorityType.Adfs || + authType === AuthorityType.Dsts)) { + // for cases where there is clientInfo + if (serverClientInfo) { + try { + const clientInfo = buildClientInfo(serverClientInfo, cryptoObj.base64Decode); + if (clientInfo.uid && clientInfo.utid) { + return `${clientInfo.uid}.${clientInfo.utid}`; + } + } + catch (e) { } + } + logger.warning("No client info in response"); + } + // default to "sub" claim + return idTokenClaims?.sub || ""; + } + /** + * Validates an entity: checks for all expected params + * @param entity + */ + static isAccountEntity(entity) { + if (!entity) { + return false; + } + return (entity.hasOwnProperty("homeAccountId") && + entity.hasOwnProperty("environment") && + entity.hasOwnProperty("realm") && + entity.hasOwnProperty("localAccountId") && + entity.hasOwnProperty("username") && + entity.hasOwnProperty("authorityType")); + } + /** + * Helper function to determine whether 2 accountInfo objects represent the same account + * @param accountA + * @param accountB + * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality + */ + static accountInfoIsEqual(accountA, accountB, compareClaims) { + if (!accountA || !accountB) { + return false; + } + let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false + if (compareClaims) { + const accountAClaims = (accountA.idTokenClaims || + {}); + const accountBClaims = (accountB.idTokenClaims || + {}); + // issued at timestamp and nonce are expected to change each time a new id token is acquired + claimsMatch = + accountAClaims.iat === accountBClaims.iat && + accountAClaims.nonce === accountBClaims.nonce; + } + return (accountA.homeAccountId === accountB.homeAccountId && + accountA.localAccountId === accountB.localAccountId && + accountA.username === accountB.username && + accountA.tenantId === accountB.tenantId && + accountA.environment === accountB.environment && + accountA.nativeAccountId === accountB.nativeAccountId && + claimsMatch); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Parses hash string from given string. Returns empty string if no hash symbol is found. + * @param hashString + */ +function stripLeadingHashOrQuery(responseString) { + if (responseString.startsWith("#/")) { + return responseString.substring(2); + } + else if (responseString.startsWith("#") || + responseString.startsWith("?")) { + return responseString.substring(1); + } + return responseString; +} +/** + * Returns URL hash as server auth code response object. + */ +function getDeserializedResponse(responseString) { + // Check if given hash is empty + if (!responseString || responseString.indexOf("=") < 0) { + return null; + } + try { + // Strip the # or ? symbol if present + const normalizedResponse = stripLeadingHashOrQuery(responseString); + // If # symbol was not present, above will return empty string, so give original hash value + const deserializedHash = Object.fromEntries(new URLSearchParams(normalizedResponse)); + // Check for known response properties + if (deserializedHash.code || + deserializedHash.error || + deserializedHash.error_description || + deserializedHash.state) { + return deserializedHash; + } + } + catch (e) { + throw createClientAuthError(hashNotDeserialized); + } + return null; +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Url object class which can perform various transformations on url strings. + */ +class UrlString { + get urlString() { + return this._urlString; + } + constructor(url) { + this._urlString = url; + if (!this._urlString) { + // Throws error if url is empty + throw createClientConfigurationError(urlEmptyError); + } + if (!url.includes("#")) { + this._urlString = UrlString.canonicalizeUri(url); + } + } + /** + * Ensure urls are lower case and end with a / character. + * @param url + */ + static canonicalizeUri(url) { + if (url) { + let lowerCaseUrl = url.toLowerCase(); + if (StringUtils.endsWith(lowerCaseUrl, "?")) { + lowerCaseUrl = lowerCaseUrl.slice(0, -1); + } + else if (StringUtils.endsWith(lowerCaseUrl, "?/")) { + lowerCaseUrl = lowerCaseUrl.slice(0, -2); + } + if (!StringUtils.endsWith(lowerCaseUrl, "/")) { + lowerCaseUrl += "/"; + } + return lowerCaseUrl; + } + return url; + } + /** + * Throws if urlString passed is not a valid authority URI string. + */ + validateAsUri() { + // Attempts to parse url for uri components + let components; + try { + components = this.getUrlComponents(); + } + catch (e) { + throw createClientConfigurationError(urlParseError); + } + // Throw error if URI or path segments are not parseable. + if (!components.HostNameAndPort || !components.PathSegments) { + throw createClientConfigurationError(urlParseError); + } + // Throw error if uri is insecure. + if (!components.Protocol || + components.Protocol.toLowerCase() !== "https:") { + throw createClientConfigurationError(authorityUriInsecure); + } + } + /** + * Given a url and a query string return the url with provided query string appended + * @param url + * @param queryString + */ + static appendQueryString(url, queryString) { + if (!queryString) { + return url; + } + return url.indexOf("?") < 0 + ? `${url}?${queryString}` + : `${url}&${queryString}`; + } + /** + * Returns a url with the hash removed + * @param url + */ + static removeHashFromUrl(url) { + return UrlString.canonicalizeUri(url.split("#")[0]); + } + /** + * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d + * @param href The url + * @param tenantId The tenant id to replace + */ + replaceTenantPath(tenantId) { + const urlObject = this.getUrlComponents(); + const pathArray = urlObject.PathSegments; + if (tenantId && + pathArray.length !== 0 && + (pathArray[0] === AADAuthorityConstants.COMMON || + pathArray[0] === AADAuthorityConstants.ORGANIZATIONS)) { + pathArray[0] = tenantId; + } + return UrlString.constructAuthorityUriFromObject(urlObject); + } + /** + * Parses out the components from a url string. + * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url. + */ + getUrlComponents() { + // https://gist.github.com/curtisz/11139b2cfcaef4a261e0 + const regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); + // If url string does not match regEx, we throw an error + const match = this.urlString.match(regEx); + if (!match) { + throw createClientConfigurationError(urlParseError); + } + // Url component object + const urlComponents = { + Protocol: match[1], + HostNameAndPort: match[4], + AbsolutePath: match[5], + QueryString: match[7], + }; + let pathSegments = urlComponents.AbsolutePath.split("/"); + pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements + urlComponents.PathSegments = pathSegments; + if (urlComponents.QueryString && + urlComponents.QueryString.endsWith("/")) { + urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1); + } + return urlComponents; + } + static getDomainFromUrl(url) { + const regEx = RegExp("^([^:/?#]+://)?([^/?#]*)"); + const match = url.match(regEx); + if (!match) { + throw createClientConfigurationError(urlParseError); + } + return match[2]; + } + static getAbsoluteUrl(relativeUrl, baseUrl) { + if (relativeUrl[0] === Constants$1.FORWARD_SLASH) { + const url = new UrlString(baseUrl); + const baseComponents = url.getUrlComponents(); + return (baseComponents.Protocol + + "//" + + baseComponents.HostNameAndPort + + relativeUrl); + } + return relativeUrl; + } + static constructAuthorityUriFromObject(urlObject) { + return new UrlString(urlObject.Protocol + + "//" + + urlObject.HostNameAndPort + + "/" + + urlObject.PathSegments.join("/")); + } + /** + * Check if the hash of the URL string contains known properties + * @deprecated This API will be removed in a future version + */ + static hashContainsKnownProperties(response) { + return !!getDeserializedResponse(response); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const rawMetdataJSON = { + endpointMetadata: { + "login.microsoftonline.com": { + token_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token", + jwks_uri: "https://login.microsoftonline.com/{tenantid}/discovery/v2.0/keys", + issuer: "https://login.microsoftonline.com/{tenantid}/v2.0", + authorization_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/authorize", + end_session_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/logout", + }, + "login.chinacloudapi.cn": { + token_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/token", + jwks_uri: "https://login.chinacloudapi.cn/{tenantid}/discovery/v2.0/keys", + issuer: "https://login.partner.microsoftonline.cn/{tenantid}/v2.0", + authorization_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/authorize", + end_session_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/logout", + }, + "login.microsoftonline.us": { + token_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/token", + jwks_uri: "https://login.microsoftonline.us/{tenantid}/discovery/v2.0/keys", + issuer: "https://login.microsoftonline.us/{tenantid}/v2.0", + authorization_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/authorize", + end_session_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/logout", + }, + }, + instanceDiscoveryMetadata: { + tenant_discovery_endpoint: "https://{canonicalAuthority}/v2.0/.well-known/openid-configuration", + metadata: [ + { + preferred_network: "login.microsoftonline.com", + preferred_cache: "login.windows.net", + aliases: [ + "login.microsoftonline.com", + "login.windows.net", + "login.microsoft.com", + "sts.windows.net", + ], + }, + { + preferred_network: "login.partner.microsoftonline.cn", + preferred_cache: "login.partner.microsoftonline.cn", + aliases: [ + "login.partner.microsoftonline.cn", + "login.chinacloudapi.cn", + ], + }, + { + preferred_network: "login.microsoftonline.de", + preferred_cache: "login.microsoftonline.de", + aliases: ["login.microsoftonline.de"], + }, + { + preferred_network: "login.microsoftonline.us", + preferred_cache: "login.microsoftonline.us", + aliases: [ + "login.microsoftonline.us", + "login.usgovcloudapi.net", + ], + }, + { + preferred_network: "login-us.microsoftonline.com", + preferred_cache: "login-us.microsoftonline.com", + aliases: ["login-us.microsoftonline.com"], + }, + ], + }, +}; +const EndpointMetadata = rawMetdataJSON.endpointMetadata; +const InstanceDiscoveryMetadata = rawMetdataJSON.instanceDiscoveryMetadata; +const InstanceDiscoveryMetadataAliases = new Set(); +InstanceDiscoveryMetadata.metadata.forEach((metadataEntry) => { + metadataEntry.aliases.forEach((alias) => { + InstanceDiscoveryMetadataAliases.add(alias); + }); +}); +/** + * Attempts to get an aliases array from the static authority metadata sources based on the canonical authority host + * @param staticAuthorityOptions + * @param logger + * @returns + */ +function getAliasesFromStaticSources(staticAuthorityOptions, logger) { + let staticAliases; + const canonicalAuthority = staticAuthorityOptions.canonicalAuthority; + if (canonicalAuthority) { + const authorityHost = new UrlString(canonicalAuthority).getUrlComponents().HostNameAndPort; + staticAliases = + getAliasesFromMetadata(authorityHost, staticAuthorityOptions.cloudDiscoveryMetadata?.metadata, AuthorityMetadataSource.CONFIG, logger) || + getAliasesFromMetadata(authorityHost, InstanceDiscoveryMetadata.metadata, AuthorityMetadataSource.HARDCODED_VALUES, logger) || + staticAuthorityOptions.knownAuthorities; + } + return staticAliases || []; +} +/** + * Returns aliases for from the raw cloud discovery metadata passed in + * @param authorityHost + * @param rawCloudDiscoveryMetadata + * @returns + */ +function getAliasesFromMetadata(authorityHost, cloudDiscoveryMetadata, source, logger) { + logger?.trace(`getAliasesFromMetadata called with source: ${source}`); + if (authorityHost && cloudDiscoveryMetadata) { + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(cloudDiscoveryMetadata, authorityHost); + if (metadata) { + logger?.trace(`getAliasesFromMetadata: found cloud discovery metadata in ${source}, returning aliases`); + return metadata.aliases; + } + else { + logger?.trace(`getAliasesFromMetadata: did not find cloud discovery metadata in ${source}`); + } + } + return null; +} +/** + * Get cloud discovery metadata for common authorities + */ +function getCloudDiscoveryMetadataFromHardcodedValues(authorityHost) { + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(InstanceDiscoveryMetadata.metadata, authorityHost); + return metadata; +} +/** + * Searches instance discovery network response for the entry that contains the host in the aliases list + * @param response + * @param authority + */ +function getCloudDiscoveryMetadataFromNetworkResponse(response, authorityHost) { + for (let i = 0; i < response.length; i++) { + const metadata = response[i]; + if (metadata.aliases.includes(authorityHost)) { + return metadata; + } + } + return null; +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const cacheQuotaExceededErrorCode = "cache_quota_exceeded"; +const cacheUnknownErrorCode = "cache_error_unknown"; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const CacheErrorMessages = { + [cacheQuotaExceededErrorCode]: "Exceeded cache storage capacity.", + [cacheUnknownErrorCode]: "Unexpected error occurred when using cache storage.", +}; +/** + * Error thrown when there is an error with the cache + */ +class CacheError extends Error { + constructor(errorCode, errorMessage) { + const message = errorMessage || + (CacheErrorMessages[errorCode] + ? CacheErrorMessages[errorCode] + : CacheErrorMessages[cacheUnknownErrorCode]); + super(`${errorCode}: ${message}`); + Object.setPrototypeOf(this, CacheError.prototype); + this.name = "CacheError"; + this.errorCode = errorCode; + this.errorMessage = message; + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens. + * @internal + */ +class CacheManager { + constructor(clientId, cryptoImpl, logger, staticAuthorityOptions) { + this.clientId = clientId; + this.cryptoImpl = cryptoImpl; + this.commonLogger = logger.clone(name$1, version$1); + this.staticAuthorityOptions = staticAuthorityOptions; + } + /** + * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned. + * @param accountFilter - (Optional) filter to narrow down the accounts returned + * @returns Array of AccountInfo objects in cache + */ + getAllAccounts(accountFilter) { + return this.buildTenantProfiles(this.getAccountsFilteredBy(accountFilter || {}), accountFilter); + } + /** + * Gets first tenanted AccountInfo object found based on provided filters + */ + getAccountInfoFilteredBy(accountFilter) { + const allAccounts = this.getAllAccounts(accountFilter); + if (allAccounts.length > 1) { + // If one or more accounts are found, prioritize accounts that have an ID token + const sortedAccounts = allAccounts.sort((account) => { + return account.idTokenClaims ? -1 : 1; + }); + return sortedAccounts[0]; + } + else if (allAccounts.length === 1) { + // If only one account is found, return it regardless of whether a matching ID token was found + return allAccounts[0]; + } + else { + return null; + } + } + /** + * Returns a single matching + * @param accountFilter + * @returns + */ + getBaseAccountInfo(accountFilter) { + const accountEntities = this.getAccountsFilteredBy(accountFilter); + if (accountEntities.length > 0) { + return accountEntities[0].getAccountInfo(); + } + else { + return null; + } + } + /** + * Matches filtered account entities with cached ID tokens that match the tenant profile-specific account filters + * and builds the account info objects from the matching ID token's claims + * @param cachedAccounts + * @param accountFilter + * @returns Array of AccountInfo objects that match account and tenant profile filters + */ + buildTenantProfiles(cachedAccounts, accountFilter) { + return cachedAccounts.flatMap((accountEntity) => { + return this.getTenantProfilesFromAccountEntity(accountEntity, accountFilter?.tenantId, accountFilter); + }); + } + getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, tenantProfileFilter) { + let tenantedAccountInfo = null; + let idTokenClaims; + if (tenantProfileFilter) { + if (!this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter)) { + return null; + } + } + const idToken = this.getIdToken(accountInfo, tokenKeys, tenantProfile.tenantId); + if (idToken) { + idTokenClaims = extractTokenClaims(idToken.secret, this.cryptoImpl.base64Decode); + if (!this.idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter)) { + // ID token sourced claims don't match so this tenant profile is not a match + return null; + } + } + // Expand tenant profile into account info based on matching tenant profile and if available matching ID token claims + tenantedAccountInfo = updateAccountTenantProfileData(accountInfo, tenantProfile, idTokenClaims, idToken?.secret); + return tenantedAccountInfo; + } + getTenantProfilesFromAccountEntity(accountEntity, targetTenantId, tenantProfileFilter) { + const accountInfo = accountEntity.getAccountInfo(); + let searchTenantProfiles = accountInfo.tenantProfiles || new Map(); + const tokenKeys = this.getTokenKeys(); + // If a tenant ID was provided, only return the tenant profile for that tenant ID if it exists + if (targetTenantId) { + const tenantProfile = searchTenantProfiles.get(targetTenantId); + if (tenantProfile) { + // Reduce search field to just this tenant profile + searchTenantProfiles = new Map([ + [targetTenantId, tenantProfile], + ]); + } + else { + // No tenant profile for search tenant ID, return empty array + return []; + } + } + const matchingTenantProfiles = []; + searchTenantProfiles.forEach((tenantProfile) => { + const tenantedAccountInfo = this.getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, tenantProfileFilter); + if (tenantedAccountInfo) { + matchingTenantProfiles.push(tenantedAccountInfo); + } + }); + return matchingTenantProfiles; + } + tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter) { + if (!!tenantProfileFilter.localAccountId && + !this.matchLocalAccountIdFromTenantProfile(tenantProfile, tenantProfileFilter.localAccountId)) { + return false; + } + if (!!tenantProfileFilter.name && + !(tenantProfile.name === tenantProfileFilter.name)) { + return false; + } + if (tenantProfileFilter.isHomeTenant !== undefined && + !(tenantProfile.isHomeTenant === tenantProfileFilter.isHomeTenant)) { + return false; + } + return true; + } + idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter) { + // Tenant Profile filtering + if (tenantProfileFilter) { + if (!!tenantProfileFilter.localAccountId && + !this.matchLocalAccountIdFromTokenClaims(idTokenClaims, tenantProfileFilter.localAccountId)) { + return false; + } + if (!!tenantProfileFilter.loginHint && + !this.matchLoginHintFromTokenClaims(idTokenClaims, tenantProfileFilter.loginHint)) { + return false; + } + if (!!tenantProfileFilter.username && + !this.matchUsername(idTokenClaims.preferred_username, tenantProfileFilter.username)) { + return false; + } + if (!!tenantProfileFilter.name && + !this.matchName(idTokenClaims, tenantProfileFilter.name)) { + return false; + } + if (!!tenantProfileFilter.sid && + !this.matchSid(idTokenClaims, tenantProfileFilter.sid)) { + return false; + } + } + return true; + } + /** + * saves a cache record + * @param cacheRecord {CacheRecord} + * @param storeInCache {?StoreInCache} + * @param correlationId {?string} correlation id + */ + async saveCacheRecord(cacheRecord, storeInCache, correlationId) { + if (!cacheRecord) { + throw createClientAuthError(invalidCacheRecord); + } + try { + if (!!cacheRecord.account) { + this.setAccount(cacheRecord.account); + } + if (!!cacheRecord.idToken && storeInCache?.idToken !== false) { + this.setIdTokenCredential(cacheRecord.idToken); + } + if (!!cacheRecord.accessToken && + storeInCache?.accessToken !== false) { + await this.saveAccessToken(cacheRecord.accessToken); + } + if (!!cacheRecord.refreshToken && + storeInCache?.refreshToken !== false) { + this.setRefreshTokenCredential(cacheRecord.refreshToken); + } + if (!!cacheRecord.appMetadata) { + this.setAppMetadata(cacheRecord.appMetadata); + } + } + catch (e) { + this.commonLogger?.error(`CacheManager.saveCacheRecord: failed`); + if (e instanceof Error) { + this.commonLogger?.errorPii(`CacheManager.saveCacheRecord: ${e.message}`, correlationId); + if (e.name === "QuotaExceededError" || + e.name === "NS_ERROR_DOM_QUOTA_REACHED" || + e.message.includes("exceeded the quota")) { + this.commonLogger?.error(`CacheManager.saveCacheRecord: exceeded storage quota`, correlationId); + throw new CacheError(cacheQuotaExceededErrorCode); + } + else { + throw new CacheError(e.name, e.message); + } + } + else { + this.commonLogger?.errorPii(`CacheManager.saveCacheRecord: ${e}`, correlationId); + throw new CacheError(cacheUnknownErrorCode); + } + } + } + /** + * saves access token credential + * @param credential + */ + async saveAccessToken(credential) { + const accessTokenFilter = { + clientId: credential.clientId, + credentialType: credential.credentialType, + environment: credential.environment, + homeAccountId: credential.homeAccountId, + realm: credential.realm, + tokenType: credential.tokenType, + requestedClaimsHash: credential.requestedClaimsHash, + }; + const tokenKeys = this.getTokenKeys(); + const currentScopes = ScopeSet.fromString(credential.target); + const removedAccessTokens = []; + tokenKeys.accessToken.forEach((key) => { + if (!this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)) { + return; + } + const tokenEntity = this.getAccessTokenCredential(key); + if (tokenEntity && + this.credentialMatchesFilter(tokenEntity, accessTokenFilter)) { + const tokenScopeSet = ScopeSet.fromString(tokenEntity.target); + if (tokenScopeSet.intersectingScopeSets(currentScopes)) { + removedAccessTokens.push(this.removeAccessToken(key)); + } + } + }); + await Promise.all(removedAccessTokens); + this.setAccessTokenCredential(credential); + } + /** + * Retrieve account entities matching all provided tenant-agnostic filters; if no filter is set, get all account entities in the cache + * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared + * @param accountFilter - An object containing Account properties to filter by + */ + getAccountsFilteredBy(accountFilter) { + const allAccountKeys = this.getAccountKeys(); + const matchingAccounts = []; + allAccountKeys.forEach((cacheKey) => { + if (!this.isAccountKey(cacheKey, accountFilter.homeAccountId)) { + // Don't parse value if the key doesn't match the account filters + return; + } + const entity = this.getAccount(cacheKey, this.commonLogger); + // Match base account fields + if (!entity) { + return; + } + if (!!accountFilter.homeAccountId && + !this.matchHomeAccountId(entity, accountFilter.homeAccountId)) { + return; + } + if (!!accountFilter.username && + !this.matchUsername(entity.username, accountFilter.username)) { + return; + } + if (!!accountFilter.environment && + !this.matchEnvironment(entity, accountFilter.environment)) { + return; + } + if (!!accountFilter.realm && + !this.matchRealm(entity, accountFilter.realm)) { + return; + } + if (!!accountFilter.nativeAccountId && + !this.matchNativeAccountId(entity, accountFilter.nativeAccountId)) { + return; + } + if (!!accountFilter.authorityType && + !this.matchAuthorityType(entity, accountFilter.authorityType)) { + return; + } + // If at least one tenant profile matches the tenant profile filter, add the account to the list of matching accounts + const tenantProfileFilter = { + localAccountId: accountFilter?.localAccountId, + name: accountFilter?.name, + }; + const matchingTenantProfiles = entity.tenantProfiles?.filter((tenantProfile) => { + return this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter); + }); + if (matchingTenantProfiles && matchingTenantProfiles.length === 0) { + // No tenant profile for this account matches filter, don't add to list of matching accounts + return; + } + matchingAccounts.push(entity); + }); + return matchingAccounts; + } + /** + * Returns true if the given key matches our account key schema. Also matches homeAccountId and/or tenantId if provided + * @param key + * @param homeAccountId + * @param tenantId + * @returns + */ + isAccountKey(key, homeAccountId, tenantId) { + if (key.split(Separators.CACHE_KEY_SEPARATOR).length < 3) { + // Account cache keys contain 3 items separated by '-' (each item may also contain '-') + return false; + } + if (homeAccountId && + !key.toLowerCase().includes(homeAccountId.toLowerCase())) { + return false; + } + if (tenantId && !key.toLowerCase().includes(tenantId.toLowerCase())) { + return false; + } + // Do not check environment as aliasing can cause false negatives + return true; + } + /** + * Returns true if the given key matches our credential key schema. + * @param key + */ + isCredentialKey(key) { + if (key.split(Separators.CACHE_KEY_SEPARATOR).length < 6) { + // Credential cache keys contain 6 items separated by '-' (each item may also contain '-') + return false; + } + const lowerCaseKey = key.toLowerCase(); + // Credential keys must indicate what credential type they represent + if (lowerCaseKey.indexOf(CredentialType.ID_TOKEN.toLowerCase()) === + -1 && + lowerCaseKey.indexOf(CredentialType.ACCESS_TOKEN.toLowerCase()) === + -1 && + lowerCaseKey.indexOf(CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) === -1 && + lowerCaseKey.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) === + -1) { + return false; + } + if (lowerCaseKey.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) > + -1) { + // Refresh tokens must contain the client id or family id + const clientIdValidation = `${CredentialType.REFRESH_TOKEN}${Separators.CACHE_KEY_SEPARATOR}${this.clientId}${Separators.CACHE_KEY_SEPARATOR}`; + const familyIdValidation = `${CredentialType.REFRESH_TOKEN}${Separators.CACHE_KEY_SEPARATOR}${THE_FAMILY_ID}${Separators.CACHE_KEY_SEPARATOR}`; + if (lowerCaseKey.indexOf(clientIdValidation.toLowerCase()) === -1 && + lowerCaseKey.indexOf(familyIdValidation.toLowerCase()) === -1) { + return false; + } + } + else if (lowerCaseKey.indexOf(this.clientId.toLowerCase()) === -1) { + // Tokens must contain the clientId + return false; + } + return true; + } + /** + * Returns whether or not the given credential entity matches the filter + * @param entity + * @param filter + * @returns + */ + credentialMatchesFilter(entity, filter) { + if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) { + return false; + } + if (!!filter.userAssertionHash && + !this.matchUserAssertionHash(entity, filter.userAssertionHash)) { + return false; + } + /* + * homeAccountId can be undefined, and we want to filter out cached items that have a homeAccountId of "" + * because we don't want a client_credential request to return a cached token that has a homeAccountId + */ + if (typeof filter.homeAccountId === "string" && + !this.matchHomeAccountId(entity, filter.homeAccountId)) { + return false; + } + if (!!filter.environment && + !this.matchEnvironment(entity, filter.environment)) { + return false; + } + if (!!filter.realm && !this.matchRealm(entity, filter.realm)) { + return false; + } + if (!!filter.credentialType && + !this.matchCredentialType(entity, filter.credentialType)) { + return false; + } + if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) { + return false; + } + /* + * idTokens do not have "target", target specific refreshTokens do exist for some types of authentication + * Resource specific refresh tokens case will be added when the support is deemed necessary + */ + if (!!filter.target && !this.matchTarget(entity, filter.target)) { + return false; + } + // If request OR cached entity has requested Claims Hash, check if they match + if (filter.requestedClaimsHash || entity.requestedClaimsHash) { + // Don't match if either is undefined or they are different + if (entity.requestedClaimsHash !== filter.requestedClaimsHash) { + return false; + } + } + // Access Token with Auth Scheme specific matching + if (entity.credentialType === + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME) { + if (!!filter.tokenType && + !this.matchTokenType(entity, filter.tokenType)) { + return false; + } + // KeyId (sshKid) in request must match cached SSH certificate keyId because SSH cert is bound to a specific key + if (filter.tokenType === AuthenticationScheme.SSH) { + if (filter.keyId && !this.matchKeyId(entity, filter.keyId)) { + return false; + } + } + } + return true; + } + /** + * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata + * @param filter + */ + getAppMetadataFilteredBy(filter) { + const allCacheKeys = this.getKeys(); + const matchingAppMetadata = {}; + allCacheKeys.forEach((cacheKey) => { + // don't parse any non-appMetadata type cache entities + if (!this.isAppMetadata(cacheKey)) { + return; + } + // Attempt retrieval + const entity = this.getAppMetadata(cacheKey); + if (!entity) { + return; + } + if (!!filter.environment && + !this.matchEnvironment(entity, filter.environment)) { + return; + } + if (!!filter.clientId && + !this.matchClientId(entity, filter.clientId)) { + return; + } + matchingAppMetadata[cacheKey] = entity; + }); + return matchingAppMetadata; + } + /** + * retrieve authorityMetadata that contains a matching alias + * @param filter + */ + getAuthorityMetadataByAlias(host) { + const allCacheKeys = this.getAuthorityMetadataKeys(); + let matchedEntity = null; + allCacheKeys.forEach((cacheKey) => { + // don't parse any non-authorityMetadata type cache entities + if (!this.isAuthorityMetadata(cacheKey) || + cacheKey.indexOf(this.clientId) === -1) { + return; + } + // Attempt retrieval + const entity = this.getAuthorityMetadata(cacheKey); + if (!entity) { + return; + } + if (entity.aliases.indexOf(host) === -1) { + return; + } + matchedEntity = entity; + }); + return matchedEntity; + } + /** + * Removes all accounts and related tokens from cache. + */ + async removeAllAccounts() { + const allAccountKeys = this.getAccountKeys(); + const removedAccounts = []; + allAccountKeys.forEach((cacheKey) => { + removedAccounts.push(this.removeAccount(cacheKey)); + }); + await Promise.all(removedAccounts); + } + /** + * Removes the account and related tokens for a given account key + * @param account + */ + async removeAccount(accountKey) { + const account = this.getAccount(accountKey, this.commonLogger); + if (!account) { + return; + } + await this.removeAccountContext(account); + this.removeItem(accountKey); + } + /** + * Removes credentials associated with the provided account + * @param account + */ + async removeAccountContext(account) { + const allTokenKeys = this.getTokenKeys(); + const accountId = account.generateAccountId(); + const removedCredentials = []; + allTokenKeys.idToken.forEach((key) => { + if (key.indexOf(accountId) === 0) { + this.removeIdToken(key); + } + }); + allTokenKeys.accessToken.forEach((key) => { + if (key.indexOf(accountId) === 0) { + removedCredentials.push(this.removeAccessToken(key)); + } + }); + allTokenKeys.refreshToken.forEach((key) => { + if (key.indexOf(accountId) === 0) { + this.removeRefreshToken(key); + } + }); + await Promise.all(removedCredentials); + } + /** + * Migrates a single-tenant account and all it's associated alternate cross-tenant account objects in the + * cache into a condensed multi-tenant account object with tenant profiles. + * @param accountKey + * @param accountEntity + * @param logger + * @returns + */ + updateOutdatedCachedAccount(accountKey, accountEntity, logger) { + // Only update if account entity is defined and has no tenantProfiles object (is outdated) + if (accountEntity && accountEntity.isSingleTenant()) { + this.commonLogger?.verbose("updateOutdatedCachedAccount: Found a single-tenant (outdated) account entity in the cache, migrating to multi-tenant account entity"); + // Get keys of all accounts belonging to user + const matchingAccountKeys = this.getAccountKeys().filter((key) => { + return key.startsWith(accountEntity.homeAccountId); + }); + // Get all account entities belonging to user + const accountsToMerge = []; + matchingAccountKeys.forEach((key) => { + const account = this.getCachedAccountEntity(key); + if (account) { + accountsToMerge.push(account); + } + }); + // Set base account to home account if available, any account if not + const baseAccount = accountsToMerge.find((account) => { + return tenantIdMatchesHomeTenant(account.realm, account.homeAccountId); + }) || accountsToMerge[0]; + // Populate tenant profiles built from each account entity belonging to the user + baseAccount.tenantProfiles = accountsToMerge.map((account) => { + return { + tenantId: account.realm, + localAccountId: account.localAccountId, + name: account.name, + isHomeTenant: tenantIdMatchesHomeTenant(account.realm, account.homeAccountId), + }; + }); + const updatedAccount = CacheManager.toObject(new AccountEntity(), { + ...baseAccount, + }); + const newAccountKey = updatedAccount.generateAccountKey(); + // Clear cache of legacy account objects that have been collpsed into tenant profiles + matchingAccountKeys.forEach((key) => { + if (key !== newAccountKey) { + this.removeOutdatedAccount(accountKey); + } + }); + // Cache updated account object + this.setAccount(updatedAccount); + logger?.verbose("Updated an outdated account entity in the cache"); + return updatedAccount; + } + // No update is necessary + return accountEntity; + } + /** + * returns a boolean if the given credential is removed + * @param credential + */ + async removeAccessToken(key) { + const credential = this.getAccessTokenCredential(key); + if (!credential) { + return; + } + // Remove Token Binding Key from key store for PoP Tokens Credentials + if (credential.credentialType.toLowerCase() === + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) { + if (credential.tokenType === AuthenticationScheme.POP) { + const accessTokenWithAuthSchemeEntity = credential; + const kid = accessTokenWithAuthSchemeEntity.keyId; + if (kid) { + try { + await this.cryptoImpl.removeTokenBindingKey(kid); + } + catch (error) { + throw createClientAuthError(bindingKeyNotRemoved); + } + } + } + } + return this.removeItem(key); + } + /** + * Removes all app metadata objects from cache. + */ + removeAppMetadata() { + const allCacheKeys = this.getKeys(); + allCacheKeys.forEach((cacheKey) => { + if (this.isAppMetadata(cacheKey)) { + this.removeItem(cacheKey); + } + }); + return true; + } + /** + * Retrieve AccountEntity from cache + * @param account + */ + readAccountFromCache(account) { + const accountKey = AccountEntity.generateAccountCacheKey(account); + return this.getAccount(accountKey, this.commonLogger); + } + /** + * Retrieve IdTokenEntity from cache + * @param account {AccountInfo} + * @param tokenKeys {?TokenKeys} + * @param targetRealm {?string} + * @param performanceClient {?IPerformanceClient} + * @param correlationId {?string} + */ + getIdToken(account, tokenKeys, targetRealm, performanceClient, correlationId) { + this.commonLogger.trace("CacheManager - getIdToken called"); + const idTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType: CredentialType.ID_TOKEN, + clientId: this.clientId, + realm: targetRealm, + }; + const idTokenMap = this.getIdTokensByFilter(idTokenFilter, tokenKeys); + const numIdTokens = idTokenMap.size; + if (numIdTokens < 1) { + this.commonLogger.info("CacheManager:getIdToken - No token found"); + return null; + } + else if (numIdTokens > 1) { + let tokensToBeRemoved = idTokenMap; + // Multiple tenant profiles and no tenant specified, pick home account + if (!targetRealm) { + const homeIdTokenMap = new Map(); + idTokenMap.forEach((idToken, key) => { + if (idToken.realm === account.tenantId) { + homeIdTokenMap.set(key, idToken); + } + }); + const numHomeIdTokens = homeIdTokenMap.size; + if (numHomeIdTokens < 1) { + this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result"); + return idTokenMap.values().next().value; + } + else if (numHomeIdTokens === 1) { + this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile"); + return homeIdTokenMap.values().next().value; + } + else { + // Multiple ID tokens for home tenant profile, remove all and return null + tokensToBeRemoved = homeIdTokenMap; + } + } + // Multiple tokens for a single tenant profile, remove all and return null + this.commonLogger.info("CacheManager:getIdToken - Multiple matching ID tokens found, clearing them"); + tokensToBeRemoved.forEach((idToken, key) => { + this.removeIdToken(key); + }); + if (performanceClient && correlationId) { + performanceClient.addFields({ multiMatchedID: idTokenMap.size }, correlationId); + } + return null; + } + this.commonLogger.info("CacheManager:getIdToken - Returning ID token"); + return idTokenMap.values().next().value; + } + /** + * Gets all idTokens matching the given filter + * @param filter + * @returns + */ + getIdTokensByFilter(filter, tokenKeys) { + const idTokenKeys = (tokenKeys && tokenKeys.idToken) || this.getTokenKeys().idToken; + const idTokens = new Map(); + idTokenKeys.forEach((key) => { + if (!this.idTokenKeyMatchesFilter(key, { + clientId: this.clientId, + ...filter, + })) { + return; + } + const idToken = this.getIdTokenCredential(key); + if (idToken && this.credentialMatchesFilter(idToken, filter)) { + idTokens.set(key, idToken); + } + }); + return idTokens; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + * @returns + */ + idTokenKeyMatchesFilter(inputKey, filter) { + const key = inputKey.toLowerCase(); + if (filter.clientId && + key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && + key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + return true; + } + /** + * Removes idToken from the cache + * @param key + */ + removeIdToken(key) { + this.removeItem(key); + } + /** + * Removes refresh token from the cache + * @param key + */ + removeRefreshToken(key) { + this.removeItem(key); + } + /** + * Retrieve AccessTokenEntity from cache + * @param account {AccountInfo} + * @param request {BaseAuthRequest} + * @param tokenKeys {?TokenKeys} + * @param performanceClient {?IPerformanceClient} + * @param correlationId {?string} + */ + getAccessToken(account, request, tokenKeys, targetRealm, performanceClient, correlationId) { + this.commonLogger.trace("CacheManager - getAccessToken called"); + const scopes = ScopeSet.createSearchScopes(request.scopes); + const authScheme = request.authenticationScheme || AuthenticationScheme.BEARER; + /* + * Distinguish between Bearer and PoP/SSH token cache types + * Cast to lowercase to handle "bearer" from ADFS + */ + const credentialType = authScheme && + authScheme.toLowerCase() !== + AuthenticationScheme.BEARER.toLowerCase() + ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME + : CredentialType.ACCESS_TOKEN; + const accessTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType: credentialType, + clientId: this.clientId, + realm: targetRealm || account.tenantId, + target: scopes, + tokenType: authScheme, + keyId: request.sshKid, + requestedClaimsHash: request.requestedClaimsHash, + }; + const accessTokenKeys = (tokenKeys && tokenKeys.accessToken) || + this.getTokenKeys().accessToken; + const accessTokens = []; + accessTokenKeys.forEach((key) => { + // Validate key + if (this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)) { + const accessToken = this.getAccessTokenCredential(key); + // Validate value + if (accessToken && + this.credentialMatchesFilter(accessToken, accessTokenFilter)) { + accessTokens.push(accessToken); + } + } + }); + const numAccessTokens = accessTokens.length; + if (numAccessTokens < 1) { + this.commonLogger.info("CacheManager:getAccessToken - No token found"); + return null; + } + else if (numAccessTokens > 1) { + this.commonLogger.info("CacheManager:getAccessToken - Multiple access tokens found, clearing them"); + accessTokens.forEach((accessToken) => { + void this.removeAccessToken(generateCredentialKey(accessToken)); + }); + if (performanceClient && correlationId) { + performanceClient.addFields({ multiMatchedAT: accessTokens.length }, correlationId); + } + return null; + } + this.commonLogger.info("CacheManager:getAccessToken - Returning access token"); + return accessTokens[0]; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + * @param keyMustContainAllScopes + * @returns + */ + accessTokenKeyMatchesFilter(inputKey, filter, keyMustContainAllScopes) { + const key = inputKey.toLowerCase(); + if (filter.clientId && + key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && + key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) { + return false; + } + if (filter.requestedClaimsHash && + key.indexOf(filter.requestedClaimsHash.toLowerCase()) === -1) { + return false; + } + if (filter.target) { + const scopes = filter.target.asArray(); + for (let i = 0; i < scopes.length; i++) { + if (keyMustContainAllScopes && + !key.includes(scopes[i].toLowerCase())) { + // When performing a cache lookup a missing scope would be a cache miss + return false; + } + else if (!keyMustContainAllScopes && + key.includes(scopes[i].toLowerCase())) { + // When performing a cache write, any token with a subset of requested scopes should be replaced + return true; + } + } + } + return true; + } + /** + * Gets all access tokens matching the filter + * @param filter + * @returns + */ + getAccessTokensByFilter(filter) { + const tokenKeys = this.getTokenKeys(); + const accessTokens = []; + tokenKeys.accessToken.forEach((key) => { + if (!this.accessTokenKeyMatchesFilter(key, filter, true)) { + return; + } + const accessToken = this.getAccessTokenCredential(key); + if (accessToken && + this.credentialMatchesFilter(accessToken, filter)) { + accessTokens.push(accessToken); + } + }); + return accessTokens; + } + /** + * Helper to retrieve the appropriate refresh token from cache + * @param account {AccountInfo} + * @param familyRT {boolean} + * @param tokenKeys {?TokenKeys} + * @param performanceClient {?IPerformanceClient} + * @param correlationId {?string} + */ + getRefreshToken(account, familyRT, tokenKeys, performanceClient, correlationId) { + this.commonLogger.trace("CacheManager - getRefreshToken called"); + const id = familyRT ? THE_FAMILY_ID : undefined; + const refreshTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType: CredentialType.REFRESH_TOKEN, + clientId: this.clientId, + familyId: id, + }; + const refreshTokenKeys = (tokenKeys && tokenKeys.refreshToken) || + this.getTokenKeys().refreshToken; + const refreshTokens = []; + refreshTokenKeys.forEach((key) => { + // Validate key + if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) { + const refreshToken = this.getRefreshTokenCredential(key); + // Validate value + if (refreshToken && + this.credentialMatchesFilter(refreshToken, refreshTokenFilter)) { + refreshTokens.push(refreshToken); + } + } + }); + const numRefreshTokens = refreshTokens.length; + if (numRefreshTokens < 1) { + this.commonLogger.info("CacheManager:getRefreshToken - No refresh token found."); + return null; + } + // address the else case after remove functions address environment aliases + if (numRefreshTokens > 1 && performanceClient && correlationId) { + performanceClient.addFields({ multiMatchedRT: numRefreshTokens }, correlationId); + } + this.commonLogger.info("CacheManager:getRefreshToken - returning refresh token"); + return refreshTokens[0]; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + */ + refreshTokenKeyMatchesFilter(inputKey, filter) { + const key = inputKey.toLowerCase(); + if (filter.familyId && + key.indexOf(filter.familyId.toLowerCase()) === -1) { + return false; + } + // If familyId is used, clientId is not in the key + if (!filter.familyId && + filter.clientId && + key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && + key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + return true; + } + /** + * Retrieve AppMetadataEntity from cache + */ + readAppMetadataFromCache(environment) { + const appMetadataFilter = { + environment, + clientId: this.clientId, + }; + const appMetadata = this.getAppMetadataFilteredBy(appMetadataFilter); + const appMetadataEntries = Object.keys(appMetadata).map((key) => appMetadata[key]); + const numAppMetadata = appMetadataEntries.length; + if (numAppMetadata < 1) { + return null; + } + else if (numAppMetadata > 1) { + throw createClientAuthError(multipleMatchingAppMetadata); + } + return appMetadataEntries[0]; + } + /** + * Return the family_id value associated with FOCI + * @param environment + * @param clientId + */ + isAppMetadataFOCI(environment) { + const appMetadata = this.readAppMetadataFromCache(environment); + return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID); + } + /** + * helper to match account ids + * @param value + * @param homeAccountId + */ + matchHomeAccountId(entity, homeAccountId) { + return !!(typeof entity.homeAccountId === "string" && + homeAccountId === entity.homeAccountId); + } + /** + * helper to match account ids + * @param entity + * @param localAccountId + * @returns + */ + matchLocalAccountIdFromTokenClaims(tokenClaims, localAccountId) { + const idTokenLocalAccountId = tokenClaims.oid || tokenClaims.sub; + return localAccountId === idTokenLocalAccountId; + } + matchLocalAccountIdFromTenantProfile(tenantProfile, localAccountId) { + return tenantProfile.localAccountId === localAccountId; + } + /** + * helper to match names + * @param entity + * @param name + * @returns true if the downcased name properties are present and match in the filter and the entity + */ + matchName(claims, name) { + return !!(name.toLowerCase() === claims.name?.toLowerCase()); + } + /** + * helper to match usernames + * @param entity + * @param username + * @returns + */ + matchUsername(cachedUsername, filterUsername) { + return !!(cachedUsername && + typeof cachedUsername === "string" && + filterUsername?.toLowerCase() === cachedUsername.toLowerCase()); + } + /** + * helper to match assertion + * @param value + * @param oboAssertion + */ + matchUserAssertionHash(entity, userAssertionHash) { + return !!(entity.userAssertionHash && + userAssertionHash === entity.userAssertionHash); + } + /** + * helper to match environment + * @param value + * @param environment + */ + matchEnvironment(entity, environment) { + // Check static authority options first for cases where authority metadata has not been resolved and cached yet + if (this.staticAuthorityOptions) { + const staticAliases = getAliasesFromStaticSources(this.staticAuthorityOptions, this.commonLogger); + if (staticAliases.includes(environment) && + staticAliases.includes(entity.environment)) { + return true; + } + } + // Query metadata cache if no static authority configuration has aliases that match enviroment + const cloudMetadata = this.getAuthorityMetadataByAlias(environment); + if (cloudMetadata && + cloudMetadata.aliases.indexOf(entity.environment) > -1) { + return true; + } + return false; + } + /** + * helper to match credential type + * @param entity + * @param credentialType + */ + matchCredentialType(entity, credentialType) { + return (entity.credentialType && + credentialType.toLowerCase() === entity.credentialType.toLowerCase()); + } + /** + * helper to match client ids + * @param entity + * @param clientId + */ + matchClientId(entity, clientId) { + return !!(entity.clientId && clientId === entity.clientId); + } + /** + * helper to match family ids + * @param entity + * @param familyId + */ + matchFamilyId(entity, familyId) { + return !!(entity.familyId && familyId === entity.familyId); + } + /** + * helper to match realm + * @param entity + * @param realm + */ + matchRealm(entity, realm) { + return !!(entity.realm?.toLowerCase() === realm.toLowerCase()); + } + /** + * helper to match nativeAccountId + * @param entity + * @param nativeAccountId + * @returns boolean indicating the match result + */ + matchNativeAccountId(entity, nativeAccountId) { + return !!(entity.nativeAccountId && nativeAccountId === entity.nativeAccountId); + } + /** + * helper to match loginHint which can be either: + * 1. login_hint ID token claim + * 2. username in cached account object + * 3. upn in ID token claims + * @param entity + * @param loginHint + * @returns + */ + matchLoginHintFromTokenClaims(tokenClaims, loginHint) { + if (tokenClaims.login_hint === loginHint) { + return true; + } + if (tokenClaims.preferred_username === loginHint) { + return true; + } + if (tokenClaims.upn === loginHint) { + return true; + } + return false; + } + /** + * Helper to match sid + * @param entity + * @param sid + * @returns true if the sid claim is present and matches the filter + */ + matchSid(idTokenClaims, sid) { + return idTokenClaims.sid === sid; + } + matchAuthorityType(entity, authorityType) { + return !!(entity.authorityType && + authorityType.toLowerCase() === entity.authorityType.toLowerCase()); + } + /** + * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise. + * @param entity + * @param target + */ + matchTarget(entity, target) { + const isNotAccessTokenCredential = entity.credentialType !== CredentialType.ACCESS_TOKEN && + entity.credentialType !== + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME; + if (isNotAccessTokenCredential || !entity.target) { + return false; + } + const entityScopeSet = ScopeSet.fromString(entity.target); + return entityScopeSet.containsScopeSet(target); + } + /** + * Returns true if the credential's tokenType or Authentication Scheme matches the one in the request, false otherwise + * @param entity + * @param tokenType + */ + matchTokenType(entity, tokenType) { + return !!(entity.tokenType && entity.tokenType === tokenType); + } + /** + * Returns true if the credential's keyId matches the one in the request, false otherwise + * @param entity + * @param keyId + */ + matchKeyId(entity, keyId) { + return !!(entity.keyId && entity.keyId === keyId); + } + /** + * returns if a given cache entity is of the type appmetadata + * @param key + */ + isAppMetadata(key) { + return key.indexOf(APP_METADATA) !== -1; + } + /** + * returns if a given cache entity is of the type authoritymetadata + * @param key + */ + isAuthorityMetadata(key) { + return key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) !== -1; + } + /** + * returns cache key used for cloud instance metadata + */ + generateAuthorityMetadataCacheKey(authority) { + return `${AUTHORITY_METADATA_CONSTANTS.CACHE_KEY}-${this.clientId}-${authority}`; + } + /** + * Helper to convert serialized data to object + * @param obj + * @param json + */ + static toObject(obj, json) { + for (const propertyName in json) { + obj[propertyName] = json[propertyName]; + } + return obj; + } +} +/** @internal */ +class DefaultStorageClass extends CacheManager { + setAccount() { + throw createClientAuthError(methodNotImplemented); + } + getAccount() { + throw createClientAuthError(methodNotImplemented); + } + getCachedAccountEntity() { + throw createClientAuthError(methodNotImplemented); + } + setIdTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + getIdTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + setAccessTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + getAccessTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + setRefreshTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + getRefreshTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + setAppMetadata() { + throw createClientAuthError(methodNotImplemented); + } + getAppMetadata() { + throw createClientAuthError(methodNotImplemented); + } + setServerTelemetry() { + throw createClientAuthError(methodNotImplemented); + } + getServerTelemetry() { + throw createClientAuthError(methodNotImplemented); + } + setAuthorityMetadata() { + throw createClientAuthError(methodNotImplemented); + } + getAuthorityMetadata() { + throw createClientAuthError(methodNotImplemented); + } + getAuthorityMetadataKeys() { + throw createClientAuthError(methodNotImplemented); + } + setThrottlingCache() { + throw createClientAuthError(methodNotImplemented); + } + getThrottlingCache() { + throw createClientAuthError(methodNotImplemented); + } + removeItem() { + throw createClientAuthError(methodNotImplemented); + } + getKeys() { + throw createClientAuthError(methodNotImplemented); + } + getAccountKeys() { + throw createClientAuthError(methodNotImplemented); + } + getTokenKeys() { + throw createClientAuthError(methodNotImplemented); + } + async clear() { + throw createClientAuthError(methodNotImplemented); + } + updateCredentialCacheKey() { + throw createClientAuthError(methodNotImplemented); + } + removeOutdatedAccount() { + throw createClientAuthError(methodNotImplemented); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const DEFAULT_SYSTEM_OPTIONS$1 = { + tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC, + preventCorsPreflight: false, +}; +const DEFAULT_LOGGER_IMPLEMENTATION = { + loggerCallback: () => { + // allow users to not set loggerCallback + }, + piiLoggingEnabled: false, + logLevel: exports.LogLevel.Info, + correlationId: Constants$1.EMPTY_STRING, +}; +const DEFAULT_CACHE_OPTIONS$1 = { + claimsBasedCachingEnabled: false, +}; +const DEFAULT_NETWORK_IMPLEMENTATION = { + async sendGetRequestAsync() { + throw createClientAuthError(methodNotImplemented); + }, + async sendPostRequestAsync() { + throw createClientAuthError(methodNotImplemented); + }, +}; +const DEFAULT_LIBRARY_INFO = { + sku: Constants$1.SKU, + version: version$1, + cpu: Constants$1.EMPTY_STRING, + os: Constants$1.EMPTY_STRING, +}; +const DEFAULT_CLIENT_CREDENTIALS = { + clientSecret: Constants$1.EMPTY_STRING, + clientAssertion: undefined, +}; +const DEFAULT_AZURE_CLOUD_OPTIONS = { + azureCloudInstance: AzureCloudInstance.None, + tenant: `${Constants$1.DEFAULT_COMMON_TENANT}`, +}; +const DEFAULT_TELEMETRY_OPTIONS$1 = { + application: { + appName: "", + appVersion: "", + }, +}; +/** + * Function that sets the default options when not explicitly configured from app developer + * + * @param Configuration + * + * @returns Configuration + */ +function buildClientConfiguration({ authOptions: userAuthOptions, systemOptions: userSystemOptions, loggerOptions: userLoggerOption, cacheOptions: userCacheOptions, storageInterface: storageImplementation, networkInterface: networkImplementation, cryptoInterface: cryptoImplementation, clientCredentials: clientCredentials, libraryInfo: libraryInfo, telemetry: telemetry, serverTelemetryManager: serverTelemetryManager, persistencePlugin: persistencePlugin, serializableCache: serializableCache, }) { + const loggerOptions = { + ...DEFAULT_LOGGER_IMPLEMENTATION, + ...userLoggerOption, + }; + return { + authOptions: buildAuthOptions(userAuthOptions), + systemOptions: { ...DEFAULT_SYSTEM_OPTIONS$1, ...userSystemOptions }, + loggerOptions: loggerOptions, + cacheOptions: { ...DEFAULT_CACHE_OPTIONS$1, ...userCacheOptions }, + storageInterface: storageImplementation || + new DefaultStorageClass(userAuthOptions.clientId, DEFAULT_CRYPTO_IMPLEMENTATION, new Logger(loggerOptions)), + networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION, + cryptoInterface: cryptoImplementation || DEFAULT_CRYPTO_IMPLEMENTATION, + clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS, + libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo }, + telemetry: { ...DEFAULT_TELEMETRY_OPTIONS$1, ...telemetry }, + serverTelemetryManager: serverTelemetryManager || null, + persistencePlugin: persistencePlugin || null, + serializableCache: serializableCache || null, + }; +} +/** + * Construct authoptions from the client and platform passed values + * @param authOptions + */ +function buildAuthOptions(authOptions) { + return { + clientCapabilities: [], + azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS, + skipAuthorityMetadataCache: false, + instanceAware: false, + ...authOptions, + }; +} +/** + * Returns true if config has protocolMode set to ProtocolMode.OIDC, false otherwise + * @param ClientConfiguration + */ +function isOidcProtocolMode(config) { + return (config.authOptions.authority.options.protocolMode === ProtocolMode.OIDC); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Error thrown when there is an error with the server code, for example, unavailability. + */ +class ServerError extends AuthError { + constructor(errorCode, errorMessage, subError, errorNo, status) { + super(errorCode, errorMessage, subError); + this.name = "ServerError"; + this.errorNo = errorNo; + this.status = status; + Object.setPrototypeOf(this, ServerError.prototype); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** @internal */ +class ThrottlingUtils { + /** + * Prepares a RequestThumbprint to be stored as a key. + * @param thumbprint + */ + static generateThrottlingStorageKey(thumbprint) { + return `${ThrottlingConstants.THROTTLING_PREFIX}.${JSON.stringify(thumbprint)}`; + } + /** + * Performs necessary throttling checks before a network request. + * @param cacheManager + * @param thumbprint + */ + static preProcess(cacheManager, thumbprint) { + const key = ThrottlingUtils.generateThrottlingStorageKey(thumbprint); + const value = cacheManager.getThrottlingCache(key); + if (value) { + if (value.throttleTime < Date.now()) { + cacheManager.removeItem(key); + return; + } + throw new ServerError(value.errorCodes?.join(" ") || Constants$1.EMPTY_STRING, value.errorMessage, value.subError); + } + } + /** + * Performs necessary throttling checks after a network request. + * @param cacheManager + * @param thumbprint + * @param response + */ + static postProcess(cacheManager, thumbprint, response) { + if (ThrottlingUtils.checkResponseStatus(response) || + ThrottlingUtils.checkResponseForRetryAfter(response)) { + const thumbprintValue = { + throttleTime: ThrottlingUtils.calculateThrottleTime(parseInt(response.headers[HeaderNames.RETRY_AFTER])), + error: response.body.error, + errorCodes: response.body.error_codes, + errorMessage: response.body.error_description, + subError: response.body.suberror, + }; + cacheManager.setThrottlingCache(ThrottlingUtils.generateThrottlingStorageKey(thumbprint), thumbprintValue); + } + } + /** + * Checks a NetworkResponse object's status codes against 429 or 5xx + * @param response + */ + static checkResponseStatus(response) { + return (response.status === 429 || + (response.status >= 500 && response.status < 600)); + } + /** + * Checks a NetworkResponse object's RetryAfter header + * @param response + */ + static checkResponseForRetryAfter(response) { + if (response.headers) { + return (response.headers.hasOwnProperty(HeaderNames.RETRY_AFTER) && + (response.status < 200 || response.status >= 300)); + } + return false; + } + /** + * Calculates the Unix-time value for a throttle to expire given throttleTime in seconds. + * @param throttleTime + */ + static calculateThrottleTime(throttleTime) { + const time = throttleTime <= 0 ? 0 : throttleTime; + const currentSeconds = Date.now() / 1000; + return Math.floor(Math.min(currentSeconds + + (time || ThrottlingConstants.DEFAULT_THROTTLE_TIME_SECONDS), currentSeconds + + ThrottlingConstants.DEFAULT_MAX_THROTTLE_TIME_SECONDS) * 1000); + } + static removeThrottle(cacheManager, clientId, request, homeAccountIdentifier) { + const thumbprint = { + clientId: clientId, + authority: request.authority, + scopes: request.scopes, + homeAccountIdentifier: homeAccountIdentifier, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + const key = this.generateThrottlingStorageKey(thumbprint); + cacheManager.removeItem(key); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** @internal */ +class NetworkManager { + constructor(networkClient, cacheManager) { + this.networkClient = networkClient; + this.cacheManager = cacheManager; + } + /** + * Wraps sendPostRequestAsync with necessary preflight and postflight logic + * @param thumbprint + * @param tokenEndpoint + * @param options + */ + async sendPostRequest(thumbprint, tokenEndpoint, options) { + ThrottlingUtils.preProcess(this.cacheManager, thumbprint); + let response; + try { + response = await this.networkClient.sendPostRequestAsync(tokenEndpoint, options); + } + catch (e) { + if (e instanceof AuthError) { + throw e; + } + else { + throw createClientAuthError(networkError); + } + } + ThrottlingUtils.postProcess(this.cacheManager, thumbprint, response); + return response; + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const CcsCredentialType = { + HOME_ACCOUNT_ID: "home_account_id", + UPN: "UPN", +}; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const CLIENT_ID = "client_id"; +const REDIRECT_URI = "redirect_uri"; +const RESPONSE_TYPE = "response_type"; +const RESPONSE_MODE = "response_mode"; +const GRANT_TYPE = "grant_type"; +const CLAIMS = "claims"; +const SCOPE = "scope"; +const REFRESH_TOKEN = "refresh_token"; +const STATE = "state"; +const NONCE = "nonce"; +const PROMPT = "prompt"; +const CODE = "code"; +const CODE_CHALLENGE = "code_challenge"; +const CODE_CHALLENGE_METHOD = "code_challenge_method"; +const CODE_VERIFIER = "code_verifier"; +const CLIENT_REQUEST_ID = "client-request-id"; +const X_CLIENT_SKU = "x-client-SKU"; +const X_CLIENT_VER = "x-client-VER"; +const X_CLIENT_OS = "x-client-OS"; +const X_CLIENT_CPU = "x-client-CPU"; +const X_CLIENT_CURR_TELEM = "x-client-current-telemetry"; +const X_CLIENT_LAST_TELEM = "x-client-last-telemetry"; +const X_MS_LIB_CAPABILITY = "x-ms-lib-capability"; +const X_APP_NAME = "x-app-name"; +const X_APP_VER = "x-app-ver"; +const POST_LOGOUT_URI = "post_logout_redirect_uri"; +const ID_TOKEN_HINT = "id_token_hint"; +const DEVICE_CODE = "device_code"; +const CLIENT_SECRET = "client_secret"; +const CLIENT_ASSERTION = "client_assertion"; +const CLIENT_ASSERTION_TYPE = "client_assertion_type"; +const TOKEN_TYPE = "token_type"; +const REQ_CNF = "req_cnf"; +const OBO_ASSERTION = "assertion"; +const REQUESTED_TOKEN_USE = "requested_token_use"; +const ON_BEHALF_OF = "on_behalf_of"; +const RETURN_SPA_CODE = "return_spa_code"; +const NATIVE_BROKER = "nativebroker"; +const LOGOUT_HINT = "logout_hint"; +const SID = "sid"; +const LOGIN_HINT = "login_hint"; +const DOMAIN_HINT = "domain_hint"; +const X_CLIENT_EXTRA_SKU = "x-client-xtra-sku"; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Validates server consumable params from the "request" objects + */ +class RequestValidator { + /** + * Utility to check if the `redirectUri` in the request is a non-null value + * @param redirectUri + */ + static validateRedirectUri(redirectUri) { + if (!redirectUri) { + throw createClientConfigurationError(redirectUriEmpty); + } + } + /** + * Utility to validate prompt sent by the user in the request + * @param prompt + */ + static validatePrompt(prompt) { + const promptValues = []; + for (const value in PromptValue) { + promptValues.push(PromptValue[value]); + } + if (promptValues.indexOf(prompt) < 0) { + throw createClientConfigurationError(invalidPromptValue); + } + } + static validateClaims(claims) { + try { + JSON.parse(claims); + } + catch (e) { + throw createClientConfigurationError(invalidClaims); + } + } + /** + * Utility to validate code_challenge and code_challenge_method + * @param codeChallenge + * @param codeChallengeMethod + */ + static validateCodeChallengeParams(codeChallenge, codeChallengeMethod) { + if (!codeChallenge || !codeChallengeMethod) { + throw createClientConfigurationError(pkceParamsMissing); + } + else { + this.validateCodeChallengeMethod(codeChallengeMethod); + } + } + /** + * Utility to validate code_challenge_method + * @param codeChallengeMethod + */ + static validateCodeChallengeMethod(codeChallengeMethod) { + if ([ + CodeChallengeMethodValues.PLAIN, + CodeChallengeMethodValues.S256, + ].indexOf(codeChallengeMethod) < 0) { + throw createClientConfigurationError(invalidCodeChallengeMethod); + } + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** @internal */ +class RequestParameterBuilder { + constructor() { + this.parameters = new Map(); + } + /** + * add response_type = code + */ + addResponseTypeCode() { + this.parameters.set(RESPONSE_TYPE, encodeURIComponent(Constants$1.CODE_RESPONSE_TYPE)); + } + /** + * add response_type = token id_token + */ + addResponseTypeForTokenAndIdToken() { + this.parameters.set(RESPONSE_TYPE, encodeURIComponent(`${Constants$1.TOKEN_RESPONSE_TYPE} ${Constants$1.ID_TOKEN_RESPONSE_TYPE}`)); + } + /** + * add response_mode. defaults to query. + * @param responseMode + */ + addResponseMode(responseMode) { + this.parameters.set(RESPONSE_MODE, encodeURIComponent(responseMode ? responseMode : ResponseMode.QUERY)); + } + /** + * Add flag to indicate STS should attempt to use WAM if available + */ + addNativeBroker() { + this.parameters.set(NATIVE_BROKER, encodeURIComponent("1")); + } + /** + * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios + * @param scopeSet + * @param addOidcScopes + */ + addScopes(scopes, addOidcScopes = true, defaultScopes = OIDC_DEFAULT_SCOPES) { + // Always add openid to the scopes when adding OIDC scopes + if (addOidcScopes && + !defaultScopes.includes("openid") && + !scopes.includes("openid")) { + defaultScopes.push("openid"); + } + const requestScopes = addOidcScopes + ? [...(scopes || []), ...defaultScopes] + : scopes || []; + const scopeSet = new ScopeSet(requestScopes); + this.parameters.set(SCOPE, encodeURIComponent(scopeSet.printScopes())); + } + /** + * add clientId + * @param clientId + */ + addClientId(clientId) { + this.parameters.set(CLIENT_ID, encodeURIComponent(clientId)); + } + /** + * add redirect_uri + * @param redirectUri + */ + addRedirectUri(redirectUri) { + RequestValidator.validateRedirectUri(redirectUri); + this.parameters.set(REDIRECT_URI, encodeURIComponent(redirectUri)); + } + /** + * add post logout redirectUri + * @param redirectUri + */ + addPostLogoutRedirectUri(redirectUri) { + RequestValidator.validateRedirectUri(redirectUri); + this.parameters.set(POST_LOGOUT_URI, encodeURIComponent(redirectUri)); + } + /** + * add id_token_hint to logout request + * @param idTokenHint + */ + addIdTokenHint(idTokenHint) { + this.parameters.set(ID_TOKEN_HINT, encodeURIComponent(idTokenHint)); + } + /** + * add domain_hint + * @param domainHint + */ + addDomainHint(domainHint) { + this.parameters.set(DOMAIN_HINT, encodeURIComponent(domainHint)); + } + /** + * add login_hint + * @param loginHint + */ + addLoginHint(loginHint) { + this.parameters.set(LOGIN_HINT, encodeURIComponent(loginHint)); + } + /** + * Adds the CCS (Cache Credential Service) query parameter for login_hint + * @param loginHint + */ + addCcsUpn(loginHint) { + this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`UPN:${loginHint}`)); + } + /** + * Adds the CCS (Cache Credential Service) query parameter for account object + * @param loginHint + */ + addCcsOid(clientInfo) { + this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`Oid:${clientInfo.uid}@${clientInfo.utid}`)); + } + /** + * add sid + * @param sid + */ + addSid(sid) { + this.parameters.set(SID, encodeURIComponent(sid)); + } + /** + * add claims + * @param claims + */ + addClaims(claims, clientCapabilities) { + const mergedClaims = this.addClientCapabilitiesToClaims(claims, clientCapabilities); + RequestValidator.validateClaims(mergedClaims); + this.parameters.set(CLAIMS, encodeURIComponent(mergedClaims)); + } + /** + * add correlationId + * @param correlationId + */ + addCorrelationId(correlationId) { + this.parameters.set(CLIENT_REQUEST_ID, encodeURIComponent(correlationId)); + } + /** + * add library info query params + * @param libraryInfo + */ + addLibraryInfo(libraryInfo) { + // Telemetry Info + this.parameters.set(X_CLIENT_SKU, libraryInfo.sku); + this.parameters.set(X_CLIENT_VER, libraryInfo.version); + if (libraryInfo.os) { + this.parameters.set(X_CLIENT_OS, libraryInfo.os); + } + if (libraryInfo.cpu) { + this.parameters.set(X_CLIENT_CPU, libraryInfo.cpu); + } + } + /** + * Add client telemetry parameters + * @param appTelemetry + */ + addApplicationTelemetry(appTelemetry) { + if (appTelemetry?.appName) { + this.parameters.set(X_APP_NAME, appTelemetry.appName); + } + if (appTelemetry?.appVersion) { + this.parameters.set(X_APP_VER, appTelemetry.appVersion); + } + } + /** + * add prompt + * @param prompt + */ + addPrompt(prompt) { + RequestValidator.validatePrompt(prompt); + this.parameters.set(`${PROMPT}`, encodeURIComponent(prompt)); + } + /** + * add state + * @param state + */ + addState(state) { + if (state) { + this.parameters.set(STATE, encodeURIComponent(state)); + } + } + /** + * add nonce + * @param nonce + */ + addNonce(nonce) { + this.parameters.set(NONCE, encodeURIComponent(nonce)); + } + /** + * add code_challenge and code_challenge_method + * - throw if either of them are not passed + * @param codeChallenge + * @param codeChallengeMethod + */ + addCodeChallengeParams(codeChallenge, codeChallengeMethod) { + RequestValidator.validateCodeChallengeParams(codeChallenge, codeChallengeMethod); + if (codeChallenge && codeChallengeMethod) { + this.parameters.set(CODE_CHALLENGE, encodeURIComponent(codeChallenge)); + this.parameters.set(CODE_CHALLENGE_METHOD, encodeURIComponent(codeChallengeMethod)); + } + else { + throw createClientConfigurationError(pkceParamsMissing); + } + } + /** + * add the `authorization_code` passed by the user to exchange for a token + * @param code + */ + addAuthorizationCode(code) { + this.parameters.set(CODE, encodeURIComponent(code)); + } + /** + * add the `authorization_code` passed by the user to exchange for a token + * @param code + */ + addDeviceCode(code) { + this.parameters.set(DEVICE_CODE, encodeURIComponent(code)); + } + /** + * add the `refreshToken` passed by the user + * @param refreshToken + */ + addRefreshToken(refreshToken) { + this.parameters.set(REFRESH_TOKEN, encodeURIComponent(refreshToken)); + } + /** + * add the `code_verifier` passed by the user to exchange for a token + * @param codeVerifier + */ + addCodeVerifier(codeVerifier) { + this.parameters.set(CODE_VERIFIER, encodeURIComponent(codeVerifier)); + } + /** + * add client_secret + * @param clientSecret + */ + addClientSecret(clientSecret) { + this.parameters.set(CLIENT_SECRET, encodeURIComponent(clientSecret)); + } + /** + * add clientAssertion for confidential client flows + * @param clientAssertion + */ + addClientAssertion(clientAssertion) { + if (clientAssertion) { + this.parameters.set(CLIENT_ASSERTION, encodeURIComponent(clientAssertion)); + } + } + /** + * add clientAssertionType for confidential client flows + * @param clientAssertionType + */ + addClientAssertionType(clientAssertionType) { + if (clientAssertionType) { + this.parameters.set(CLIENT_ASSERTION_TYPE, encodeURIComponent(clientAssertionType)); + } + } + /** + * add OBO assertion for confidential client flows + * @param clientAssertion + */ + addOboAssertion(oboAssertion) { + this.parameters.set(OBO_ASSERTION, encodeURIComponent(oboAssertion)); + } + /** + * add grant type + * @param grantType + */ + addRequestTokenUse(tokenUse) { + this.parameters.set(REQUESTED_TOKEN_USE, encodeURIComponent(tokenUse)); + } + /** + * add grant type + * @param grantType + */ + addGrantType(grantType) { + this.parameters.set(GRANT_TYPE, encodeURIComponent(grantType)); + } + /** + * add client info + * + */ + addClientInfo() { + this.parameters.set(CLIENT_INFO, "1"); + } + /** + * add extraQueryParams + * @param eQParams + */ + addExtraQueryParameters(eQParams) { + Object.entries(eQParams).forEach(([key, value]) => { + if (!this.parameters.has(key) && value) { + this.parameters.set(key, value); + } + }); + } + addClientCapabilitiesToClaims(claims, clientCapabilities) { + let mergedClaims; + // Parse provided claims into JSON object or initialize empty object + if (!claims) { + mergedClaims = {}; + } + else { + try { + mergedClaims = JSON.parse(claims); + } + catch (e) { + throw createClientConfigurationError(invalidClaims); + } + } + if (clientCapabilities && clientCapabilities.length > 0) { + if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) { + // Add access_token key to claims object + mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {}; + } + // Add xms_cc claim with provided clientCapabilities to access_token key + mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = { + values: clientCapabilities, + }; + } + return JSON.stringify(mergedClaims); + } + /** + * adds `username` for Password Grant flow + * @param username + */ + addUsername(username) { + this.parameters.set(PasswordGrantConstants.username, encodeURIComponent(username)); + } + /** + * adds `password` for Password Grant flow + * @param password + */ + addPassword(password) { + this.parameters.set(PasswordGrantConstants.password, encodeURIComponent(password)); + } + /** + * add pop_jwk to query params + * @param cnfString + */ + addPopToken(cnfString) { + if (cnfString) { + this.parameters.set(TOKEN_TYPE, AuthenticationScheme.POP); + this.parameters.set(REQ_CNF, encodeURIComponent(cnfString)); + } + } + /** + * add SSH JWK and key ID to query params + */ + addSshJwk(sshJwkString) { + if (sshJwkString) { + this.parameters.set(TOKEN_TYPE, AuthenticationScheme.SSH); + this.parameters.set(REQ_CNF, encodeURIComponent(sshJwkString)); + } + } + /** + * add server telemetry fields + * @param serverTelemetryManager + */ + addServerTelemetry(serverTelemetryManager) { + this.parameters.set(X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue()); + this.parameters.set(X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue()); + } + /** + * Adds parameter that indicates to the server that throttling is supported + */ + addThrottling() { + this.parameters.set(X_MS_LIB_CAPABILITY, ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE); + } + /** + * Adds logout_hint parameter for "silent" logout which prevent server account picker + */ + addLogoutHint(logoutHint) { + this.parameters.set(LOGOUT_HINT, encodeURIComponent(logoutHint)); + } + /** + * Utility to create a URL from the params map + */ + createQueryString() { + const queryParameterArray = new Array(); + this.parameters.forEach((value, key) => { + queryParameterArray.push(`${key}=${value}`); + }); + return queryParameterArray.join("&"); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function isOpenIdConfigResponse(response) { + return (response.hasOwnProperty("authorization_endpoint") && + response.hasOwnProperty("token_endpoint") && + response.hasOwnProperty("issuer") && + response.hasOwnProperty("jwks_uri")); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function isCloudInstanceDiscoveryResponse(response) { + return (response.hasOwnProperty("tenant_discovery_endpoint") && + response.hasOwnProperty("metadata")); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function isCloudInstanceDiscoveryErrorResponse(response) { + return (response.hasOwnProperty("error") && + response.hasOwnProperty("error_description")); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Enumeration of operations that are instrumented by have their performance measured by the PerformanceClient. + * + * @export + * @enum {number} + */ +const PerformanceEvents = { + /** + * acquireTokenByCode API (msal-browser and msal-node). + * Used to acquire tokens by trading an authorization code against the token endpoint. + */ + AcquireTokenByCode: "acquireTokenByCode", + /** + * acquireTokenByRefreshToken API (msal-browser and msal-node). + * Used to renew an access token using a refresh token against the token endpoint. + */ + AcquireTokenByRefreshToken: "acquireTokenByRefreshToken", + /** + * acquireTokenSilent API (msal-browser and msal-node). + * Used to silently acquire a new access token (from the cache or the network). + */ + AcquireTokenSilent: "acquireTokenSilent", + /** + * acquireTokenSilentAsync (msal-browser). + * Internal API for acquireTokenSilent. + */ + AcquireTokenSilentAsync: "acquireTokenSilentAsync", + /** + * acquireTokenPopup (msal-browser). + * Used to acquire a new access token interactively through pop ups + */ + AcquireTokenPopup: "acquireTokenPopup", + /** + * acquireTokenPreRedirect (msal-browser). + * First part of the redirect flow. + * Used to acquire a new access token interactively through redirects. + */ + AcquireTokenPreRedirect: "acquireTokenPreRedirect", + /** + * acquireTokenRedirect (msal-browser). + * Second part of the redirect flow. + * Used to acquire a new access token interactively through redirects. + */ + AcquireTokenRedirect: "acquireTokenRedirect", + /** + * getPublicKeyThumbprint API in CryptoOpts class (msal-browser). + * Used to generate a public/private keypair and generate a public key thumbprint for pop requests. + */ + CryptoOptsGetPublicKeyThumbprint: "cryptoOptsGetPublicKeyThumbprint", + /** + * signJwt API in CryptoOpts class (msal-browser). + * Used to signed a pop token. + */ + CryptoOptsSignJwt: "cryptoOptsSignJwt", + /** + * acquireToken API in the SilentCacheClient class (msal-browser). + * Used to read access tokens from the cache. + */ + SilentCacheClientAcquireToken: "silentCacheClientAcquireToken", + /** + * acquireToken API in the SilentIframeClient class (msal-browser). + * Used to acquire a new set of tokens from the authorize endpoint in a hidden iframe. + */ + SilentIframeClientAcquireToken: "silentIframeClientAcquireToken", + AwaitConcurrentIframe: "awaitConcurrentIframe", + /** + * acquireToken API in SilentRereshClient (msal-browser). + * Used to acquire a new set of tokens from the token endpoint using a refresh token. + */ + SilentRefreshClientAcquireToken: "silentRefreshClientAcquireToken", + /** + * ssoSilent API (msal-browser). + * Used to silently acquire an authorization code and set of tokens using a hidden iframe. + */ + SsoSilent: "ssoSilent", + /** + * getDiscoveredAuthority API in StandardInteractionClient class (msal-browser). + * Used to load authority metadata for a request. + */ + StandardInteractionClientGetDiscoveredAuthority: "standardInteractionClientGetDiscoveredAuthority", + /** + * acquireToken APIs in msal-browser. + * Used to make an /authorize endpoint call with native brokering enabled. + */ + FetchAccountIdWithNativeBroker: "fetchAccountIdWithNativeBroker", + /** + * acquireToken API in NativeInteractionClient class (msal-browser). + * Used to acquire a token from Native component when native brokering is enabled. + */ + NativeInteractionClientAcquireToken: "nativeInteractionClientAcquireToken", + /** + * Time spent creating default headers for requests to token endpoint + */ + BaseClientCreateTokenRequestHeaders: "baseClientCreateTokenRequestHeaders", + /** + * Time spent sending/waiting for the response of a request to the token endpoint + */ + RefreshTokenClientExecutePostToTokenEndpoint: "refreshTokenClientExecutePostToTokenEndpoint", + AuthorizationCodeClientExecutePostToTokenEndpoint: "authorizationCodeClientExecutePostToTokenEndpoint", + /** + * Used to measure the time taken for completing embedded-broker handshake (PW-Broker). + */ + BrokerHandhshake: "brokerHandshake", + /** + * acquireTokenByRefreshToken API in BrokerClientApplication (PW-Broker) . + */ + AcquireTokenByRefreshTokenInBroker: "acquireTokenByRefreshTokenInBroker", + /** + * Time taken for token acquisition by broker + */ + AcquireTokenByBroker: "acquireTokenByBroker", + /** + * Time spent on the network for refresh token acquisition + */ + RefreshTokenClientExecuteTokenRequest: "refreshTokenClientExecuteTokenRequest", + /** + * Time taken for acquiring refresh token , records RT size + */ + RefreshTokenClientAcquireToken: "refreshTokenClientAcquireToken", + /** + * Time taken for acquiring cached refresh token + */ + RefreshTokenClientAcquireTokenWithCachedRefreshToken: "refreshTokenClientAcquireTokenWithCachedRefreshToken", + /** + * acquireTokenByRefreshToken API in RefreshTokenClient (msal-common). + */ + RefreshTokenClientAcquireTokenByRefreshToken: "refreshTokenClientAcquireTokenByRefreshToken", + /** + * Helper function to create token request body in RefreshTokenClient (msal-common). + */ + RefreshTokenClientCreateTokenRequestBody: "refreshTokenClientCreateTokenRequestBody", + /** + * acquireTokenFromCache (msal-browser). + * Internal API for acquiring token from cache + */ + AcquireTokenFromCache: "acquireTokenFromCache", + SilentFlowClientAcquireCachedToken: "silentFlowClientAcquireCachedToken", + SilentFlowClientGenerateResultFromCacheRecord: "silentFlowClientGenerateResultFromCacheRecord", + /** + * acquireTokenBySilentIframe (msal-browser). + * Internal API for acquiring token by silent Iframe + */ + AcquireTokenBySilentIframe: "acquireTokenBySilentIframe", + /** + * Internal API for initializing base request in BaseInteractionClient (msal-browser) + */ + InitializeBaseRequest: "initializeBaseRequest", + /** + * Internal API for initializing silent request in SilentCacheClient (msal-browser) + */ + InitializeSilentRequest: "initializeSilentRequest", + InitializeClientApplication: "initializeClientApplication", + /** + * Helper function in SilentIframeClient class (msal-browser). + */ + SilentIframeClientTokenHelper: "silentIframeClientTokenHelper", + /** + * SilentHandler + */ + SilentHandlerInitiateAuthRequest: "silentHandlerInitiateAuthRequest", + SilentHandlerMonitorIframeForHash: "silentHandlerMonitorIframeForHash", + SilentHandlerLoadFrame: "silentHandlerLoadFrame", + SilentHandlerLoadFrameSync: "silentHandlerLoadFrameSync", + /** + * Helper functions in StandardInteractionClient class (msal-browser) + */ + StandardInteractionClientCreateAuthCodeClient: "standardInteractionClientCreateAuthCodeClient", + StandardInteractionClientGetClientConfiguration: "standardInteractionClientGetClientConfiguration", + StandardInteractionClientInitializeAuthorizationRequest: "standardInteractionClientInitializeAuthorizationRequest", + StandardInteractionClientInitializeAuthorizationCodeRequest: "standardInteractionClientInitializeAuthorizationCodeRequest", + /** + * getAuthCodeUrl API (msal-browser and msal-node). + */ + GetAuthCodeUrl: "getAuthCodeUrl", + /** + * Functions from InteractionHandler (msal-browser) + */ + HandleCodeResponseFromServer: "handleCodeResponseFromServer", + HandleCodeResponse: "handleCodeResponse", + UpdateTokenEndpointAuthority: "updateTokenEndpointAuthority", + /** + * APIs in Authorization Code Client (msal-common) + */ + AuthClientAcquireToken: "authClientAcquireToken", + AuthClientExecuteTokenRequest: "authClientExecuteTokenRequest", + AuthClientCreateTokenRequestBody: "authClientCreateTokenRequestBody", + AuthClientCreateQueryString: "authClientCreateQueryString", + /** + * Generate functions in PopTokenGenerator (msal-common) + */ + PopTokenGenerateCnf: "popTokenGenerateCnf", + PopTokenGenerateKid: "popTokenGenerateKid", + /** + * handleServerTokenResponse API in ResponseHandler (msal-common) + */ + HandleServerTokenResponse: "handleServerTokenResponse", + DeserializeResponse: "deserializeResponse", + /** + * Authority functions + */ + AuthorityFactoryCreateDiscoveredInstance: "authorityFactoryCreateDiscoveredInstance", + AuthorityResolveEndpointsAsync: "authorityResolveEndpointsAsync", + AuthorityResolveEndpointsFromLocalSources: "authorityResolveEndpointsFromLocalSources", + AuthorityGetCloudDiscoveryMetadataFromNetwork: "authorityGetCloudDiscoveryMetadataFromNetwork", + AuthorityUpdateCloudDiscoveryMetadata: "authorityUpdateCloudDiscoveryMetadata", + AuthorityGetEndpointMetadataFromNetwork: "authorityGetEndpointMetadataFromNetwork", + AuthorityUpdateEndpointMetadata: "authorityUpdateEndpointMetadata", + AuthorityUpdateMetadataWithRegionalInformation: "authorityUpdateMetadataWithRegionalInformation", + /** + * Region Discovery functions + */ + RegionDiscoveryDetectRegion: "regionDiscoveryDetectRegion", + RegionDiscoveryGetRegionFromIMDS: "regionDiscoveryGetRegionFromIMDS", + RegionDiscoveryGetCurrentVersion: "regionDiscoveryGetCurrentVersion", + AcquireTokenByCodeAsync: "acquireTokenByCodeAsync", + GetEndpointMetadataFromNetwork: "getEndpointMetadataFromNetwork", + GetCloudDiscoveryMetadataFromNetworkMeasurement: "getCloudDiscoveryMetadataFromNetworkMeasurement", + HandleRedirectPromiseMeasurement: "handleRedirectPromise", + HandleNativeRedirectPromiseMeasurement: "handleNativeRedirectPromise", + UpdateCloudDiscoveryMetadataMeasurement: "updateCloudDiscoveryMetadataMeasurement", + UsernamePasswordClientAcquireToken: "usernamePasswordClientAcquireToken", + NativeMessageHandlerHandshake: "nativeMessageHandlerHandshake", + NativeGenerateAuthResult: "nativeGenerateAuthResult", + RemoveHiddenIframe: "removeHiddenIframe", + /** + * Cache operations + */ + ClearTokensAndKeysWithClaims: "clearTokensAndKeysWithClaims", + CacheManagerGetRefreshToken: "cacheManagerGetRefreshToken", + /** + * Crypto Operations + */ + GeneratePkceCodes: "generatePkceCodes", + GenerateCodeVerifier: "generateCodeVerifier", + GenerateCodeChallengeFromVerifier: "generateCodeChallengeFromVerifier", + Sha256Digest: "sha256Digest", + GetRandomValues: "getRandomValues", +}; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Wraps a function with a performance measurement. + * Usage: invoke(functionToCall, performanceClient, "EventName", "correlationId")(...argsToPassToFunction) + * @param callback + * @param eventName + * @param logger + * @param telemetryClient + * @param correlationId + * @returns + * @internal + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const invoke = (callback, eventName, logger, telemetryClient, correlationId) => { + return (...args) => { + logger.trace(`Executing function ${eventName}`); + const inProgressEvent = telemetryClient?.startMeasurement(eventName, correlationId); + if (correlationId) { + // Track number of times this API is called in a single request + const eventCount = eventName + "CallCount"; + telemetryClient?.incrementFields({ [eventCount]: 1 }, correlationId); + } + try { + const result = callback(...args); + inProgressEvent?.end({ + success: true, + }); + logger.trace(`Returning result from ${eventName}`); + return result; + } + catch (e) { + logger.trace(`Error occurred in ${eventName}`); + try { + logger.trace(JSON.stringify(e)); + } + catch (e) { + logger.trace("Unable to print error message."); + } + inProgressEvent?.end({ + success: false, + }, e); + throw e; + } + }; +}; +/** + * Wraps an async function with a performance measurement. + * Usage: invokeAsync(functionToCall, performanceClient, "EventName", "correlationId")(...argsToPassToFunction) + * @param callback + * @param eventName + * @param logger + * @param telemetryClient + * @param correlationId + * @returns + * @internal + * + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const invokeAsync = (callback, eventName, logger, telemetryClient, correlationId) => { + return (...args) => { + logger.trace(`Executing function ${eventName}`); + const inProgressEvent = telemetryClient?.startMeasurement(eventName, correlationId); + if (correlationId) { + // Track number of times this API is called in a single request + const eventCount = eventName + "CallCount"; + telemetryClient?.incrementFields({ [eventCount]: 1 }, correlationId); + } + telemetryClient?.setPreQueueTime(eventName, correlationId); + return callback(...args) + .then((response) => { + logger.trace(`Returning result from ${eventName}`); + inProgressEvent?.end({ + success: true, + }); + return response; + }) + .catch((e) => { + logger.trace(`Error occurred in ${eventName}`); + try { + logger.trace(JSON.stringify(e)); + } + catch (e) { + logger.trace("Unable to print error message."); + } + inProgressEvent?.end({ + success: false, + }, e); + throw e; + }); + }; +}; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class RegionDiscovery { + constructor(networkInterface, logger, performanceClient, correlationId) { + this.networkInterface = networkInterface; + this.logger = logger; + this.performanceClient = performanceClient; + this.correlationId = correlationId; + } + /** + * Detect the region from the application's environment. + * + * @returns Promise + */ + async detectRegion(environmentRegion, regionDiscoveryMetadata) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryDetectRegion, this.correlationId); + // Initialize auto detected region with the region from the envrionment + let autodetectedRegionName = environmentRegion; + // Check if a region was detected from the environment, if not, attempt to get the region from IMDS + if (!autodetectedRegionName) { + const options = RegionDiscovery.IMDS_OPTIONS; + try { + const localIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(Constants$1.IMDS_VERSION, options); + if (localIMDSVersionResponse.status === + ResponseCodes.httpSuccess) { + autodetectedRegionName = localIMDSVersionResponse.body; + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.IMDS; + } + // If the response using the local IMDS version failed, try to fetch the current version of IMDS and retry. + if (localIMDSVersionResponse.status === + ResponseCodes.httpBadRequest) { + const currentIMDSVersion = await invokeAsync(this.getCurrentVersion.bind(this), PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.logger, this.performanceClient, this.correlationId)(options); + if (!currentIMDSVersion) { + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.FAILED_AUTO_DETECTION; + return null; + } + const currentIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(currentIMDSVersion, options); + if (currentIMDSVersionResponse.status === + ResponseCodes.httpSuccess) { + autodetectedRegionName = + currentIMDSVersionResponse.body; + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.IMDS; + } + } + } + catch (e) { + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.FAILED_AUTO_DETECTION; + return null; + } + } + else { + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.ENVIRONMENT_VARIABLE; + } + // If no region was auto detected from the environment or from the IMDS endpoint, mark the attempt as a FAILED_AUTO_DETECTION + if (!autodetectedRegionName) { + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.FAILED_AUTO_DETECTION; + } + return autodetectedRegionName || null; + } + /** + * Make the call to the IMDS endpoint + * + * @param imdsEndpointUrl + * @returns Promise> + */ + async getRegionFromIMDS(version, options) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.correlationId); + return this.networkInterface.sendGetRequestAsync(`${Constants$1.IMDS_ENDPOINT}?api-version=${version}&format=text`, options, Constants$1.IMDS_TIMEOUT); + } + /** + * Get the most recent version of the IMDS endpoint available + * + * @returns Promise + */ + async getCurrentVersion(options) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.correlationId); + try { + const response = await this.networkInterface.sendGetRequestAsync(`${Constants$1.IMDS_ENDPOINT}?format=json`, options); + // When IMDS endpoint is called without the api version query param, bad request response comes back with latest version. + if (response.status === ResponseCodes.httpBadRequest && + response.body && + response.body["newest-versions"] && + response.body["newest-versions"].length > 0) { + return response.body["newest-versions"][0]; + } + return null; + } + catch (e) { + return null; + } + } +} +// Options for the IMDS endpoint request +RegionDiscovery.IMDS_OPTIONS = { + headers: { + Metadata: "true", + }, +}; + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the + * endpoint. It will store the pertinent config data in this object for use during token calls. + * @internal + */ +class Authority { + constructor(authority, networkInterface, cacheManager, authorityOptions, logger, correlationId, performanceClient, managedIdentity) { + this.canonicalAuthority = authority; + this._canonicalAuthority.validateAsUri(); + this.networkInterface = networkInterface; + this.cacheManager = cacheManager; + this.authorityOptions = authorityOptions; + this.regionDiscoveryMetadata = { + region_used: undefined, + region_source: undefined, + region_outcome: undefined, + }; + this.logger = logger; + this.performanceClient = performanceClient; + this.correlationId = correlationId; + this.managedIdentity = managedIdentity || false; + this.regionDiscovery = new RegionDiscovery(networkInterface, this.logger, this.performanceClient, this.correlationId); + } + /** + * Get {@link AuthorityType} + * @param authorityUri {@link IUri} + * @private + */ + getAuthorityType(authorityUri) { + // CIAM auth url pattern is being standardized as: .ciamlogin.com + if (authorityUri.HostNameAndPort.endsWith(Constants$1.CIAM_AUTH_URL)) { + return AuthorityType.Ciam; + } + const pathSegments = authorityUri.PathSegments; + if (pathSegments.length) { + switch (pathSegments[0].toLowerCase()) { + case Constants$1.ADFS: + return AuthorityType.Adfs; + case Constants$1.DSTS: + return AuthorityType.Dsts; + } + } + return AuthorityType.Default; + } + // See above for AuthorityType + get authorityType() { + return this.getAuthorityType(this.canonicalAuthorityUrlComponents); + } + /** + * ProtocolMode enum representing the way endpoints are constructed. + */ + get protocolMode() { + return this.authorityOptions.protocolMode; + } + /** + * Returns authorityOptions which can be used to reinstantiate a new authority instance + */ + get options() { + return this.authorityOptions; + } + /** + * A URL that is the authority set by the developer + */ + get canonicalAuthority() { + return this._canonicalAuthority.urlString; + } + /** + * Sets canonical authority. + */ + set canonicalAuthority(url) { + this._canonicalAuthority = new UrlString(url); + this._canonicalAuthority.validateAsUri(); + this._canonicalAuthorityUrlComponents = null; + } + /** + * Get authority components. + */ + get canonicalAuthorityUrlComponents() { + if (!this._canonicalAuthorityUrlComponents) { + this._canonicalAuthorityUrlComponents = + this._canonicalAuthority.getUrlComponents(); + } + return this._canonicalAuthorityUrlComponents; + } + /** + * Get hostname and port i.e. login.microsoftonline.com + */ + get hostnameAndPort() { + return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase(); + } + /** + * Get tenant for authority. + */ + get tenant() { + return this.canonicalAuthorityUrlComponents.PathSegments[0]; + } + /** + * OAuth /authorize endpoint for requests + */ + get authorizationEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.authorization_endpoint); + } + else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth /token endpoint for requests + */ + get tokenEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.token_endpoint); + } + else { + throw createClientAuthError(endpointResolutionError); + } + } + get deviceCodeEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.token_endpoint.replace("/token", "/devicecode")); + } + else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth logout endpoint for requests + */ + get endSessionEndpoint() { + if (this.discoveryComplete()) { + // ROPC policies may not have end_session_endpoint set + if (!this.metadata.end_session_endpoint) { + throw createClientAuthError(endSessionEndpointNotSupported); + } + return this.replacePath(this.metadata.end_session_endpoint); + } + else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth issuer for requests + */ + get selfSignedJwtAudience() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.issuer); + } + else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * Jwks_uri for token signing keys + */ + get jwksUri() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.jwks_uri); + } + else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * Returns a flag indicating that tenant name can be replaced in authority {@link IUri} + * @param authorityUri {@link IUri} + * @private + */ + canReplaceTenant(authorityUri) { + return (authorityUri.PathSegments.length === 1 && + !Authority.reservedTenantDomains.has(authorityUri.PathSegments[0]) && + this.getAuthorityType(authorityUri) === AuthorityType.Default && + this.protocolMode === ProtocolMode.AAD); + } + /** + * Replaces tenant in url path with current tenant. Defaults to common. + * @param urlString + */ + replaceTenant(urlString) { + return urlString.replace(/{tenant}|{tenantid}/g, this.tenant); + } + /** + * Replaces path such as tenant or policy with the current tenant or policy. + * @param urlString + */ + replacePath(urlString) { + let endpoint = urlString; + const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority); + const cachedAuthorityUrlComponents = cachedAuthorityUrl.getUrlComponents(); + const cachedAuthorityParts = cachedAuthorityUrlComponents.PathSegments; + const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments; + currentAuthorityParts.forEach((currentPart, index) => { + let cachedPart = cachedAuthorityParts[index]; + if (index === 0 && + this.canReplaceTenant(cachedAuthorityUrlComponents)) { + const tenantId = new UrlString(this.metadata.authorization_endpoint).getUrlComponents().PathSegments[0]; + /** + * Check if AAD canonical authority contains tenant domain name, for example "testdomain.onmicrosoft.com", + * by comparing its first path segment to the corresponding authorization endpoint path segment, which is + * always resolved with tenant id by OIDC. + */ + if (cachedPart !== tenantId) { + this.logger.verbose(`Replacing tenant domain name ${cachedPart} with id ${tenantId}`); + cachedPart = tenantId; + } + } + if (currentPart !== cachedPart) { + endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`); + } + }); + return this.replaceTenant(endpoint); + } + /** + * The default open id configuration endpoint for any canonical authority. + */ + get defaultOpenIdConfigurationEndpoint() { + const canonicalAuthorityHost = this.hostnameAndPort; + if (this.canonicalAuthority.endsWith("v2.0/") || + this.authorityType === AuthorityType.Adfs || + (this.protocolMode !== ProtocolMode.AAD && + !this.isAliasOfKnownMicrosoftAuthority(canonicalAuthorityHost))) { + return `${this.canonicalAuthority}.well-known/openid-configuration`; + } + return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`; + } + /** + * Boolean that returns whether or not tenant discovery has been completed. + */ + discoveryComplete() { + return !!this.metadata; + } + /** + * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network + * and the /authorize, /token and logout endpoints. + */ + async resolveEndpointsAsync() { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityResolveEndpointsAsync, this.correlationId); + const metadataEntity = this.getCurrentMetadataEntity(); + const cloudDiscoverySource = await invokeAsync(this.updateCloudDiscoveryMetadata.bind(this), PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity); + this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network); + const endpointSource = await invokeAsync(this.updateEndpointMetadata.bind(this), PerformanceEvents.AuthorityUpdateEndpointMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity); + this.updateCachedMetadata(metadataEntity, cloudDiscoverySource, { + source: endpointSource, + }); + this.performanceClient?.addFields({ + cloudDiscoverySource: cloudDiscoverySource, + authorityEndpointSource: endpointSource, + }, this.correlationId); + } + /** + * Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built + * from the configured canonical authority + * @returns + */ + getCurrentMetadataEntity() { + let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort); + if (!metadataEntity) { + metadataEntity = { + aliases: [], + preferred_cache: this.hostnameAndPort, + preferred_network: this.hostnameAndPort, + canonical_authority: this.canonicalAuthority, + authorization_endpoint: "", + token_endpoint: "", + end_session_endpoint: "", + issuer: "", + aliasesFromNetwork: false, + endpointsFromNetwork: false, + expiresAt: generateAuthorityMetadataExpiresAt(), + jwks_uri: "", + }; + } + return metadataEntity; + } + /** + * Updates cached metadata based on metadata source and sets the instance's metadata + * property to the same value + * @param metadataEntity + * @param cloudDiscoverySource + * @param endpointMetadataResult + */ + updateCachedMetadata(metadataEntity, cloudDiscoverySource, endpointMetadataResult) { + if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE && + endpointMetadataResult?.source !== AuthorityMetadataSource.CACHE) { + // Reset the expiration time unless both values came from a successful cache lookup + metadataEntity.expiresAt = + generateAuthorityMetadataExpiresAt(); + metadataEntity.canonical_authority = this.canonicalAuthority; + } + const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache); + this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity); + this.metadata = metadataEntity; + } + /** + * Update AuthorityMetadataEntity with new endpoints and return where the information came from + * @param metadataEntity + */ + async updateEndpointMetadata(metadataEntity) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateEndpointMetadata, this.correlationId); + const localMetadata = this.updateEndpointMetadataFromLocalSources(metadataEntity); + // Further update may be required for hardcoded metadata if regional metadata is preferred + if (localMetadata) { + if (localMetadata.source === + AuthorityMetadataSource.HARDCODED_VALUES) { + // If the user prefers to use an azure region replace the global endpoints with regional information. + if (this.authorityOptions.azureRegionConfiguration?.azureRegion) { + if (localMetadata.metadata) { + const hardcodedMetadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(localMetadata.metadata); + updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false); + metadataEntity.canonical_authority = + this.canonicalAuthority; + } + } + } + return localMetadata.source; + } + // Get metadata from network if local sources aren't available + let metadata = await invokeAsync(this.getEndpointMetadataFromNetwork.bind(this), PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)(); + if (metadata) { + // If the user prefers to use an azure region replace the global endpoints with regional information. + if (this.authorityOptions.azureRegionConfiguration?.azureRegion) { + metadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(metadata); + } + updateAuthorityEndpointMetadata(metadataEntity, metadata, true); + return AuthorityMetadataSource.NETWORK; + } + else { + // Metadata could not be obtained from the config, cache, network or hardcoded values + throw createClientAuthError(openIdConfigError, this.defaultOpenIdConfigurationEndpoint); + } + } + /** + * Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config + * response if the source is hardcoded metadata + * @param metadataEntity + * @returns + */ + updateEndpointMetadataFromLocalSources(metadataEntity) { + this.logger.verbose("Attempting to get endpoint metadata from authority configuration"); + const configMetadata = this.getEndpointMetadataFromConfig(); + if (configMetadata) { + this.logger.verbose("Found endpoint metadata in authority configuration"); + updateAuthorityEndpointMetadata(metadataEntity, configMetadata, false); + return { + source: AuthorityMetadataSource.CONFIG, + }; + } + this.logger.verbose("Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values."); + // skipAuthorityMetadataCache is used to bypass hardcoded authority metadata and force a network metadata cache lookup and network metadata request if no cached response is available. + if (this.authorityOptions.skipAuthorityMetadataCache) { + this.logger.verbose("Skipping hardcoded metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get endpoint metadata from the network metadata cache."); + } + else { + const hardcodedMetadata = this.getEndpointMetadataFromHardcodedValues(); + if (hardcodedMetadata) { + updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false); + return { + source: AuthorityMetadataSource.HARDCODED_VALUES, + metadata: hardcodedMetadata, + }; + } + else { + this.logger.verbose("Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache."); + } + } + // Check cached metadata entity expiration status + const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity); + if (this.isAuthoritySameType(metadataEntity) && + metadataEntity.endpointsFromNetwork && + !metadataEntityExpired) { + // No need to update + this.logger.verbose("Found endpoint metadata in the cache."); + return { source: AuthorityMetadataSource.CACHE }; + } + else if (metadataEntityExpired) { + this.logger.verbose("The metadata entity is expired."); + } + return null; + } + /** + * Compares the number of url components after the domain to determine if the cached + * authority metadata can be used for the requested authority. Protects against same domain different + * authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy + * @param metadataEntity + */ + isAuthoritySameType(metadataEntity) { + const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority); + const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments; + return (cachedParts.length === + this.canonicalAuthorityUrlComponents.PathSegments.length); + } + /** + * Parse authorityMetadata config option + */ + getEndpointMetadataFromConfig() { + if (this.authorityOptions.authorityMetadata) { + try { + return JSON.parse(this.authorityOptions.authorityMetadata); + } + catch (e) { + throw createClientConfigurationError(invalidAuthorityMetadata); + } + } + return null; + } + /** + * Gets OAuth endpoints from the given OpenID configuration endpoint. + * + * @param hasHardcodedMetadata boolean + */ + async getEndpointMetadataFromNetwork() { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.correlationId); + const options = {}; + /* + * TODO: Add a timeout if the authority exists in our library's + * hardcoded list of metadata + */ + const openIdConfigurationEndpoint = this.defaultOpenIdConfigurationEndpoint; + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from ${openIdConfigurationEndpoint}`); + try { + const response = await this.networkInterface.sendGetRequestAsync(openIdConfigurationEndpoint, options); + const isValidResponse = isOpenIdConfigResponse(response.body); + if (isValidResponse) { + return response.body; + } + else { + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration`); + return null; + } + } + catch (e) { + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: ${e}`); + return null; + } + } + /** + * Get OAuth endpoints for common authorities. + */ + getEndpointMetadataFromHardcodedValues() { + if (this.hostnameAndPort in EndpointMetadata) { + return EndpointMetadata[this.hostnameAndPort]; + } + return null; + } + /** + * Update the retrieved metadata with regional information. + * User selected Azure region will be used if configured. + */ + async updateMetadataWithRegionalInformation(metadata) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.correlationId); + const userConfiguredAzureRegion = this.authorityOptions.azureRegionConfiguration?.azureRegion; + if (userConfiguredAzureRegion) { + if (userConfiguredAzureRegion !== + Constants$1.AZURE_REGION_AUTO_DISCOVER_FLAG) { + this.regionDiscoveryMetadata.region_outcome = + RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION; + this.regionDiscoveryMetadata.region_used = + userConfiguredAzureRegion; + return Authority.replaceWithRegionalInformation(metadata, userConfiguredAzureRegion); + } + const autodetectedRegionName = await invokeAsync(this.regionDiscovery.detectRegion.bind(this.regionDiscovery), PerformanceEvents.RegionDiscoveryDetectRegion, this.logger, this.performanceClient, this.correlationId)(this.authorityOptions.azureRegionConfiguration + ?.environmentRegion, this.regionDiscoveryMetadata); + if (autodetectedRegionName) { + this.regionDiscoveryMetadata.region_outcome = + RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL; + this.regionDiscoveryMetadata.region_used = + autodetectedRegionName; + return Authority.replaceWithRegionalInformation(metadata, autodetectedRegionName); + } + this.regionDiscoveryMetadata.region_outcome = + RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED; + } + return metadata; + } + /** + * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache + * and returns where the information was retrieved from + * @param metadataEntity + * @returns AuthorityMetadataSource + */ + async updateCloudDiscoveryMetadata(metadataEntity) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.correlationId); + const localMetadataSource = this.updateCloudDiscoveryMetadataFromLocalSources(metadataEntity); + if (localMetadataSource) { + return localMetadataSource; + } + // Fallback to network as metadata source + const metadata = await invokeAsync(this.getCloudDiscoveryMetadataFromNetwork.bind(this), PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)(); + if (metadata) { + updateCloudDiscoveryMetadata(metadataEntity, metadata, true); + return AuthorityMetadataSource.NETWORK; + } + // Metadata could not be obtained from the config, cache, network or hardcoded values + throw createClientConfigurationError(untrustedAuthority); + } + updateCloudDiscoveryMetadataFromLocalSources(metadataEntity) { + this.logger.verbose("Attempting to get cloud discovery metadata from authority configuration"); + this.logger.verbosePii(`Known Authorities: ${this.authorityOptions.knownAuthorities || + Constants$1.NOT_APPLICABLE}`); + this.logger.verbosePii(`Authority Metadata: ${this.authorityOptions.authorityMetadata || + Constants$1.NOT_APPLICABLE}`); + this.logger.verbosePii(`Canonical Authority: ${metadataEntity.canonical_authority || Constants$1.NOT_APPLICABLE}`); + const metadata = this.getCloudDiscoveryMetadataFromConfig(); + if (metadata) { + this.logger.verbose("Found cloud discovery metadata in authority configuration"); + updateCloudDiscoveryMetadata(metadataEntity, metadata, false); + return AuthorityMetadataSource.CONFIG; + } + // If the cached metadata came from config but that config was not passed to this instance, we must go to hardcoded values + this.logger.verbose("Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values."); + if (this.options.skipAuthorityMetadataCache) { + this.logger.verbose("Skipping hardcoded cloud discovery metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get cloud discovery metadata from the network metadata cache."); + } + else { + const hardcodedMetadata = getCloudDiscoveryMetadataFromHardcodedValues(this.hostnameAndPort); + if (hardcodedMetadata) { + this.logger.verbose("Found cloud discovery metadata from hardcoded values."); + updateCloudDiscoveryMetadata(metadataEntity, hardcodedMetadata, false); + return AuthorityMetadataSource.HARDCODED_VALUES; + } + this.logger.verbose("Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache."); + } + const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity); + if (this.isAuthoritySameType(metadataEntity) && + metadataEntity.aliasesFromNetwork && + !metadataEntityExpired) { + this.logger.verbose("Found cloud discovery metadata in the cache."); + // No need to update + return AuthorityMetadataSource.CACHE; + } + else if (metadataEntityExpired) { + this.logger.verbose("The metadata entity is expired."); + } + return null; + } + /** + * Parse cloudDiscoveryMetadata config or check knownAuthorities + */ + getCloudDiscoveryMetadataFromConfig() { + // CIAM does not support cloud discovery metadata + if (this.authorityType === AuthorityType.Ciam) { + this.logger.verbose("CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host."); + return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + // Check if network response was provided in config + if (this.authorityOptions.cloudDiscoveryMetadata) { + this.logger.verbose("The cloud discovery metadata has been provided as a network response, in the config."); + try { + this.logger.verbose("Attempting to parse the cloud discovery metadata."); + const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata); + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(parsedResponse.metadata, this.hostnameAndPort); + this.logger.verbose("Parsed the cloud discovery metadata."); + if (metadata) { + this.logger.verbose("There is returnable metadata attached to the parsed cloud discovery metadata."); + return metadata; + } + else { + this.logger.verbose("There is no metadata attached to the parsed cloud discovery metadata."); + } + } + catch (e) { + this.logger.verbose("Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error."); + throw createClientConfigurationError(invalidCloudDiscoveryMetadata); + } + } + // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities + if (this.isInKnownAuthorities()) { + this.logger.verbose("The host is included in knownAuthorities. Creating new cloud discovery metadata from the host."); + return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + return null; + } + /** + * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config + * + * @param hasHardcodedMetadata boolean + */ + async getCloudDiscoveryMetadataFromNetwork() { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.correlationId); + const instanceDiscoveryEndpoint = `${Constants$1.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`; + const options = {}; + /* + * TODO: Add a timeout if the authority exists in our library's + * hardcoded list of metadata + */ + let match = null; + try { + const response = await this.networkInterface.sendGetRequestAsync(instanceDiscoveryEndpoint, options); + let typedResponseBody; + let metadata; + if (isCloudInstanceDiscoveryResponse(response.body)) { + typedResponseBody = + response.body; + metadata = typedResponseBody.metadata; + this.logger.verbosePii(`tenant_discovery_endpoint is: ${typedResponseBody.tenant_discovery_endpoint}`); + } + else if (isCloudInstanceDiscoveryErrorResponse(response.body)) { + this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: ${response.status}`); + typedResponseBody = + response.body; + if (typedResponseBody.error === Constants$1.INVALID_INSTANCE) { + this.logger.error("The CloudInstanceDiscoveryErrorResponse error is invalid_instance."); + return null; + } + this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is ${typedResponseBody.error}`); + this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is ${typedResponseBody.error_description}`); + this.logger.warning("Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network) to []"); + metadata = []; + } + else { + this.logger.error("AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse"); + return null; + } + this.logger.verbose("Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request."); + match = getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort); + } + catch (error) { + if (error instanceof AuthError) { + this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata.\nError: ${error.errorCode}\nError Description: ${error.errorMessage}`); + } + else { + const typedError = error; + this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata.\nError: ${typedError.name}\nError Description: ${typedError.message}`); + } + return null; + } + // Custom Domain scenario, host is trusted because Instance Discovery call succeeded + if (!match) { + this.logger.warning("The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request."); + this.logger.verbose("Creating custom Authority for custom domain scenario."); + match = Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + return match; + } + /** + * Helper function to determine if this host is included in the knownAuthorities config option + */ + isInKnownAuthorities() { + const matches = this.authorityOptions.knownAuthorities.filter((authority) => { + return (authority && + UrlString.getDomainFromUrl(authority).toLowerCase() === + this.hostnameAndPort); + }); + return matches.length > 0; + } + /** + * helper function to populate the authority based on azureCloudOptions + * @param authorityString + * @param azureCloudOptions + */ + static generateAuthority(authorityString, azureCloudOptions) { + let authorityAzureCloudInstance; + if (azureCloudOptions && + azureCloudOptions.azureCloudInstance !== AzureCloudInstance.None) { + const tenant = azureCloudOptions.tenant + ? azureCloudOptions.tenant + : Constants$1.DEFAULT_COMMON_TENANT; + authorityAzureCloudInstance = `${azureCloudOptions.azureCloudInstance}/${tenant}/`; + } + return authorityAzureCloudInstance + ? authorityAzureCloudInstance + : authorityString; + } + /** + * Creates cloud discovery metadata object from a given host + * @param host + */ + static createCloudDiscoveryMetadataFromHost(host) { + return { + preferred_network: host, + preferred_cache: host, + aliases: [host], + }; + } + /** + * helper function to generate environment from authority object + */ + getPreferredCache() { + if (this.managedIdentity) { + return Constants$1.DEFAULT_AUTHORITY_HOST; + } + else if (this.discoveryComplete()) { + return this.metadata.preferred_cache; + } + else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * Returns whether or not the provided host is an alias of this authority instance + * @param host + */ + isAlias(host) { + return this.metadata.aliases.indexOf(host) > -1; + } + /** + * Returns whether or not the provided host is an alias of a known Microsoft authority for purposes of endpoint discovery + * @param host + */ + isAliasOfKnownMicrosoftAuthority(host) { + return InstanceDiscoveryMetadataAliases.has(host); + } + /** + * Checks whether the provided host is that of a public cloud authority + * + * @param authority string + * @returns bool + */ + static isPublicCloudAuthority(host) { + return Constants$1.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0; + } + /** + * Rebuild the authority string with the region + * + * @param host string + * @param region string + */ + static buildRegionalAuthorityString(host, region, queryString) { + // Create and validate a Url string object with the initial authority string + const authorityUrlInstance = new UrlString(host); + authorityUrlInstance.validateAsUri(); + const authorityUrlParts = authorityUrlInstance.getUrlComponents(); + let hostNameAndPort = `${region}.${authorityUrlParts.HostNameAndPort}`; + if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) { + hostNameAndPort = `${region}.${Constants$1.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`; + } + // Include the query string portion of the url + const url = UrlString.constructAuthorityUriFromObject({ + ...authorityUrlInstance.getUrlComponents(), + HostNameAndPort: hostNameAndPort, + }).urlString; + // Add the query string if a query string was provided + if (queryString) + return `${url}?${queryString}`; + return url; + } + /** + * Replace the endpoints in the metadata object with their regional equivalents. + * + * @param metadata OpenIdConfigResponse + * @param azureRegion string + */ + static replaceWithRegionalInformation(metadata, azureRegion) { + const regionalMetadata = { ...metadata }; + regionalMetadata.authorization_endpoint = + Authority.buildRegionalAuthorityString(regionalMetadata.authorization_endpoint, azureRegion); + regionalMetadata.token_endpoint = + Authority.buildRegionalAuthorityString(regionalMetadata.token_endpoint, azureRegion); + if (regionalMetadata.end_session_endpoint) { + regionalMetadata.end_session_endpoint = + Authority.buildRegionalAuthorityString(regionalMetadata.end_session_endpoint, azureRegion); + } + return regionalMetadata; + } + /** + * Transform CIAM_AUTHORIY as per the below rules: + * If no path segments found and it is a CIAM authority (hostname ends with .ciamlogin.com), then transform it + * + * NOTE: The transformation path should go away once STS supports CIAM with the format: `tenantIdorDomain.ciamlogin.com` + * `ciamlogin.com` can also change in the future and we should accommodate the same + * + * @param authority + */ + static transformCIAMAuthority(authority) { + let ciamAuthority = authority; + const authorityUrl = new UrlString(authority); + const authorityUrlComponents = authorityUrl.getUrlComponents(); + // check if transformation is needed + if (authorityUrlComponents.PathSegments.length === 0 && + authorityUrlComponents.HostNameAndPort.endsWith(Constants$1.CIAM_AUTH_URL)) { + const tenantIdOrDomain = authorityUrlComponents.HostNameAndPort.split(".")[0]; + ciamAuthority = `${ciamAuthority}${tenantIdOrDomain}${Constants$1.AAD_TENANT_DOMAIN_SUFFIX}`; + } + return ciamAuthority; + } +} +// Reserved tenant domain names that will not be replaced with tenant id +Authority.reservedTenantDomains = new Set([ + "{tenant}", + "{tenantid}", + AADAuthorityConstants.COMMON, + AADAuthorityConstants.CONSUMERS, + AADAuthorityConstants.ORGANIZATIONS, +]); +/** + * Extract tenantId from authority + */ +function getTenantFromAuthorityString(authority) { + const authorityUrl = new UrlString(authority); + const authorityUrlComponents = authorityUrl.getUrlComponents(); + /** + * For credential matching purposes, tenantId is the last path segment of the authority URL: + * AAD Authority - domain/tenantId -> Credentials are cached with realm = tenantId + * B2C Authority - domain/{tenantId}?/.../policy -> Credentials are cached with realm = policy + * tenantId is downcased because B2C policies can have mixed case but tfp claim is downcased + * + * Note that we may not have any path segments in certain OIDC scenarios. + */ + const tenantId = authorityUrlComponents.PathSegments.slice(-1)[0]?.toLowerCase(); + switch (tenantId) { + case AADAuthorityConstants.COMMON: + case AADAuthorityConstants.ORGANIZATIONS: + case AADAuthorityConstants.CONSUMERS: + return undefined; + default: + return tenantId; + } +} +function formatAuthorityUri(authorityUri) { + return authorityUri.endsWith(Constants$1.FORWARD_SLASH) + ? authorityUri + : `${authorityUri}${Constants$1.FORWARD_SLASH}`; +} +function buildStaticAuthorityOptions(authOptions) { + const rawCloudDiscoveryMetadata = authOptions.cloudDiscoveryMetadata; + let cloudDiscoveryMetadata = undefined; + if (rawCloudDiscoveryMetadata) { + try { + cloudDiscoveryMetadata = JSON.parse(rawCloudDiscoveryMetadata); + } + catch (e) { + throw createClientConfigurationError(invalidCloudDiscoveryMetadata); + } + } + return { + canonicalAuthority: authOptions.authority + ? formatAuthorityUri(authOptions.authority) + : undefined, + knownAuthorities: authOptions.knownAuthorities, + cloudDiscoveryMetadata: cloudDiscoveryMetadata, + }; +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Create an authority object of the correct type based on the url + * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs) + * + * Also performs endpoint discovery. + * + * @param authorityUri + * @param networkClient + * @param protocolMode + * @internal + */ +async function createDiscoveredInstance(authorityUri, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient) { + performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, correlationId); + const authorityUriFinal = Authority.transformCIAMAuthority(formatAuthorityUri(authorityUri)); + // Initialize authority and perform discovery endpoint check. + const acquireTokenAuthority = new Authority(authorityUriFinal, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient); + try { + await invokeAsync(acquireTokenAuthority.resolveEndpointsAsync.bind(acquireTokenAuthority), PerformanceEvents.AuthorityResolveEndpointsAsync, logger, performanceClient, correlationId)(); + return acquireTokenAuthority; + } + catch (e) { + throw createClientAuthError(endpointResolutionError); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow. + * @internal + */ +class BaseClient { + constructor(configuration, performanceClient) { + // Set the configuration + this.config = buildClientConfiguration(configuration); + // Initialize the logger + this.logger = new Logger(this.config.loggerOptions, name$1, version$1); + // Initialize crypto + this.cryptoUtils = this.config.cryptoInterface; + // Initialize storage interface + this.cacheManager = this.config.storageInterface; + // Set the network interface + this.networkClient = this.config.networkInterface; + // Set the NetworkManager + this.networkManager = new NetworkManager(this.networkClient, this.cacheManager); + // Set TelemetryManager + this.serverTelemetryManager = this.config.serverTelemetryManager; + // set Authority + this.authority = this.config.authOptions.authority; + // set performance telemetry client + this.performanceClient = performanceClient; + } + /** + * Creates default headers for requests to token endpoint + */ + createTokenRequestHeaders(ccsCred) { + const headers = {}; + headers[HeaderNames.CONTENT_TYPE] = Constants$1.URL_FORM_CONTENT_TYPE; + if (!this.config.systemOptions.preventCorsPreflight && ccsCred) { + switch (ccsCred.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); + headers[HeaderNames.CCS_HEADER] = `Oid:${clientInfo.uid}@${clientInfo.utid}`; + } + catch (e) { + this.logger.verbose("Could not parse home account ID for CCS Header: " + + e); + } + break; + case CcsCredentialType.UPN: + headers[HeaderNames.CCS_HEADER] = `UPN: ${ccsCred.credential}`; + break; + } + } + return headers; + } + /** + * Http post to token endpoint + * @param tokenEndpoint + * @param queryString + * @param headers + * @param thumbprint + */ + async executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, queuedEvent) { + if (queuedEvent) { + this.performanceClient?.addQueueMeasurement(queuedEvent, correlationId); + } + const response = await this.networkManager.sendPostRequest(thumbprint, tokenEndpoint, { body: queryString, headers: headers }); + this.performanceClient?.addFields({ + refreshTokenSize: response.body.refresh_token?.length || 0, + httpVerToken: response.headers?.[HeaderNames.X_MS_HTTP_VERSION] || "", + }, correlationId); + if (this.config.serverTelemetryManager && + response.status < 500 && + response.status !== 429) { + // Telemetry data successfully logged by server, clear Telemetry cache + this.config.serverTelemetryManager.clearTelemetryCache(); + } + return response; + } + /** + * Updates the authority object of the client. Endpoint discovery must be completed. + * @param updatedAuthority + */ + async updateAuthority(cloudInstanceHostname, correlationId) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, correlationId); + const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${this.authority.tenant}/`; + const cloudInstanceAuthority = await createDiscoveredInstance(cloudInstanceAuthorityUri, this.networkClient, this.cacheManager, this.authority.options, this.logger, correlationId, this.performanceClient); + this.authority = cloudInstanceAuthority; + } + /** + * Creates query string for the /token request + * @param request + */ + createTokenQueryParameters(request) { + const parameterBuilder = new RequestParameterBuilder(); + if (request.tokenQueryParameters) { + parameterBuilder.addExtraQueryParameters(request.tokenQueryParameters); + } + return parameterBuilder.createQueryString(); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// Codes defined by MSAL +const noTokensFound = "no_tokens_found"; +const nativeAccountUnavailable = "native_account_unavailable"; +const refreshTokenExpired = "refresh_token_expired"; +// Codes potentially returned by server +const interactionRequired = "interaction_required"; +const consentRequired = "consent_required"; +const loginRequired = "login_required"; +const badToken = "bad_token"; + +var InteractionRequiredAuthErrorCodes = /*#__PURE__*/Object.freeze({ + __proto__: null, + badToken: badToken, + consentRequired: consentRequired, + interactionRequired: interactionRequired, + loginRequired: loginRequired, + nativeAccountUnavailable: nativeAccountUnavailable, + noTokensFound: noTokensFound, + refreshTokenExpired: refreshTokenExpired +}); + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * InteractionRequiredServerErrorMessage contains string constants used by error codes and messages returned by the server indicating interaction is required + */ +const InteractionRequiredServerErrorMessage = [ + interactionRequired, + consentRequired, + loginRequired, + badToken, +]; +const InteractionRequiredAuthSubErrorMessage = [ + "message_only", + "additional_action", + "basic_action", + "user_password_expired", + "consent_required", + "bad_token", +]; +const InteractionRequiredAuthErrorMessages = { + [noTokensFound]: "No refresh token found in the cache. Please sign-in.", + [nativeAccountUnavailable]: "The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.", + [refreshTokenExpired]: "Refresh token has expired.", + [badToken]: "Identity provider returned bad_token due to an expired or invalid refresh token. Please invoke an interactive API to resolve.", +}; +/** + * Interaction required errors defined by the SDK + * @deprecated Use InteractionRequiredAuthErrorCodes instead + */ +const InteractionRequiredAuthErrorMessage = { + noTokensFoundError: { + code: noTokensFound, + desc: InteractionRequiredAuthErrorMessages[noTokensFound], + }, + native_account_unavailable: { + code: nativeAccountUnavailable, + desc: InteractionRequiredAuthErrorMessages[nativeAccountUnavailable], + }, + bad_token: { + code: badToken, + desc: InteractionRequiredAuthErrorMessages[badToken], + }, +}; +/** + * Error thrown when user interaction is required. + */ +class InteractionRequiredAuthError extends AuthError { + constructor(errorCode, errorMessage, subError, timestamp, traceId, correlationId, claims, errorNo) { + super(errorCode, errorMessage, subError); + Object.setPrototypeOf(this, InteractionRequiredAuthError.prototype); + this.timestamp = timestamp || Constants$1.EMPTY_STRING; + this.traceId = traceId || Constants$1.EMPTY_STRING; + this.correlationId = correlationId || Constants$1.EMPTY_STRING; + this.claims = claims || Constants$1.EMPTY_STRING; + this.name = "InteractionRequiredAuthError"; + this.errorNo = errorNo; + } +} +/** + * Helper function used to determine if an error thrown by the server requires interaction to resolve + * @param errorCode + * @param errorString + * @param subError + */ +function isInteractionRequiredError(errorCode, errorString, subError) { + const isInteractionRequiredErrorCode = !!errorCode && + InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1; + const isInteractionRequiredSubError = !!subError && + InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1; + const isInteractionRequiredErrorDesc = !!errorString && + InteractionRequiredServerErrorMessage.some((irErrorCode) => { + return errorString.indexOf(irErrorCode) > -1; + }); + return (isInteractionRequiredErrorCode || + isInteractionRequiredErrorDesc || + isInteractionRequiredSubError); +} +/** + * Creates an InteractionRequiredAuthError + */ +function createInteractionRequiredAuthError(errorCode) { + return new InteractionRequiredAuthError(errorCode, InteractionRequiredAuthErrorMessages[errorCode]); +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Class which provides helpers for OAuth 2.0 protocol specific values + */ +class ProtocolUtils { + /** + * Appends user state with random guid, or returns random guid. + * @param userState + * @param randomGuid + */ + static setRequestState(cryptoObj, userState, meta) { + const libraryState = ProtocolUtils.generateLibraryState(cryptoObj, meta); + return userState + ? `${libraryState}${Constants$1.RESOURCE_DELIM}${userState}` + : libraryState; + } + /** + * Generates the state value used by the common library. + * @param randomGuid + * @param cryptoObj + */ + static generateLibraryState(cryptoObj, meta) { + if (!cryptoObj) { + throw createClientAuthError(noCryptoObject); + } + // Create a state object containing a unique id and the timestamp of the request creation + const stateObj = { + id: cryptoObj.createNewGuid(), + }; + if (meta) { + stateObj.meta = meta; + } + const stateString = JSON.stringify(stateObj); + return cryptoObj.base64Encode(stateString); + } + /** + * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user. + * @param state + * @param cryptoObj + */ + static parseRequestState(cryptoObj, state) { + if (!cryptoObj) { + throw createClientAuthError(noCryptoObject); + } + if (!state) { + throw createClientAuthError(invalidState); + } + try { + // Split the state between library state and user passed state and decode them separately + const splitState = state.split(Constants$1.RESOURCE_DELIM); + const libraryState = splitState[0]; + const userState = splitState.length > 1 + ? splitState.slice(1).join(Constants$1.RESOURCE_DELIM) + : Constants$1.EMPTY_STRING; + const libraryStateString = cryptoObj.base64Decode(libraryState); + const libraryStateObj = JSON.parse(libraryStateString); + return { + userRequestState: userState || Constants$1.EMPTY_STRING, + libraryState: libraryStateObj, + }; + } + catch (e) { + throw createClientAuthError(invalidState); + } + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const KeyLocation = { + SW: "sw", + UHW: "uhw", +}; +/** @internal */ +class PopTokenGenerator { + constructor(cryptoUtils, performanceClient) { + this.cryptoUtils = cryptoUtils; + this.performanceClient = performanceClient; + } + /** + * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters + * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash + * @param request + * @returns + */ + async generateCnf(request, logger) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.PopTokenGenerateCnf, request.correlationId); + const reqCnf = await invokeAsync(this.generateKid.bind(this), PerformanceEvents.PopTokenGenerateCnf, logger, this.performanceClient, request.correlationId)(request); + const reqCnfString = this.cryptoUtils.base64UrlEncode(JSON.stringify(reqCnf)); + return { + kid: reqCnf.kid, + reqCnfString, + }; + } + /** + * Generates key_id for a SHR token request + * @param request + * @returns + */ + async generateKid(request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.PopTokenGenerateKid, request.correlationId); + const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(request); + return { + kid: kidThumbprint, + xms_ksl: KeyLocation.SW, + }; + } + /** + * Signs the POP access_token with the local generated key-pair + * @param accessToken + * @param request + * @returns + */ + async signPopToken(accessToken, keyId, request) { + return this.signPayload(accessToken, keyId, request); + } + /** + * Utility function to generate the signed JWT for an access_token + * @param payload + * @param kid + * @param request + * @param claims + * @returns + */ + async signPayload(payload, keyId, request, claims) { + // Deconstruct request to extract SHR parameters + const { resourceRequestMethod, resourceRequestUri, shrClaims, shrNonce, shrOptions, } = request; + const resourceUrlString = resourceRequestUri + ? new UrlString(resourceRequestUri) + : undefined; + const resourceUrlComponents = resourceUrlString?.getUrlComponents(); + return this.cryptoUtils.signJwt({ + at: payload, + ts: nowSeconds(), + m: resourceRequestMethod?.toUpperCase(), + u: resourceUrlComponents?.HostNameAndPort, + nonce: shrNonce || this.cryptoUtils.createNewGuid(), + p: resourceUrlComponents?.AbsolutePath, + q: resourceUrlComponents?.QueryString + ? [[], resourceUrlComponents.QueryString] + : undefined, + client_claims: shrClaims || undefined, + ...claims, + }, keyId, shrOptions, request.correlationId); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class instance helps track the memory changes facilitating + * decisions to read from and write to the persistent cache + */ class TokenCacheContext { + constructor(tokenCache, hasChanged) { + this.cache = tokenCache; + this.hasChanged = hasChanged; + } + /** + * boolean which indicates the changes in cache + */ + get cacheHasChanged() { + return this.hasChanged; + } + /** + * function to retrieve the token cache + */ + get tokenCache() { + return this.cache; + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function parseServerErrorNo(serverResponse) { + const errorCodePrefix = "code="; + const errorCodePrefixIndex = serverResponse.error_uri?.lastIndexOf(errorCodePrefix); + return errorCodePrefixIndex && errorCodePrefixIndex >= 0 + ? serverResponse.error_uri?.substring(errorCodePrefixIndex + errorCodePrefix.length) + : undefined; +} +/** + * Class that handles response parsing. + * @internal + */ +class ResponseHandler { + constructor(clientId, cacheStorage, cryptoObj, logger, serializableCache, persistencePlugin, performanceClient) { + this.clientId = clientId; + this.cacheStorage = cacheStorage; + this.cryptoObj = cryptoObj; + this.logger = logger; + this.serializableCache = serializableCache; + this.persistencePlugin = persistencePlugin; + this.performanceClient = performanceClient; + } + /** + * Function which validates server authorization code response. + * @param serverResponseHash + * @param requestState + * @param cryptoObj + */ + validateServerAuthorizationCodeResponse(serverResponse, requestState) { + if (!serverResponse.state || !requestState) { + throw serverResponse.state + ? createClientAuthError(stateNotFound, "Cached State") + : createClientAuthError(stateNotFound, "Server State"); + } + let decodedServerResponseState; + let decodedRequestState; + try { + decodedServerResponseState = decodeURIComponent(serverResponse.state); + } + catch (e) { + throw createClientAuthError(invalidState, serverResponse.state); + } + try { + decodedRequestState = decodeURIComponent(requestState); + } + catch (e) { + throw createClientAuthError(invalidState, serverResponse.state); + } + if (decodedServerResponseState !== decodedRequestState) { + throw createClientAuthError(stateMismatch); + } + // Check for error + if (serverResponse.error || + serverResponse.error_description || + serverResponse.suberror) { + const serverErrorNo = parseServerErrorNo(serverResponse); + if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) { + throw new InteractionRequiredAuthError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || "", serverResponse.trace_id || "", serverResponse.correlation_id || "", serverResponse.claims || "", serverErrorNo); + } + throw new ServerError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverErrorNo); + } + } + /** + * Function which validates server authorization token response. + * @param serverResponse + * @param refreshAccessToken + */ + validateTokenResponse(serverResponse, refreshAccessToken) { + // Check for error + if (serverResponse.error || + serverResponse.error_description || + serverResponse.suberror) { + const errString = `Error(s): ${serverResponse.error_codes || Constants$1.NOT_AVAILABLE} - Timestamp: ${serverResponse.timestamp || Constants$1.NOT_AVAILABLE} - Description: ${serverResponse.error_description || Constants$1.NOT_AVAILABLE} - Correlation ID: ${serverResponse.correlation_id || Constants$1.NOT_AVAILABLE} - Trace ID: ${serverResponse.trace_id || Constants$1.NOT_AVAILABLE}`; + const serverErrorNo = serverResponse.error_codes?.length + ? serverResponse.error_codes[0] + : undefined; + const serverError = new ServerError(serverResponse.error, errString, serverResponse.suberror, serverErrorNo, serverResponse.status); + // check if 500 error + if (refreshAccessToken && + serverResponse.status && + serverResponse.status >= HttpStatus.SERVER_ERROR_RANGE_START && + serverResponse.status <= HttpStatus.SERVER_ERROR_RANGE_END) { + this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed.\n${serverError}`); + // don't throw an exception, but alert the user via a log that the token was unable to be refreshed + return; + // check if 400 error + } + else if (refreshAccessToken && + serverResponse.status && + serverResponse.status >= HttpStatus.CLIENT_ERROR_RANGE_START && + serverResponse.status <= HttpStatus.CLIENT_ERROR_RANGE_END) { + this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token.\n${serverError}`); + // don't throw an exception, but alert the user via a log that the token was unable to be refreshed + return; + } + if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) { + throw new InteractionRequiredAuthError(serverResponse.error, serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || Constants$1.EMPTY_STRING, serverResponse.trace_id || Constants$1.EMPTY_STRING, serverResponse.correlation_id || Constants$1.EMPTY_STRING, serverResponse.claims || Constants$1.EMPTY_STRING, serverErrorNo); + } + throw serverError; + } + } + /** + * Returns a constructed token response based on given string. Also manages the cache updates and cleanups. + * @param serverTokenResponse + * @param authority + */ + async handleServerTokenResponse(serverTokenResponse, authority, reqTimestamp, request, authCodePayload, userAssertionHash, handlingRefreshTokenResponse, forceCacheRefreshTokenResponse, serverRequestId) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.HandleServerTokenResponse, serverTokenResponse.correlation_id); + // create an idToken object (not entity) + let idTokenClaims; + if (serverTokenResponse.id_token) { + idTokenClaims = extractTokenClaims(serverTokenResponse.id_token || Constants$1.EMPTY_STRING, this.cryptoObj.base64Decode); + // token nonce check (TODO: Add a warning if no nonce is given?) + if (authCodePayload && authCodePayload.nonce) { + if (idTokenClaims.nonce !== authCodePayload.nonce) { + throw createClientAuthError(nonceMismatch); + } + } + // token max_age check + if (request.maxAge || request.maxAge === 0) { + const authTime = idTokenClaims.auth_time; + if (!authTime) { + throw createClientAuthError(authTimeNotFound); + } + checkMaxAge(authTime, request.maxAge); + } + } + // generate homeAccountId + this.homeAccountIdentifier = AccountEntity.generateHomeAccountId(serverTokenResponse.client_info || Constants$1.EMPTY_STRING, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims); + // save the response tokens + let requestStateObj; + if (!!authCodePayload && !!authCodePayload.state) { + requestStateObj = ProtocolUtils.parseRequestState(this.cryptoObj, authCodePayload.state); + } + // Add keyId from request to serverTokenResponse if defined + serverTokenResponse.key_id = + serverTokenResponse.key_id || request.sshKid || undefined; + const cacheRecord = this.generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload); + let cacheContext; + try { + if (this.persistencePlugin && this.serializableCache) { + this.logger.verbose("Persistence enabled, calling beforeCacheAccess"); + cacheContext = new TokenCacheContext(this.serializableCache, true); + await this.persistencePlugin.beforeCacheAccess(cacheContext); + } + /* + * When saving a refreshed tokens to the cache, it is expected that the account that was used is present in the cache. + * If not present, we should return null, as it's the case that another application called removeAccount in between + * the calls to getAllAccounts and acquireTokenSilent. We should not overwrite that removal, unless explicitly flagged by + * the developer, as in the case of refresh token flow used in ADAL Node to MSAL Node migration. + */ + if (handlingRefreshTokenResponse && + !forceCacheRefreshTokenResponse && + cacheRecord.account) { + const key = cacheRecord.account.generateAccountKey(); + const account = this.cacheStorage.getAccount(key, this.logger); + if (!account) { + this.logger.warning("Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache"); + return await ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenClaims, requestStateObj, undefined, serverRequestId); + } + } + await this.cacheStorage.saveCacheRecord(cacheRecord, request.storeInCache, request.correlationId); + } + finally { + if (this.persistencePlugin && + this.serializableCache && + cacheContext) { + this.logger.verbose("Persistence enabled, calling afterCacheAccess"); + await this.persistencePlugin.afterCacheAccess(cacheContext); + } + } + return ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenClaims, requestStateObj, serverTokenResponse, serverRequestId); + } + /** + * Generates CacheRecord + * @param serverTokenResponse + * @param idTokenObj + * @param authority + */ + generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload) { + const env = authority.getPreferredCache(); + if (!env) { + throw createClientAuthError(invalidCacheEnvironment); + } + const claimsTenantId = getTenantIdFromIdTokenClaims(idTokenClaims); + // IdToken: non AAD scenarios can have empty realm + let cachedIdToken; + let cachedAccount; + if (serverTokenResponse.id_token && !!idTokenClaims) { + cachedIdToken = createIdTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.id_token, this.clientId, claimsTenantId || ""); + cachedAccount = buildAccountToCache(this.cacheStorage, authority, this.homeAccountIdentifier, this.cryptoObj.base64Decode, idTokenClaims, serverTokenResponse.client_info, env, claimsTenantId, authCodePayload, undefined, // nativeAccountId + this.logger); + } + // AccessToken + let cachedAccessToken = null; + if (serverTokenResponse.access_token) { + // If scopes not returned in server response, use request scopes + const responseScopes = serverTokenResponse.scope + ? ScopeSet.fromString(serverTokenResponse.scope) + : new ScopeSet(request.scopes || []); + /* + * Use timestamp calculated before request + * Server may return timestamps as strings, parse to numbers if so. + */ + const expiresIn = (typeof serverTokenResponse.expires_in === "string" + ? parseInt(serverTokenResponse.expires_in, 10) + : serverTokenResponse.expires_in) || 0; + const extExpiresIn = (typeof serverTokenResponse.ext_expires_in === "string" + ? parseInt(serverTokenResponse.ext_expires_in, 10) + : serverTokenResponse.ext_expires_in) || 0; + const refreshIn = (typeof serverTokenResponse.refresh_in === "string" + ? parseInt(serverTokenResponse.refresh_in, 10) + : serverTokenResponse.refresh_in) || undefined; + const tokenExpirationSeconds = reqTimestamp + expiresIn; + const extendedTokenExpirationSeconds = tokenExpirationSeconds + extExpiresIn; + const refreshOnSeconds = refreshIn && refreshIn > 0 + ? reqTimestamp + refreshIn + : undefined; + // non AAD scenarios can have empty realm + cachedAccessToken = createAccessTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.access_token, this.clientId, claimsTenantId || authority.tenant || "", responseScopes.printScopes(), tokenExpirationSeconds, extendedTokenExpirationSeconds, this.cryptoObj.base64Decode, refreshOnSeconds, serverTokenResponse.token_type, userAssertionHash, serverTokenResponse.key_id, request.claims, request.requestedClaimsHash); + } + // refreshToken + let cachedRefreshToken = null; + if (serverTokenResponse.refresh_token) { + let rtExpiresOn; + if (serverTokenResponse.refresh_token_expires_in) { + const rtExpiresIn = typeof serverTokenResponse.refresh_token_expires_in === + "string" + ? parseInt(serverTokenResponse.refresh_token_expires_in, 10) + : serverTokenResponse.refresh_token_expires_in; + rtExpiresOn = reqTimestamp + rtExpiresIn; + } + cachedRefreshToken = createRefreshTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.refresh_token, this.clientId, serverTokenResponse.foci, userAssertionHash, rtExpiresOn); + } + // appMetadata + let cachedAppMetadata = null; + if (serverTokenResponse.foci) { + cachedAppMetadata = { + clientId: this.clientId, + environment: env, + familyId: serverTokenResponse.foci, + }; + } + return { + account: cachedAccount, + idToken: cachedIdToken, + accessToken: cachedAccessToken, + refreshToken: cachedRefreshToken, + appMetadata: cachedAppMetadata, + }; + } + /** + * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache. + * + * Optionally takes a state string that is set as-is in the response. + * + * @param cacheRecord + * @param idTokenObj + * @param fromTokenCache + * @param stateString + */ + static async generateAuthenticationResult(cryptoObj, authority, cacheRecord, fromTokenCache, request, idTokenClaims, requestState, serverTokenResponse, requestId) { + let accessToken = Constants$1.EMPTY_STRING; + let responseScopes = []; + let expiresOn = null; + let extExpiresOn; + let refreshOn; + let familyId = Constants$1.EMPTY_STRING; + if (cacheRecord.accessToken) { + /* + * if the request object has `popKid` property, `signPopToken` will be set to false and + * the token will be returned unsigned + */ + if (cacheRecord.accessToken.tokenType === + AuthenticationScheme.POP && + !request.popKid) { + const popTokenGenerator = new PopTokenGenerator(cryptoObj); + const { secret, keyId } = cacheRecord.accessToken; + if (!keyId) { + throw createClientAuthError(keyIdMissing); + } + accessToken = await popTokenGenerator.signPopToken(secret, keyId, request); + } + else { + accessToken = cacheRecord.accessToken.secret; + } + responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray(); + expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000); + extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000); + if (cacheRecord.accessToken.refreshOn) { + refreshOn = new Date(Number(cacheRecord.accessToken.refreshOn) * 1000); + } + } + if (cacheRecord.appMetadata) { + familyId = + cacheRecord.appMetadata.familyId === THE_FAMILY_ID + ? THE_FAMILY_ID + : ""; + } + const uid = idTokenClaims?.oid || idTokenClaims?.sub || ""; + const tid = idTokenClaims?.tid || ""; + // for hybrid + native bridge enablement, send back the native account Id + if (serverTokenResponse?.spa_accountid && !!cacheRecord.account) { + cacheRecord.account.nativeAccountId = + serverTokenResponse?.spa_accountid; + } + const accountInfo = cacheRecord.account + ? updateAccountTenantProfileData(cacheRecord.account.getAccountInfo(), undefined, // tenantProfile optional + idTokenClaims, cacheRecord.idToken?.secret) + : null; + return { + authority: authority.canonicalAuthority, + uniqueId: uid, + tenantId: tid, + scopes: responseScopes, + account: accountInfo, + idToken: cacheRecord?.idToken?.secret || "", + idTokenClaims: idTokenClaims || {}, + accessToken: accessToken, + fromCache: fromTokenCache, + expiresOn: expiresOn, + extExpiresOn: extExpiresOn, + refreshOn: refreshOn, + correlationId: request.correlationId, + requestId: requestId || Constants$1.EMPTY_STRING, + familyId: familyId, + tokenType: cacheRecord.accessToken?.tokenType || Constants$1.EMPTY_STRING, + state: requestState + ? requestState.userRequestState + : Constants$1.EMPTY_STRING, + cloudGraphHostName: cacheRecord.account?.cloudGraphHostName || + Constants$1.EMPTY_STRING, + msGraphHost: cacheRecord.account?.msGraphHost || Constants$1.EMPTY_STRING, + code: serverTokenResponse?.spa_code, + fromNativeBroker: false, + }; + } +} +function buildAccountToCache(cacheStorage, authority, homeAccountId, base64Decode, idTokenClaims, clientInfo, environment, claimsTenantId, authCodePayload, nativeAccountId, logger) { + logger?.verbose("setCachedAccount called"); + // Check if base account is already cached + const accountKeys = cacheStorage.getAccountKeys(); + const baseAccountKey = accountKeys.find((accountKey) => { + return accountKey.startsWith(homeAccountId); + }); + let cachedAccount = null; + if (baseAccountKey) { + cachedAccount = cacheStorage.getAccount(baseAccountKey, logger); + } + const baseAccount = cachedAccount || + AccountEntity.createAccount({ + homeAccountId, + idTokenClaims, + clientInfo, + environment, + cloudGraphHostName: authCodePayload?.cloud_graph_host_name, + msGraphHost: authCodePayload?.msgraph_host, + nativeAccountId: nativeAccountId, + }, authority, base64Decode); + const tenantProfiles = baseAccount.tenantProfiles || []; + const tenantId = claimsTenantId || baseAccount.realm; + if (tenantId && + !tenantProfiles.find((tenantProfile) => { + return tenantProfile.tenantId === tenantId; + })) { + const newTenantProfile = buildTenantProfile(homeAccountId, baseAccount.localAccountId, tenantId, idTokenClaims); + tenantProfiles.push(newTenantProfile); + } + baseAccount.tenantProfiles = tenantProfiles; + return baseAccount; +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +async function getClientAssertion(clientAssertion, clientId, tokenEndpoint) { + if (typeof clientAssertion === "string") { + return clientAssertion; + } + else { + const config = { + clientId: clientId, + tokenEndpoint: tokenEndpoint, + }; + return clientAssertion(config); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Oauth2.0 Authorization Code client + * @internal + */ +class AuthorizationCodeClient extends BaseClient { + constructor(configuration, performanceClient) { + super(configuration, performanceClient); + // Flag to indicate if client is for hybrid spa auth code redemption + this.includeRedirectUri = true; + this.oidcDefaultScopes = + this.config.authOptions.authority.options.OIDCOptions?.defaultScopes; + } + /** + * Creates the URL of the authorization request letting the user input credentials and consent to the + * application. The URL target the /authorize endpoint of the authority configured in the + * application object. + * + * Once the user inputs their credentials and consents, the authority will send a response to the redirect URI + * sent in the request and should contain an authorization code, which can then be used to acquire tokens via + * acquireToken(AuthorizationCodeRequest) + * @param request + */ + async getAuthCodeUrl(request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.GetAuthCodeUrl, request.correlationId); + const queryString = await invokeAsync(this.createAuthCodeUrlQueryString.bind(this), PerformanceEvents.AuthClientCreateQueryString, this.logger, this.performanceClient, request.correlationId)(request); + return UrlString.appendQueryString(this.authority.authorizationEndpoint, queryString); + } + /** + * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the + * authorization_code_grant + * @param request + */ + async acquireToken(request, authCodePayload) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientAcquireToken, request.correlationId); + if (!request.code) { + throw createClientAuthError(requestCannotBeMade); + } + const reqTimestamp = nowSeconds(); + const response = await invokeAsync(this.executeTokenRequest.bind(this), PerformanceEvents.AuthClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(this.authority, request); + // Retrieve requestId from response headers + const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID]; + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin, this.performanceClient); + // Validate response. This function throws a server error if an error is returned by the server. + responseHandler.validateTokenResponse(response.body); + return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, authCodePayload, undefined, undefined, undefined, requestId); + } + /** + * Handles the hash fragment response from public client code request. Returns a code response used by + * the client to exchange for a token in acquireToken. + * @param hashFragment + */ + handleFragmentResponse(serverParams, cachedState) { + // Handle responses. + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, null, null); + // Get code response + responseHandler.validateServerAuthorizationCodeResponse(serverParams, cachedState); + // throw when there is no auth code in the response + if (!serverParams.code) { + throw createClientAuthError(authorizationCodeMissingFromServerResponse); + } + return serverParams; + } + /** + * Used to log out the current user, and redirect the user to the postLogoutRedirectUri. + * Default behaviour is to redirect the user to `window.location.href`. + * @param authorityUri + */ + getLogoutUri(logoutRequest) { + // Throw error if logoutRequest is null/undefined + if (!logoutRequest) { + throw createClientConfigurationError(logoutRequestEmpty); + } + const queryString = this.createLogoutUrlQueryString(logoutRequest); + // Construct logout URI + return UrlString.appendQueryString(this.authority.endSessionEndpoint, queryString); + } + /** + * Executes POST request to token endpoint + * @param authority + * @param request + */ + async executeTokenRequest(authority, request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientExecuteTokenRequest, request.correlationId); + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), PerformanceEvents.AuthClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request); + let ccsCredential = undefined; + if (request.clientInfo) { + try { + const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode); + ccsCredential = { + credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`, + type: CcsCredentialType.HOME_ACCOUNT_ID, + }; + } + catch (e) { + this.logger.verbose("Could not parse client info for CCS Header: " + e); + } + } + const headers = this.createTokenRequestHeaders(ccsCredential || request.ccsCredential); + const thumbprint = { + clientId: request.tokenBodyParameters?.clientId || + this.config.authOptions.clientId, + authority: authority.canonicalAuthority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + return invokeAsync(this.executePostToTokenEndpoint.bind(this), PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint); + } + /** + * Generates a map for all the params to be sent to the service + * @param request + */ + async createTokenRequestBody(request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateTokenRequestBody, request.correlationId); + const parameterBuilder = new RequestParameterBuilder(); + parameterBuilder.addClientId(request.tokenBodyParameters?.[CLIENT_ID] || + this.config.authOptions.clientId); + /* + * For hybrid spa flow, there will be a code but no verifier + * In this scenario, don't include redirect uri as auth code will not be bound to redirect URI + */ + if (!this.includeRedirectUri) { + // Just validate + RequestValidator.validateRedirectUri(request.redirectUri); + } + else { + // Validate and include redirect uri + parameterBuilder.addRedirectUri(request.redirectUri); + } + // Add scope array, parameter builder will add default scopes and dedupe + parameterBuilder.addScopes(request.scopes, true, this.oidcDefaultScopes); + // add code: user set, not validated + parameterBuilder.addAuthorizationCode(request.code); + // Add library metadata + parameterBuilder.addLibraryInfo(this.config.libraryInfo); + parameterBuilder.addApplicationTelemetry(this.config.telemetry.application); + parameterBuilder.addThrottling(); + if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) { + parameterBuilder.addServerTelemetry(this.serverTelemetryManager); + } + // add code_verifier if passed + if (request.codeVerifier) { + parameterBuilder.addCodeVerifier(request.codeVerifier); + } + if (this.config.clientCredentials.clientSecret) { + parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret); + } + if (this.config.clientCredentials.clientAssertion) { + const clientAssertion = this.config.clientCredentials.clientAssertion; + parameterBuilder.addClientAssertion(await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + parameterBuilder.addClientAssertionType(clientAssertion.assertionType); + } + parameterBuilder.addGrantType(GrantType.AUTHORIZATION_CODE_GRANT); + parameterBuilder.addClientInfo(); + if (request.authenticationScheme === AuthenticationScheme.POP) { + const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient); + let reqCnfData; + if (!request.popKid) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); + reqCnfData = generatedReqCnfData.reqCnfString; + } + else { + reqCnfData = this.cryptoUtils.encodeKid(request.popKid); + } + // SPA PoP requires full Base64Url encoded req_cnf string (unhashed) + parameterBuilder.addPopToken(reqCnfData); + } + else if (request.authenticationScheme === AuthenticationScheme.SSH) { + if (request.sshJwk) { + parameterBuilder.addSshJwk(request.sshJwk); + } + else { + throw createClientConfigurationError(missingSshJwk); + } + } + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + parameterBuilder.addCorrelationId(correlationId); + if (!StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities); + } + let ccsCred = undefined; + if (request.clientInfo) { + try { + const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode); + ccsCred = { + credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`, + type: CcsCredentialType.HOME_ACCOUNT_ID, + }; + } + catch (e) { + this.logger.verbose("Could not parse client info for CCS Header: " + e); + } + } + else { + ccsCred = request.ccsCredential; + } + // Adds these as parameters in the request instead of headers to prevent CORS preflight request + if (this.config.systemOptions.preventCorsPreflight && ccsCred) { + switch (ccsCred.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); + parameterBuilder.addCcsOid(clientInfo); + } + catch (e) { + this.logger.verbose("Could not parse home account ID for CCS Header: " + + e); + } + break; + case CcsCredentialType.UPN: + parameterBuilder.addCcsUpn(ccsCred.credential); + break; + } + } + if (request.tokenBodyParameters) { + parameterBuilder.addExtraQueryParameters(request.tokenBodyParameters); + } + // Add hybrid spa parameters if not already provided + if (request.enableSpaAuthorizationCode && + (!request.tokenBodyParameters || + !request.tokenBodyParameters[RETURN_SPA_CODE])) { + parameterBuilder.addExtraQueryParameters({ + [RETURN_SPA_CODE]: "1", + }); + } + return parameterBuilder.createQueryString(); + } + /** + * This API validates the `AuthorizationCodeUrlRequest` and creates a URL + * @param request + */ + async createAuthCodeUrlQueryString(request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateQueryString, request.correlationId); + const parameterBuilder = new RequestParameterBuilder(); + parameterBuilder.addClientId(request.extraQueryParameters?.[CLIENT_ID] || + this.config.authOptions.clientId); + const requestScopes = [ + ...(request.scopes || []), + ...(request.extraScopesToConsent || []), + ]; + parameterBuilder.addScopes(requestScopes, true, this.oidcDefaultScopes); + // validate the redirectUri (to be a non null value) + parameterBuilder.addRedirectUri(request.redirectUri); + // generate the correlationId if not set by the user and add + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + parameterBuilder.addCorrelationId(correlationId); + // add response_mode. If not passed in it defaults to query. + parameterBuilder.addResponseMode(request.responseMode); + // add response_type = code + parameterBuilder.addResponseTypeCode(); + // add library info parameters + parameterBuilder.addLibraryInfo(this.config.libraryInfo); + if (!isOidcProtocolMode(this.config)) { + parameterBuilder.addApplicationTelemetry(this.config.telemetry.application); + } + // add client_info=1 + parameterBuilder.addClientInfo(); + if (request.codeChallenge && request.codeChallengeMethod) { + parameterBuilder.addCodeChallengeParams(request.codeChallenge, request.codeChallengeMethod); + } + if (request.prompt) { + parameterBuilder.addPrompt(request.prompt); + } + if (request.domainHint) { + parameterBuilder.addDomainHint(request.domainHint); + } + // Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object + if (request.prompt !== PromptValue.SELECT_ACCOUNT) { + // AAD will throw if prompt=select_account is passed with an account hint + if (request.sid && request.prompt === PromptValue.NONE) { + // SessionID is only used in silent calls + this.logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from request"); + parameterBuilder.addSid(request.sid); + } + else if (request.account) { + const accountSid = this.extractAccountSid(request.account); + let accountLoginHintClaim = this.extractLoginHint(request.account); + if (accountLoginHintClaim && request.domainHint) { + this.logger.warning(`AuthorizationCodeClient.createAuthCodeUrlQueryString: "domainHint" param is set, skipping opaque "login_hint" claim. Please consider not passing domainHint`); + accountLoginHintClaim = null; + } + // If login_hint claim is present, use it over sid/username + if (accountLoginHintClaim) { + this.logger.verbose("createAuthCodeUrlQueryString: login_hint claim present on account"); + parameterBuilder.addLoginHint(accountLoginHintClaim); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + parameterBuilder.addCcsOid(clientInfo); + } + catch (e) { + this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"); + } + } + else if (accountSid && request.prompt === PromptValue.NONE) { + /* + * If account and loginHint are provided, we will check account first for sid before adding loginHint + * SessionId is only used in silent calls + */ + this.logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account"); + parameterBuilder.addSid(accountSid); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + parameterBuilder.addCcsOid(clientInfo); + } + catch (e) { + this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"); + } + } + else if (request.loginHint) { + this.logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from request"); + parameterBuilder.addLoginHint(request.loginHint); + parameterBuilder.addCcsUpn(request.loginHint); + } + else if (request.account.username) { + // Fallback to account username if provided + this.logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from account"); + parameterBuilder.addLoginHint(request.account.username); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + parameterBuilder.addCcsOid(clientInfo); + } + catch (e) { + this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"); + } + } + } + else if (request.loginHint) { + this.logger.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request"); + parameterBuilder.addLoginHint(request.loginHint); + parameterBuilder.addCcsUpn(request.loginHint); + } + } + else { + this.logger.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints"); + } + if (request.nonce) { + parameterBuilder.addNonce(request.nonce); + } + if (request.state) { + parameterBuilder.addState(request.state); + } + if (request.claims || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities); + } + this.addExtraQueryParams(request, parameterBuilder); + if (request.nativeBroker) { + // signal ests that this is a WAM call + parameterBuilder.addNativeBroker(); + // pass the req_cnf for POP + if (request.authenticationScheme === AuthenticationScheme.POP) { + const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils); + // req_cnf is always sent as a string for SPAs + let reqCnfData; + if (!request.popKid) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); + reqCnfData = generatedReqCnfData.reqCnfString; + } + else { + reqCnfData = this.cryptoUtils.encodeKid(request.popKid); + } + parameterBuilder.addPopToken(reqCnfData); + } + } + return parameterBuilder.createQueryString(); + } + /** + * This API validates the `EndSessionRequest` and creates a URL + * @param request + */ + createLogoutUrlQueryString(request) { + const parameterBuilder = new RequestParameterBuilder(); + if (request.postLogoutRedirectUri) { + parameterBuilder.addPostLogoutRedirectUri(request.postLogoutRedirectUri); + } + if (request.correlationId) { + parameterBuilder.addCorrelationId(request.correlationId); + } + if (request.idTokenHint) { + parameterBuilder.addIdTokenHint(request.idTokenHint); + } + if (request.state) { + parameterBuilder.addState(request.state); + } + if (request.logoutHint) { + parameterBuilder.addLogoutHint(request.logoutHint); + } + this.addExtraQueryParams(request, parameterBuilder); + return parameterBuilder.createQueryString(); + } + addExtraQueryParams(request, parameterBuilder) { + const hasRequestInstanceAware = request.extraQueryParameters && + request.extraQueryParameters.hasOwnProperty("instance_aware"); + // Set instance_aware flag if config auth param is set + if (!hasRequestInstanceAware && this.config.authOptions.instanceAware) { + request.extraQueryParameters = request.extraQueryParameters || {}; + request.extraQueryParameters["instance_aware"] = "true"; + } + if (request.extraQueryParameters) { + parameterBuilder.addExtraQueryParameters(request.extraQueryParameters); + } + } + /** + * Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present. + * @param account + */ + extractAccountSid(account) { + return account.idTokenClaims?.sid || null; + } + extractLoginHint(account) { + return account.idTokenClaims?.login_hint || null; + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS = 300; // 5 Minutes +/** + * OAuth2.0 refresh token client + * @internal + */ +class RefreshTokenClient extends BaseClient { + constructor(configuration, performanceClient) { + super(configuration, performanceClient); + } + async acquireToken(request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireToken, request.correlationId); + const reqTimestamp = nowSeconds(); + const response = await invokeAsync(this.executeTokenRequest.bind(this), PerformanceEvents.RefreshTokenClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(request, this.authority); + // Retrieve requestId from response headers + const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID]; + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin); + responseHandler.validateTokenResponse(response.body); + return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, undefined, undefined, true, request.forceCache, requestId); + } + /** + * Gets cached refresh token and attaches to request, then calls acquireToken API + * @param request + */ + async acquireTokenByRefreshToken(request) { + // Cannot renew token if no request object is given. + if (!request) { + throw createClientConfigurationError(tokenRequestEmpty); + } + this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, request.correlationId); + // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases + if (!request.account) { + throw createClientAuthError(noAccountInSilentRequest); + } + // try checking if FOCI is enabled for the given application + const isFOCI = this.cacheManager.isAppMetadataFOCI(request.account.environment); + // if the app is part of the family, retrive a Family refresh token if present and make a refreshTokenRequest + if (isFOCI) { + try { + return await invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, true); + } + catch (e) { + const noFamilyRTInCache = e instanceof InteractionRequiredAuthError && + e.errorCode === + noTokensFound; + const clientMismatchErrorWithFamilyRT = e instanceof ServerError && + e.errorCode === Errors.INVALID_GRANT_ERROR && + e.subError === Errors.CLIENT_MISMATCH_ERROR; + // if family Refresh Token (FRT) cache acquisition fails or if client_mismatch error is seen with FRT, reattempt with application Refresh Token (ART) + if (noFamilyRTInCache || clientMismatchErrorWithFamilyRT) { + return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false); + // throw in all other cases + } + else { + throw e; + } + } + } + // fall back to application refresh token acquisition + return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false); + } + /** + * makes a network call to acquire tokens by exchanging RefreshToken available in userCache; throws if refresh token is not cached + * @param request + */ + async acquireTokenWithCachedRefreshToken(request, foci) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId); + // fetches family RT or application RT based on FOCI value + const refreshToken = invoke(this.cacheManager.getRefreshToken.bind(this.cacheManager), PerformanceEvents.CacheManagerGetRefreshToken, this.logger, this.performanceClient, request.correlationId)(request.account, foci, undefined, this.performanceClient, request.correlationId); + if (!refreshToken) { + throw createInteractionRequiredAuthError(noTokensFound); + } + if (refreshToken.expiresOn && + isTokenExpired(refreshToken.expiresOn, request.refreshTokenExpirationOffsetSeconds || + DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS)) { + throw createInteractionRequiredAuthError(refreshTokenExpired); + } + // attach cached RT size to the current measurement + const refreshTokenRequest = { + ...request, + refreshToken: refreshToken.secret, + authenticationScheme: request.authenticationScheme || AuthenticationScheme.BEARER, + ccsCredential: { + credential: request.account.homeAccountId, + type: CcsCredentialType.HOME_ACCOUNT_ID, + }, + }; + try { + return await invokeAsync(this.acquireToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(refreshTokenRequest); + } + catch (e) { + if (e instanceof InteractionRequiredAuthError && + e.subError === badToken) { + // Remove bad refresh token from cache + this.logger.verbose("acquireTokenWithRefreshToken: bad refresh token, removing from cache"); + const badRefreshTokenKey = generateCredentialKey(refreshToken); + this.cacheManager.removeRefreshToken(badRefreshTokenKey); + } + throw e; + } + } + /** + * Constructs the network message and makes a NW call to the underlying secure token service + * @param request + * @param authority + */ + async executeTokenRequest(request, authority) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientExecuteTokenRequest, request.correlationId); + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request); + const headers = this.createTokenRequestHeaders(request.ccsCredential); + const thumbprint = { + clientId: request.tokenBodyParameters?.clientId || + this.config.authOptions.clientId, + authority: authority.canonicalAuthority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + return invokeAsync(this.executePostToTokenEndpoint.bind(this), PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint); + } + /** + * Helper function to create the token request body + * @param request + */ + async createTokenRequestBody(request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, request.correlationId); + const correlationId = request.correlationId; + const parameterBuilder = new RequestParameterBuilder(); + parameterBuilder.addClientId(request.tokenBodyParameters?.[CLIENT_ID] || + this.config.authOptions.clientId); + if (request.redirectUri) { + parameterBuilder.addRedirectUri(request.redirectUri); + } + parameterBuilder.addScopes(request.scopes, true, this.config.authOptions.authority.options.OIDCOptions?.defaultScopes); + parameterBuilder.addGrantType(GrantType.REFRESH_TOKEN_GRANT); + parameterBuilder.addClientInfo(); + parameterBuilder.addLibraryInfo(this.config.libraryInfo); + parameterBuilder.addApplicationTelemetry(this.config.telemetry.application); + parameterBuilder.addThrottling(); + if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) { + parameterBuilder.addServerTelemetry(this.serverTelemetryManager); + } + parameterBuilder.addCorrelationId(correlationId); + parameterBuilder.addRefreshToken(request.refreshToken); + if (this.config.clientCredentials.clientSecret) { + parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret); + } + if (this.config.clientCredentials.clientAssertion) { + const clientAssertion = this.config.clientCredentials.clientAssertion; + parameterBuilder.addClientAssertion(await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + parameterBuilder.addClientAssertionType(clientAssertion.assertionType); + } + if (request.authenticationScheme === AuthenticationScheme.POP) { + const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient); + let reqCnfData; + if (!request.popKid) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); + reqCnfData = generatedReqCnfData.reqCnfString; + } + else { + reqCnfData = this.cryptoUtils.encodeKid(request.popKid); + } + // SPA PoP requires full Base64Url encoded req_cnf string (unhashed) + parameterBuilder.addPopToken(reqCnfData); + } + else if (request.authenticationScheme === AuthenticationScheme.SSH) { + if (request.sshJwk) { + parameterBuilder.addSshJwk(request.sshJwk); + } + else { + throw createClientConfigurationError(missingSshJwk); + } + } + if (!StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities); + } + if (this.config.systemOptions.preventCorsPreflight && + request.ccsCredential) { + switch (request.ccsCredential.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.ccsCredential.credential); + parameterBuilder.addCcsOid(clientInfo); + } + catch (e) { + this.logger.verbose("Could not parse home account ID for CCS Header: " + + e); + } + break; + case CcsCredentialType.UPN: + parameterBuilder.addCcsUpn(request.ccsCredential.credential); + break; + } + } + if (request.tokenBodyParameters) { + parameterBuilder.addExtraQueryParameters(request.tokenBodyParameters); + } + return parameterBuilder.createQueryString(); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** @internal */ +class SilentFlowClient extends BaseClient { + constructor(configuration, performanceClient) { + super(configuration, performanceClient); + } + /** + * Retrieves a token from cache if it is still valid, or uses the cached refresh token to renew + * the given token and returns the renewed token + * @param request + */ + async acquireToken(request) { + try { + const [authResponse, cacheOutcome] = await this.acquireCachedToken({ + ...request, + scopes: request.scopes?.length + ? request.scopes + : [...OIDC_DEFAULT_SCOPES], + }); + // if the token is not expired but must be refreshed; get a new one in the background + if (cacheOutcome === CacheOutcome.PROACTIVELY_REFRESHED) { + this.logger.info("SilentFlowClient:acquireCachedToken - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed."); + // refresh the access token in the background + const refreshTokenClient = new RefreshTokenClient(this.config, this.performanceClient); + refreshTokenClient + .acquireTokenByRefreshToken(request) + .catch(() => { + // do nothing, this is running in the background and no action is to be taken upon success or failure + }); + } + // return the cached token + return authResponse; + } + catch (e) { + if (e instanceof ClientAuthError && + e.errorCode === tokenRefreshRequired) { + const refreshTokenClient = new RefreshTokenClient(this.config, this.performanceClient); + return refreshTokenClient.acquireTokenByRefreshToken(request); + } + else { + throw e; + } + } + } + /** + * Retrieves token from cache or throws an error if it must be refreshed. + * @param request + */ + async acquireCachedToken(request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.SilentFlowClientAcquireCachedToken, request.correlationId); + let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE; + if (request.forceRefresh || + (!this.config.cacheOptions.claimsBasedCachingEnabled && + !StringUtils.isEmptyObj(request.claims))) { + // Must refresh due to present force_refresh flag. + this.setCacheOutcome(CacheOutcome.FORCE_REFRESH_OR_CLAIMS, request.correlationId); + throw createClientAuthError(tokenRefreshRequired); + } + // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases + if (!request.account) { + throw createClientAuthError(noAccountInSilentRequest); + } + const requestTenantId = request.account.tenantId || + getTenantFromAuthorityString(request.authority); + const tokenKeys = this.cacheManager.getTokenKeys(); + const cachedAccessToken = this.cacheManager.getAccessToken(request.account, request, tokenKeys, requestTenantId, this.performanceClient, request.correlationId); + if (!cachedAccessToken) { + // must refresh due to non-existent access_token + this.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN, request.correlationId); + throw createClientAuthError(tokenRefreshRequired); + } + else if (wasClockTurnedBack(cachedAccessToken.cachedAt) || + isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) { + // must refresh due to the expires_in value + this.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED, request.correlationId); + throw createClientAuthError(tokenRefreshRequired); + } + else if (cachedAccessToken.refreshOn && + isTokenExpired(cachedAccessToken.refreshOn, 0)) { + // must refresh (in the background) due to the refresh_in value + lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED; + // don't throw ClientAuthError.createRefreshRequiredError(), return cached token instead + } + const environment = request.authority || this.authority.getPreferredCache(); + const cacheRecord = { + account: this.cacheManager.readAccountFromCache(request.account), + accessToken: cachedAccessToken, + idToken: this.cacheManager.getIdToken(request.account, tokenKeys, requestTenantId, this.performanceClient, request.correlationId), + refreshToken: null, + appMetadata: this.cacheManager.readAppMetadataFromCache(environment), + }; + this.setCacheOutcome(lastCacheOutcome, request.correlationId); + if (this.config.serverTelemetryManager) { + this.config.serverTelemetryManager.incrementCacheHits(); + } + return [ + await invokeAsync(this.generateResultFromCacheRecord.bind(this), PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, this.logger, this.performanceClient, request.correlationId)(cacheRecord, request), + lastCacheOutcome, + ]; + } + setCacheOutcome(cacheOutcome, correlationId) { + this.serverTelemetryManager?.setCacheOutcome(cacheOutcome); + this.performanceClient?.addFields({ + cacheOutcome: cacheOutcome, + }, correlationId); + if (cacheOutcome !== CacheOutcome.NOT_APPLICABLE) { + this.logger.info(`Token refresh is required due to cache outcome: ${cacheOutcome}`); + } + } + /** + * Helper function to build response object from the CacheRecord + * @param cacheRecord + */ + async generateResultFromCacheRecord(cacheRecord, request) { + this.performanceClient?.addQueueMeasurement(PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, request.correlationId); + let idTokenClaims; + if (cacheRecord.idToken) { + idTokenClaims = extractTokenClaims(cacheRecord.idToken.secret, this.config.cryptoInterface.base64Decode); + } + // token max_age check + if (request.maxAge || request.maxAge === 0) { + const authTime = idTokenClaims?.auth_time; + if (!authTime) { + throw createClientAuthError(authTimeNotFound); + } + checkMaxAge(authTime, request.maxAge); + } + return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, cacheRecord, true, request, idTokenClaims); + } +} + +/*! @azure/msal-common v14.15.0 2024-10-03 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const skuGroupSeparator = ","; +const skuValueSeparator = "|"; +function makeExtraSkuString(params) { + const { skus, libraryName, libraryVersion, extensionName, extensionVersion, } = params; + const skuMap = new Map([ + [0, [libraryName, libraryVersion]], + [2, [extensionName, extensionVersion]], + ]); + let skuArr = []; + if (skus?.length) { + skuArr = skus.split(skuGroupSeparator); + // Ignore invalid input sku param + if (skuArr.length < 4) { + return skus; + } + } + else { + skuArr = Array.from({ length: 4 }, () => skuValueSeparator); + } + skuMap.forEach((value, key) => { + if (value.length === 2 && value[0]?.length && value[1]?.length) { + setSku({ + skuArr, + index: key, + skuName: value[0], + skuVersion: value[1], + }); + } + }); + return skuArr.join(skuGroupSeparator); +} +function setSku(params) { + const { skuArr, index, skuName, skuVersion } = params; + if (index >= skuArr.length) { + return; + } + skuArr[index] = [skuName, skuVersion].join(skuValueSeparator); +} +/** @internal */ +class ServerTelemetryManager { + constructor(telemetryRequest, cacheManager) { + this.cacheOutcome = CacheOutcome.NOT_APPLICABLE; + this.cacheManager = cacheManager; + this.apiId = telemetryRequest.apiId; + this.correlationId = telemetryRequest.correlationId; + this.wrapperSKU = telemetryRequest.wrapperSKU || Constants$1.EMPTY_STRING; + this.wrapperVer = telemetryRequest.wrapperVer || Constants$1.EMPTY_STRING; + this.telemetryCacheKey = + SERVER_TELEM_CONSTANTS.CACHE_KEY + + Separators.CACHE_KEY_SEPARATOR + + telemetryRequest.clientId; + } + /** + * API to add MSER Telemetry to request + */ + generateCurrentRequestHeaderValue() { + const request = `${this.apiId}${SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR}${this.cacheOutcome}`; + const platformFieldsArr = [this.wrapperSKU, this.wrapperVer]; + const nativeBrokerErrorCode = this.getNativeBrokerErrorCode(); + if (nativeBrokerErrorCode?.length) { + platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`); + } + const platformFields = platformFieldsArr.join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + const regionDiscoveryFields = this.getRegionDiscoveryFields(); + const requestWithRegionDiscoveryFields = [ + request, + regionDiscoveryFields, + ].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + return [ + SERVER_TELEM_CONSTANTS.SCHEMA_VERSION, + requestWithRegionDiscoveryFields, + platformFields, + ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR); + } + /** + * API to add MSER Telemetry for the last failed request + */ + generateLastRequestHeaderValue() { + const lastRequests = this.getLastRequests(); + const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests); + const failedRequests = lastRequests.failedRequests + .slice(0, 2 * maxErrors) + .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + const errors = lastRequests.errors + .slice(0, maxErrors) + .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + const errorCount = lastRequests.errors.length; + // Indicate whether this header contains all data or partial data + const overflow = maxErrors < errorCount + ? SERVER_TELEM_CONSTANTS.OVERFLOW_TRUE + : SERVER_TELEM_CONSTANTS.OVERFLOW_FALSE; + const platformFields = [errorCount, overflow].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + return [ + SERVER_TELEM_CONSTANTS.SCHEMA_VERSION, + lastRequests.cacheHits, + failedRequests, + errors, + platformFields, + ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR); + } + /** + * API to cache token failures for MSER data capture + * @param error + */ + cacheFailedRequest(error) { + const lastRequests = this.getLastRequests(); + if (lastRequests.errors.length >= + SERVER_TELEM_CONSTANTS.MAX_CACHED_ERRORS) { + // Remove a cached error to make room, first in first out + lastRequests.failedRequests.shift(); // apiId + lastRequests.failedRequests.shift(); // correlationId + lastRequests.errors.shift(); + } + lastRequests.failedRequests.push(this.apiId, this.correlationId); + if (error instanceof Error && !!error && error.toString()) { + if (error instanceof AuthError) { + if (error.subError) { + lastRequests.errors.push(error.subError); + } + else if (error.errorCode) { + lastRequests.errors.push(error.errorCode); + } + else { + lastRequests.errors.push(error.toString()); + } + } + else { + lastRequests.errors.push(error.toString()); + } + } + else { + lastRequests.errors.push(SERVER_TELEM_CONSTANTS.UNKNOWN_ERROR); + } + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests); + return; + } + /** + * Update server telemetry cache entry by incrementing cache hit counter + */ + incrementCacheHits() { + const lastRequests = this.getLastRequests(); + lastRequests.cacheHits += 1; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests); + return lastRequests.cacheHits; + } + /** + * Get the server telemetry entity from cache or initialize a new one + */ + getLastRequests() { + const initialValue = { + failedRequests: [], + errors: [], + cacheHits: 0, + }; + const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey); + return lastRequests || initialValue; + } + /** + * Remove server telemetry cache entry + */ + clearTelemetryCache() { + const lastRequests = this.getLastRequests(); + const numErrorsFlushed = ServerTelemetryManager.maxErrorsToSend(lastRequests); + const errorCount = lastRequests.errors.length; + if (numErrorsFlushed === errorCount) { + // All errors were sent on last request, clear Telemetry cache + this.cacheManager.removeItem(this.telemetryCacheKey); + } + else { + // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed + const serverTelemEntity = { + failedRequests: lastRequests.failedRequests.slice(numErrorsFlushed * 2), + errors: lastRequests.errors.slice(numErrorsFlushed), + cacheHits: 0, + }; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity); + } + } + /** + * Returns the maximum number of errors that can be flushed to the server in the next network request + * @param serverTelemetryEntity + */ + static maxErrorsToSend(serverTelemetryEntity) { + let i; + let maxErrors = 0; + let dataSize = 0; + const errorCount = serverTelemetryEntity.errors.length; + for (i = 0; i < errorCount; i++) { + // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs + const apiId = serverTelemetryEntity.failedRequests[2 * i] || + Constants$1.EMPTY_STRING; + const correlationId = serverTelemetryEntity.failedRequests[2 * i + 1] || + Constants$1.EMPTY_STRING; + const errorCode = serverTelemetryEntity.errors[i] || Constants$1.EMPTY_STRING; + // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators + dataSize += + apiId.toString().length + + correlationId.toString().length + + errorCode.length + + 3; + if (dataSize < SERVER_TELEM_CONSTANTS.MAX_LAST_HEADER_BYTES) { + // Adding this entry to the header would still keep header size below the limit + maxErrors += 1; + } + else { + break; + } + } + return maxErrors; + } + /** + * Get the region discovery fields + * + * @returns string + */ + getRegionDiscoveryFields() { + const regionDiscoveryFields = []; + regionDiscoveryFields.push(this.regionUsed || Constants$1.EMPTY_STRING); + regionDiscoveryFields.push(this.regionSource || Constants$1.EMPTY_STRING); + regionDiscoveryFields.push(this.regionOutcome || Constants$1.EMPTY_STRING); + return regionDiscoveryFields.join(","); + } + /** + * Update the region discovery metadata + * + * @param regionDiscoveryMetadata + * @returns void + */ + updateRegionDiscoveryMetadata(regionDiscoveryMetadata) { + this.regionUsed = regionDiscoveryMetadata.region_used; + this.regionSource = regionDiscoveryMetadata.region_source; + this.regionOutcome = regionDiscoveryMetadata.region_outcome; + } + /** + * Set cache outcome + */ + setCacheOutcome(cacheOutcome) { + this.cacheOutcome = cacheOutcome; + } + setNativeBrokerErrorCode(errorCode) { + const lastRequests = this.getLastRequests(); + lastRequests.nativeBrokerErrorCode = errorCode; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests); + } + getNativeBrokerErrorCode() { + return this.getLastRequests().nativeBrokerErrorCode; + } + clearNativeBrokerErrorCode() { + const lastRequests = this.getLastRequests(); + delete lastRequests.nativeBrokerErrorCode; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests); + } + static makeExtraSkuString(params) { + return makeExtraSkuString(params); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class deserializes cache entities read from the file into in memory object types defined internally + */ +class Deserializer { + /** + * Parse the JSON blob in memory and deserialize the content + * @param cachedJson + */ + static deserializeJSONBlob(jsonFile) { + const deserializedCache = !jsonFile ? {} : JSON.parse(jsonFile); + return deserializedCache; + } + /** + * Deserializes accounts to AccountEntity objects + * @param accounts + */ + static deserializeAccounts(accounts) { + const accountObjects = {}; + if (accounts) { + Object.keys(accounts).map(function (key) { + const serializedAcc = accounts[key]; + const mappedAcc = { + homeAccountId: serializedAcc.home_account_id, + environment: serializedAcc.environment, + realm: serializedAcc.realm, + localAccountId: serializedAcc.local_account_id, + username: serializedAcc.username, + authorityType: serializedAcc.authority_type, + name: serializedAcc.name, + clientInfo: serializedAcc.client_info, + lastModificationTime: serializedAcc.last_modification_time, + lastModificationApp: serializedAcc.last_modification_app, + tenantProfiles: serializedAcc.tenantProfiles?.map((serializedTenantProfile) => { + return JSON.parse(serializedTenantProfile); + }), + }; + const account = new AccountEntity(); + CacheManager.toObject(account, mappedAcc); + accountObjects[key] = account; + }); + } + return accountObjects; + } + /** + * Deserializes id tokens to IdTokenEntity objects + * @param idTokens + */ + static deserializeIdTokens(idTokens) { + const idObjects = {}; + if (idTokens) { + Object.keys(idTokens).map(function (key) { + const serializedIdT = idTokens[key]; + const idToken = { + homeAccountId: serializedIdT.home_account_id, + environment: serializedIdT.environment, + credentialType: serializedIdT.credential_type, + clientId: serializedIdT.client_id, + secret: serializedIdT.secret, + realm: serializedIdT.realm, + }; + idObjects[key] = idToken; + }); + } + return idObjects; + } + /** + * Deserializes access tokens to AccessTokenEntity objects + * @param accessTokens + */ + static deserializeAccessTokens(accessTokens) { + const atObjects = {}; + if (accessTokens) { + Object.keys(accessTokens).map(function (key) { + const serializedAT = accessTokens[key]; + const accessToken = { + homeAccountId: serializedAT.home_account_id, + environment: serializedAT.environment, + credentialType: serializedAT.credential_type, + clientId: serializedAT.client_id, + secret: serializedAT.secret, + realm: serializedAT.realm, + target: serializedAT.target, + cachedAt: serializedAT.cached_at, + expiresOn: serializedAT.expires_on, + extendedExpiresOn: serializedAT.extended_expires_on, + refreshOn: serializedAT.refresh_on, + keyId: serializedAT.key_id, + tokenType: serializedAT.token_type, + requestedClaims: serializedAT.requestedClaims, + requestedClaimsHash: serializedAT.requestedClaimsHash, + userAssertionHash: serializedAT.userAssertionHash, + }; + atObjects[key] = accessToken; + }); + } + return atObjects; + } + /** + * Deserializes refresh tokens to RefreshTokenEntity objects + * @param refreshTokens + */ + static deserializeRefreshTokens(refreshTokens) { + const rtObjects = {}; + if (refreshTokens) { + Object.keys(refreshTokens).map(function (key) { + const serializedRT = refreshTokens[key]; + const refreshToken = { + homeAccountId: serializedRT.home_account_id, + environment: serializedRT.environment, + credentialType: serializedRT.credential_type, + clientId: serializedRT.client_id, + secret: serializedRT.secret, + familyId: serializedRT.family_id, + target: serializedRT.target, + realm: serializedRT.realm, + }; + rtObjects[key] = refreshToken; + }); + } + return rtObjects; + } + /** + * Deserializes appMetadata to AppMetaData objects + * @param appMetadata + */ + static deserializeAppMetadata(appMetadata) { + const appMetadataObjects = {}; + if (appMetadata) { + Object.keys(appMetadata).map(function (key) { + const serializedAmdt = appMetadata[key]; + appMetadataObjects[key] = { + clientId: serializedAmdt.client_id, + environment: serializedAmdt.environment, + familyId: serializedAmdt.family_id, + }; + }); + } + return appMetadataObjects; + } + /** + * Deserialize an inMemory Cache + * @param jsonCache + */ + static deserializeAllCache(jsonCache) { + return { + accounts: jsonCache.Account + ? this.deserializeAccounts(jsonCache.Account) + : {}, + idTokens: jsonCache.IdToken + ? this.deserializeIdTokens(jsonCache.IdToken) + : {}, + accessTokens: jsonCache.AccessToken + ? this.deserializeAccessTokens(jsonCache.AccessToken) + : {}, + refreshTokens: jsonCache.RefreshToken + ? this.deserializeRefreshTokens(jsonCache.RefreshToken) + : {}, + appMetadata: jsonCache.AppMetadata + ? this.deserializeAppMetadata(jsonCache.AppMetadata) + : {}, + }; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Warning: This set of exports is purely intended to be used by other MSAL libraries, and should be considered potentially unstable. We strongly discourage using them directly, you do so at your own risk. + * Breaking changes to these APIs will be shipped under a minor version, instead of a major version. + */ + +var internals = /*#__PURE__*/Object.freeze({ + __proto__: null, + Deserializer: Deserializer, + Serializer: Serializer +}); + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity +const AUTHORIZATION_HEADER_NAME = "Authorization"; +const METADATA_HEADER_NAME = "Metadata"; +const APP_SERVICE_SECRET_HEADER_NAME = "X-IDENTITY-HEADER"; +const SERVICE_FABRIC_SECRET_HEADER_NAME = "secret"; +const API_VERSION_QUERY_PARAMETER_NAME = "api-version"; +const RESOURCE_BODY_OR_QUERY_PARAMETER_NAME = "resource"; +const DEFAULT_MANAGED_IDENTITY_ID = "system_assigned_managed_identity"; +const MANAGED_IDENTITY_DEFAULT_TENANT = "managed_identity"; +const DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY = `https://login.microsoftonline.com/${MANAGED_IDENTITY_DEFAULT_TENANT}/`; +/** + * Managed Identity Environment Variable Names + */ +const ManagedIdentityEnvironmentVariableNames = { + AZURE_POD_IDENTITY_AUTHORITY_HOST: "AZURE_POD_IDENTITY_AUTHORITY_HOST", + IDENTITY_ENDPOINT: "IDENTITY_ENDPOINT", + IDENTITY_HEADER: "IDENTITY_HEADER", + IDENTITY_SERVER_THUMBPRINT: "IDENTITY_SERVER_THUMBPRINT", + IMDS_ENDPOINT: "IMDS_ENDPOINT", + MSI_ENDPOINT: "MSI_ENDPOINT", +}; +/** + * Managed Identity Source Names + * @public + */ +const ManagedIdentitySourceNames = { + APP_SERVICE: "AppService", + AZURE_ARC: "AzureArc", + CLOUD_SHELL: "CloudShell", + DEFAULT_TO_IMDS: "DefaultToImds", + IMDS: "Imds", + SERVICE_FABRIC: "ServiceFabric", +}; +/** + * Managed Identity Ids + */ +const ManagedIdentityIdType = { + SYSTEM_ASSIGNED: "system-assigned", + USER_ASSIGNED_CLIENT_ID: "user-assigned-client-id", + USER_ASSIGNED_RESOURCE_ID: "user-assigned-resource-id", + USER_ASSIGNED_OBJECT_ID: "user-assigned-object-id", +}; +/** + * http methods + */ +const HttpMethod = { + GET: "get", + POST: "post", +}; +const ProxyStatus = { + SUCCESS: HttpStatus.SUCCESS, + SUCCESS_RANGE_START: HttpStatus.SUCCESS_RANGE_START, + SUCCESS_RANGE_END: HttpStatus.SUCCESS_RANGE_END, + SERVER_ERROR: HttpStatus.SERVER_ERROR, +}; +/** + * Constants used for region discovery + */ +const REGION_ENVIRONMENT_VARIABLE = "REGION_NAME"; +/** + * Constant used for PKCE + */ +const RANDOM_OCTET_SIZE = 32; +/** + * Constants used in PKCE + */ +const Hash = { + SHA256: "sha256", +}; +/** + * Constants for encoding schemes + */ +const CharSet = { + CV_CHARSET: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~", +}; +/** + * Constants + */ +const Constants = { + MSAL_SKU: "msal.js.node", + JWT_BEARER_ASSERTION_TYPE: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", + AUTHORIZATION_PENDING: "authorization_pending", + HTTP_PROTOCOL: "http://", + LOCALHOST: "localhost", +}; +/** + * API Codes for Telemetry purposes. + * Before adding a new code you must claim it in the MSAL Telemetry tracker as these number spaces are shared across all MSALs + * 0-99 Silent Flow + * 600-699 Device Code Flow + * 800-899 Auth Code Flow + */ +const ApiId = { + acquireTokenSilent: 62, + acquireTokenByUsernamePassword: 371, + acquireTokenByDeviceCode: 671, + acquireTokenByClientCredential: 771, + acquireTokenByCode: 871, + acquireTokenByRefreshToken: 872, +}; +/** + * JWT constants + */ +const JwtConstants = { + ALGORITHM: "alg", + RSA_256: "RS256", + PSS_256: "PS256", + X5T_256: "x5t#S256", + X5T: "x5t", + X5C: "x5c", + AUDIENCE: "aud", + EXPIRATION_TIME: "exp", + ISSUER: "iss", + SUBJECT: "sub", + NOT_BEFORE: "nbf", + JWT_ID: "jti", +}; +const LOOPBACK_SERVER_CONSTANTS = { + INTERVAL_MS: 100, + TIMEOUT_MS: 5000, +}; +const AZURE_ARC_SECRET_FILE_MAX_SIZE_BYTES = 4096; // 4 KB +const MANAGED_IDENTITY_MAX_RETRIES = 3; +const MANAGED_IDENTITY_RETRY_DELAY = 1000; +const MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON = [ + HttpStatus.NOT_FOUND, + HttpStatus.REQUEST_TIMEOUT, + HttpStatus.TOO_MANY_REQUESTS, + HttpStatus.SERVER_ERROR, + HttpStatus.SERVICE_UNAVAILABLE, + HttpStatus.GATEWAY_TIMEOUT, +]; + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class NetworkUtils { + static getNetworkResponse(headers, body, statusCode) { + return { + headers: headers, + body: body, + status: statusCode, + }; + } + /* + * Utility function that converts a URL object into an ordinary options object as expected by the + * http.request and https.request APIs. + * https://github.com/nodejs/node/blob/main/lib/internal/url.js#L1090 + */ + static urlToHttpOptions(url) { + const options = { + protocol: url.protocol, + hostname: url.hostname && url.hostname.startsWith("[") + ? url.hostname.slice(1, -1) + : url.hostname, + hash: url.hash, + search: url.search, + pathname: url.pathname, + path: `${url.pathname || ""}${url.search || ""}`, + href: url.href, + }; + if (url.port !== "") { + options.port = Number(url.port); + } + if (url.username || url.password) { + options.auth = `${decodeURIComponent(url.username)}:${decodeURIComponent(url.password)}`; + } + return options; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class implements the API for network requests. + */ +class HttpClient { + constructor(proxyUrl, customAgentOptions) { + this.proxyUrl = proxyUrl || ""; + this.customAgentOptions = customAgentOptions || {}; + } + /** + * Http Get request + * @param url + * @param options + */ + async sendGetRequestAsync(url, options, timeout) { + if (this.proxyUrl) { + return networkRequestViaProxy(url, this.proxyUrl, HttpMethod.GET, options, this.customAgentOptions, timeout); + } + else { + return networkRequestViaHttps(url, HttpMethod.GET, options, this.customAgentOptions, timeout); + } + } + /** + * Http Post request + * @param url + * @param options + */ + async sendPostRequestAsync(url, options) { + if (this.proxyUrl) { + return networkRequestViaProxy(url, this.proxyUrl, HttpMethod.POST, options, this.customAgentOptions); + } + else { + return networkRequestViaHttps(url, HttpMethod.POST, options, this.customAgentOptions); + } + } +} +const networkRequestViaProxy = (destinationUrlString, proxyUrlString, httpMethod, options, agentOptions, timeout) => { + const destinationUrl = new URL(destinationUrlString); + const proxyUrl = new URL(proxyUrlString); + // "method: connect" must be used to establish a connection to the proxy + const headers = options?.headers || {}; + const tunnelRequestOptions = { + host: proxyUrl.hostname, + port: proxyUrl.port, + method: "CONNECT", + path: destinationUrl.hostname, + headers: headers, + }; + if (agentOptions && Object.keys(agentOptions).length) { + tunnelRequestOptions.agent = new http.Agent(agentOptions); + } + // compose a request string for the socket + let postRequestStringContent = ""; + if (httpMethod === HttpMethod.POST) { + const body = options?.body || ""; + postRequestStringContent = + "Content-Type: application/x-www-form-urlencoded\r\n" + + `Content-Length: ${body.length}\r\n` + + `\r\n${body}`; + } + else { + // optional timeout is only for get requests (regionDiscovery, for example) + if (timeout) { + tunnelRequestOptions.timeout = timeout; + } + } + const outgoingRequestString = `${httpMethod.toUpperCase()} ${destinationUrl.href} HTTP/1.1\r\n` + + `Host: ${destinationUrl.host}\r\n` + + "Connection: close\r\n" + + postRequestStringContent + + "\r\n"; + return new Promise((resolve, reject) => { + const request = http.request(tunnelRequestOptions); + if (timeout) { + request.on("timeout", () => { + request.destroy(); + reject(new Error("Request time out")); + }); + } + request.end(); + // establish connection to the proxy + request.on("connect", (response, socket) => { + const proxyStatusCode = response?.statusCode || ProxyStatus.SERVER_ERROR; + if (proxyStatusCode < ProxyStatus.SUCCESS_RANGE_START || + proxyStatusCode > ProxyStatus.SUCCESS_RANGE_END) { + request.destroy(); + socket.destroy(); + reject(new Error(`Error connecting to proxy. Http status code: ${response.statusCode}. Http status message: ${response?.statusMessage || "Unknown"}`)); + } + // make a request over an HTTP tunnel + socket.write(outgoingRequestString); + const data = []; + socket.on("data", (chunk) => { + data.push(chunk); + }); + socket.on("end", () => { + // combine all received buffer streams into one buffer, and then into a string + const dataString = Buffer.concat([...data]).toString(); + // separate each line into it's own entry in an arry + const dataStringArray = dataString.split("\r\n"); + // the first entry will contain the statusCode and statusMessage + const httpStatusCode = parseInt(dataStringArray[0].split(" ")[1]); + // remove "HTTP/1.1" and the status code to get the status message + const statusMessage = dataStringArray[0] + .split(" ") + .slice(2) + .join(" "); + // the last entry will contain the body + const body = dataStringArray[dataStringArray.length - 1]; + // everything in between the first and last entries are the headers + const headersArray = dataStringArray.slice(1, dataStringArray.length - 2); + // build an object out of all the headers + const entries = new Map(); + headersArray.forEach((header) => { + /** + * the header might look like "Content-Length: 1531", but that is just a string + * it needs to be converted to a key/value pair + * split the string at the first instance of ":" + * there may be more than one ":" if the value of the header is supposed to be a JSON object + */ + const headerKeyValue = header.split(new RegExp(/:\s(.*)/s)); + const headerKey = headerKeyValue[0]; + let headerValue = headerKeyValue[1]; + // check if the value of the header is supposed to be a JSON object + try { + const object = JSON.parse(headerValue); + // if it is, then convert it from a string to a JSON object + if (object && typeof object === "object") { + headerValue = object; + } + } + catch (e) { + // otherwise, leave it as a string + } + entries.set(headerKey, headerValue); + }); + const headers = Object.fromEntries(entries); + const parsedHeaders = headers; + const networkResponse = NetworkUtils.getNetworkResponse(parsedHeaders, parseBody(httpStatusCode, statusMessage, parsedHeaders, body), httpStatusCode); + if ((httpStatusCode < HttpStatus.SUCCESS_RANGE_START || + httpStatusCode > HttpStatus.SUCCESS_RANGE_END) && + // do not destroy the request for the device code flow + networkResponse.body["error"] !== + Constants.AUTHORIZATION_PENDING) { + request.destroy(); + } + resolve(networkResponse); + }); + socket.on("error", (chunk) => { + request.destroy(); + socket.destroy(); + reject(new Error(chunk.toString())); + }); + }); + request.on("error", (chunk) => { + request.destroy(); + reject(new Error(chunk.toString())); + }); + }); +}; +const networkRequestViaHttps = (urlString, httpMethod, options, agentOptions, timeout) => { + const isPostRequest = httpMethod === HttpMethod.POST; + const body = options?.body || ""; + const url = new URL(urlString); + const headers = options?.headers || {}; + const customOptions = { + method: httpMethod, + headers: headers, + ...NetworkUtils.urlToHttpOptions(url), + }; + if (agentOptions && Object.keys(agentOptions).length) { + customOptions.agent = new https.Agent(agentOptions); + } + if (isPostRequest) { + // needed for post request to work + customOptions.headers = { + ...customOptions.headers, + "Content-Length": body.length, + }; + } + else { + // optional timeout is only for get requests (regionDiscovery, for example) + if (timeout) { + customOptions.timeout = timeout; + } + } + return new Promise((resolve, reject) => { + let request; + // managed identity sources use http instead of https + if (customOptions.protocol === "http:") { + request = http.request(customOptions); + } + else { + request = https.request(customOptions); + } + if (isPostRequest) { + request.write(body); + } + if (timeout) { + request.on("timeout", () => { + request.destroy(); + reject(new Error("Request time out")); + }); + } + request.end(); + request.on("response", (response) => { + const headers = response.headers; + const statusCode = response.statusCode; + const statusMessage = response.statusMessage; + const data = []; + response.on("data", (chunk) => { + data.push(chunk); + }); + response.on("end", () => { + // combine all received buffer streams into one buffer, and then into a string + const body = Buffer.concat([...data]).toString(); + const parsedHeaders = headers; + const networkResponse = NetworkUtils.getNetworkResponse(parsedHeaders, parseBody(statusCode, statusMessage, parsedHeaders, body), statusCode); + if ((statusCode < HttpStatus.SUCCESS_RANGE_START || + statusCode > HttpStatus.SUCCESS_RANGE_END) && + // do not destroy the request for the device code flow + networkResponse.body["error"] !== + Constants.AUTHORIZATION_PENDING) { + request.destroy(); + } + resolve(networkResponse); + }); + }); + request.on("error", (chunk) => { + request.destroy(); + reject(new Error(chunk.toString())); + }); + }); +}; +/** + * Check if extra parsing is needed on the repsonse from the server + * @param statusCode {number} the status code of the response from the server + * @param statusMessage {string | undefined} the status message of the response from the server + * @param headers {Record} the headers of the response from the server + * @param body {string} the body from the response of the server + * @returns {Object} JSON parsed body or error object + */ +const parseBody = (statusCode, statusMessage, headers, body) => { + /* + * Informational responses (100 – 199) + * Successful responses (200 – 299) + * Redirection messages (300 – 399) + * Client error responses (400 – 499) + * Server error responses (500 – 599) + */ + let parsedBody; + try { + parsedBody = JSON.parse(body); + } + catch (error) { + let errorType; + let errorDescriptionHelper; + if (statusCode >= HttpStatus.CLIENT_ERROR_RANGE_START && + statusCode <= HttpStatus.CLIENT_ERROR_RANGE_END) { + errorType = "client_error"; + errorDescriptionHelper = "A client"; + } + else if (statusCode >= HttpStatus.SERVER_ERROR_RANGE_START && + statusCode <= HttpStatus.SERVER_ERROR_RANGE_END) { + errorType = "server_error"; + errorDescriptionHelper = "A server"; + } + else { + errorType = "unknown_error"; + errorDescriptionHelper = "An unknown"; + } + parsedBody = { + error: errorType, + error_description: `${errorDescriptionHelper} error occured.\nHttp status code: ${statusCode}\nHttp status message: ${statusMessage || "Unknown"}\nHeaders: ${JSON.stringify(headers)}`, + }; + } + return parsedBody; +}; + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const invalidFileExtension = "invalid_file_extension"; +const invalidFilePath = "invalid_file_path"; +const invalidManagedIdentityIdType = "invalid_managed_identity_id_type"; +const invalidSecret = "invalid_secret"; +const missingId = "missing_client_id"; +const networkUnavailable = "network_unavailable"; +const platformNotSupported = "platform_not_supported"; +const unableToCreateAzureArc = "unable_to_create_azure_arc"; +const unableToCreateCloudShell = "unable_to_create_cloud_shell"; +const unableToCreateSource = "unable_to_create_source"; +const unableToReadSecretFile = "unable_to_read_secret_file"; +const userAssignedNotAvailableAtRuntime = "user_assigned_not_available_at_runtime"; +const wwwAuthenticateHeaderMissing = "www_authenticate_header_missing"; +const wwwAuthenticateHeaderUnsupportedFormat = "www_authenticate_header_unsupported_format"; +const MsiEnvironmentVariableUrlMalformedErrorCodes = { + [ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST]: "azure_pod_identity_authority_host_url_malformed", + [ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]: "identity_endpoint_url_malformed", + [ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT]: "imds_endpoint_url_malformed", + [ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT]: "msi_endpoint_url_malformed", +}; + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * ManagedIdentityErrorMessage class containing string constants used by error codes and messages. + */ +const ManagedIdentityErrorMessages = { + [invalidFileExtension]: "The file path in the WWW-Authenticate header does not contain a .key file.", + [invalidFilePath]: "The file path in the WWW-Authenticate header is not in a valid Windows or Linux Format.", + [invalidManagedIdentityIdType]: "More than one ManagedIdentityIdType was provided.", + [invalidSecret]: "The secret in the file on the file path in the WWW-Authenticate header is greater than 4096 bytes.", + [platformNotSupported]: "The platform is not supported by Azure Arc. Azure Arc only supports Windows and Linux.", + [missingId]: "A ManagedIdentityId id was not provided.", + [MsiEnvironmentVariableUrlMalformedErrorCodes + .AZURE_POD_IDENTITY_AUTHORITY_HOST]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST}' environment variable is malformed.`, + [MsiEnvironmentVariableUrlMalformedErrorCodes + .IDENTITY_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' environment variable is malformed.`, + [MsiEnvironmentVariableUrlMalformedErrorCodes + .IMDS_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT}' environment variable is malformed.`, + [MsiEnvironmentVariableUrlMalformedErrorCodes + .MSI_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT}' environment variable is malformed.`, + [networkUnavailable]: "Authentication unavailable. The request to the managed identity endpoint timed out.", + [unableToCreateAzureArc]: "Azure Arc Managed Identities can only be system assigned.", + [unableToCreateCloudShell]: "Cloud Shell Managed Identities can only be system assigned.", + [unableToCreateSource]: "Unable to create a Managed Identity source based on environment variables.", + [unableToReadSecretFile]: "Unable to read the secret file.", + [userAssignedNotAvailableAtRuntime]: "Service Fabric user assigned managed identity ClientId or ResourceId is not configurable at runtime.", + [wwwAuthenticateHeaderMissing]: "A 401 response was received form the Azure Arc Managed Identity, but the www-authenticate header is missing.", + [wwwAuthenticateHeaderUnsupportedFormat]: "A 401 response was received form the Azure Arc Managed Identity, but the www-authenticate header is in an unsupported format.", +}; +class ManagedIdentityError extends AuthError { + constructor(errorCode) { + super(errorCode, ManagedIdentityErrorMessages[errorCode]); + this.name = "ManagedIdentityError"; + Object.setPrototypeOf(this, ManagedIdentityError.prototype); + } +} +function createManagedIdentityError(errorCode) { + return new ManagedIdentityError(errorCode); +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class ManagedIdentityId { + get id() { + return this._id; + } + set id(value) { + this._id = value; + } + get idType() { + return this._idType; + } + set idType(value) { + this._idType = value; + } + constructor(managedIdentityIdParams) { + const userAssignedClientId = managedIdentityIdParams?.userAssignedClientId; + const userAssignedResourceId = managedIdentityIdParams?.userAssignedResourceId; + const userAssignedObjectId = managedIdentityIdParams?.userAssignedObjectId; + if (userAssignedClientId) { + if (userAssignedResourceId || userAssignedObjectId) { + throw createManagedIdentityError(invalidManagedIdentityIdType); + } + this.id = userAssignedClientId; + this.idType = ManagedIdentityIdType.USER_ASSIGNED_CLIENT_ID; + } + else if (userAssignedResourceId) { + if (userAssignedClientId || userAssignedObjectId) { + throw createManagedIdentityError(invalidManagedIdentityIdType); + } + this.id = userAssignedResourceId; + this.idType = ManagedIdentityIdType.USER_ASSIGNED_RESOURCE_ID; + } + else if (userAssignedObjectId) { + if (userAssignedClientId || userAssignedResourceId) { + throw createManagedIdentityError(invalidManagedIdentityIdType); + } + this.id = userAssignedObjectId; + this.idType = ManagedIdentityIdType.USER_ASSIGNED_OBJECT_ID; + } + else { + this.id = DEFAULT_MANAGED_IDENTITY_ID; + this.idType = ManagedIdentityIdType.SYSTEM_ASSIGNED; + } + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class LinearRetryPolicy { + constructor(maxRetries, retryDelay, httpStatusCodesToRetryOn) { + this.maxRetries = maxRetries; + this.retryDelay = retryDelay; + this.httpStatusCodesToRetryOn = httpStatusCodesToRetryOn; + } + retryAfterMillisecondsToSleep(retryHeader) { + if (!retryHeader) { + return 0; + } + // retry-after header is in seconds + let millisToSleep = Math.round(parseFloat(retryHeader) * 1000); + /* + * retry-after header is in HTTP Date format + * , :: GMT + */ + if (isNaN(millisToSleep)) { + millisToSleep = Math.max(0, + // .valueOf() is needed to subtract dates in TypeScript + new Date(retryHeader).valueOf() - new Date().valueOf()); + } + return millisToSleep; + } + async pauseForRetry(httpStatusCode, currentRetry, retryAfterHeader) { + if (this.httpStatusCodesToRetryOn.includes(httpStatusCode) && + currentRetry < this.maxRetries) { + const retryAfterDelay = this.retryAfterMillisecondsToSleep(retryAfterHeader); + await new Promise((resolve) => { + // retryAfterHeader value of 0 evaluates to false, and this.retryDelay will be used + return setTimeout(resolve, retryAfterDelay || this.retryDelay); + }); + return true; + } + return false; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class HttpClientWithRetries { + constructor(httpClientNoRetries, retryPolicy) { + this.httpClientNoRetries = httpClientNoRetries; + this.retryPolicy = retryPolicy; + } + async sendNetworkRequestAsyncHelper(httpMethod, url, options) { + if (httpMethod === HttpMethod.GET) { + return this.httpClientNoRetries.sendGetRequestAsync(url, options); + } + else { + return this.httpClientNoRetries.sendPostRequestAsync(url, options); + } + } + async sendNetworkRequestAsync(httpMethod, url, options) { + // the underlying network module (custom or HttpClient) will make the call + let response = await this.sendNetworkRequestAsyncHelper(httpMethod, url, options); + let currentRetry = 0; + while (await this.retryPolicy.pauseForRetry(response.status, currentRetry, response.headers[HeaderNames.RETRY_AFTER])) { + response = await this.sendNetworkRequestAsyncHelper(httpMethod, url, options); + currentRetry++; + } + return response; + } + async sendGetRequestAsync(url, options) { + return this.sendNetworkRequestAsync(HttpMethod.GET, url, options); + } + async sendPostRequestAsync(url, options) { + return this.sendNetworkRequestAsync(HttpMethod.POST, url, options); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * NodeAuthErrorMessage class containing string constants used by error codes and messages. + */ +const NodeAuthErrorMessage = { + invalidLoopbackAddressType: { + code: "invalid_loopback_server_address_type", + desc: "Loopback server address is not type string. This is unexpected.", + }, + unableToLoadRedirectUri: { + code: "unable_to_load_redirectUrl", + desc: "Loopback server callback was invoked without a url. This is unexpected.", + }, + noAuthCodeInResponse: { + code: "no_auth_code_in_response", + desc: "No auth code found in the server response. Please check your network trace to determine what happened.", + }, + noLoopbackServerExists: { + code: "no_loopback_server_exists", + desc: "No loopback server exists yet.", + }, + loopbackServerAlreadyExists: { + code: "loopback_server_already_exists", + desc: "Loopback server already exists. Cannot create another.", + }, + loopbackServerTimeout: { + code: "loopback_server_timeout", + desc: "Timed out waiting for auth code listener to be registered.", + }, + stateNotFoundError: { + code: "state_not_found", + desc: "State not found. Please verify that the request originated from msal.", + }, + thumbprintMissing: { + code: "thumbprint_missing_from_client_certificate", + desc: "Client certificate does not contain a SHA-1 or SHA-256 thumbprint.", + }, +}; +class NodeAuthError extends AuthError { + constructor(errorCode, errorMessage) { + super(errorCode, errorMessage); + this.name = "NodeAuthError"; + } + /** + * Creates an error thrown if loopback server address is of type string. + */ + static createInvalidLoopbackAddressTypeError() { + return new NodeAuthError(NodeAuthErrorMessage.invalidLoopbackAddressType.code, `${NodeAuthErrorMessage.invalidLoopbackAddressType.desc}`); + } + /** + * Creates an error thrown if the loopback server is unable to get a url. + */ + static createUnableToLoadRedirectUrlError() { + return new NodeAuthError(NodeAuthErrorMessage.unableToLoadRedirectUri.code, `${NodeAuthErrorMessage.unableToLoadRedirectUri.desc}`); + } + /** + * Creates an error thrown if the server response does not contain an auth code. + */ + static createNoAuthCodeInResponseError() { + return new NodeAuthError(NodeAuthErrorMessage.noAuthCodeInResponse.code, `${NodeAuthErrorMessage.noAuthCodeInResponse.desc}`); + } + /** + * Creates an error thrown if the loopback server has not been spun up yet. + */ + static createNoLoopbackServerExistsError() { + return new NodeAuthError(NodeAuthErrorMessage.noLoopbackServerExists.code, `${NodeAuthErrorMessage.noLoopbackServerExists.desc}`); + } + /** + * Creates an error thrown if a loopback server already exists when attempting to create another one. + */ + static createLoopbackServerAlreadyExistsError() { + return new NodeAuthError(NodeAuthErrorMessage.loopbackServerAlreadyExists.code, `${NodeAuthErrorMessage.loopbackServerAlreadyExists.desc}`); + } + /** + * Creates an error thrown if the loopback server times out registering the auth code listener. + */ + static createLoopbackServerTimeoutError() { + return new NodeAuthError(NodeAuthErrorMessage.loopbackServerTimeout.code, `${NodeAuthErrorMessage.loopbackServerTimeout.desc}`); + } + /** + * Creates an error thrown when the state is not present. + */ + static createStateNotFoundError() { + return new NodeAuthError(NodeAuthErrorMessage.stateNotFoundError.code, NodeAuthErrorMessage.stateNotFoundError.desc); + } + /** + * Creates an error thrown when client certificate was provided, but neither the SHA-1 or SHA-256 thumbprints were provided + */ + static createThumbprintMissingError() { + return new NodeAuthError(NodeAuthErrorMessage.thumbprintMissing.code, NodeAuthErrorMessage.thumbprintMissing.desc); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const DEFAULT_AUTH_OPTIONS = { + clientId: Constants$1.EMPTY_STRING, + authority: Constants$1.DEFAULT_AUTHORITY, + clientSecret: Constants$1.EMPTY_STRING, + clientAssertion: Constants$1.EMPTY_STRING, + clientCertificate: { + thumbprint: Constants$1.EMPTY_STRING, + thumbprintSha256: Constants$1.EMPTY_STRING, + privateKey: Constants$1.EMPTY_STRING, + x5c: Constants$1.EMPTY_STRING, + }, + knownAuthorities: [], + cloudDiscoveryMetadata: Constants$1.EMPTY_STRING, + authorityMetadata: Constants$1.EMPTY_STRING, + clientCapabilities: [], + protocolMode: ProtocolMode.AAD, + azureCloudOptions: { + azureCloudInstance: AzureCloudInstance.None, + tenant: Constants$1.EMPTY_STRING, + }, + skipAuthorityMetadataCache: false, +}; +const DEFAULT_CACHE_OPTIONS = { + claimsBasedCachingEnabled: false, +}; +const DEFAULT_LOGGER_OPTIONS = { + loggerCallback: () => { + // allow users to not set logger call back + }, + piiLoggingEnabled: false, + logLevel: exports.LogLevel.Info, +}; +const DEFAULT_SYSTEM_OPTIONS = { + loggerOptions: DEFAULT_LOGGER_OPTIONS, + networkClient: new HttpClient(), + proxyUrl: Constants$1.EMPTY_STRING, + customAgentOptions: {}, + disableInternalRetries: false, +}; +const DEFAULT_TELEMETRY_OPTIONS = { + application: { + appName: Constants$1.EMPTY_STRING, + appVersion: Constants$1.EMPTY_STRING, + }, +}; +/** + * Sets the default options when not explicitly configured from app developer + * + * @param auth - Authentication options + * @param cache - Cache options + * @param system - System options + * @param telemetry - Telemetry options + * + * @returns Configuration + * @internal + */ +function buildAppConfiguration({ auth, broker, cache, system, telemetry, }) { + const systemOptions = { + ...DEFAULT_SYSTEM_OPTIONS, + networkClient: new HttpClient(system?.proxyUrl, system?.customAgentOptions), + loggerOptions: system?.loggerOptions || DEFAULT_LOGGER_OPTIONS, + disableInternalRetries: system?.disableInternalRetries || false, + }; + // if client certificate was provided, ensure that at least one of the SHA-1 or SHA-256 thumbprints were provided + if (!!auth.clientCertificate && + !!!auth.clientCertificate.thumbprint && + !!!auth.clientCertificate.thumbprintSha256) { + throw NodeAuthError.createStateNotFoundError(); + } + return { + auth: { ...DEFAULT_AUTH_OPTIONS, ...auth }, + broker: { ...broker }, + cache: { ...DEFAULT_CACHE_OPTIONS, ...cache }, + system: { ...systemOptions, ...system }, + telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry }, + }; +} +function buildManagedIdentityConfiguration({ managedIdentityIdParams, system, }) { + const managedIdentityId = new ManagedIdentityId(managedIdentityIdParams); + const loggerOptions = system?.loggerOptions || DEFAULT_LOGGER_OPTIONS; + let networkClient; + // use developer provided network client if passed in + if (system?.networkClient) { + networkClient = system.networkClient; + // otherwise, create a new one + } + else { + networkClient = new HttpClient(system?.proxyUrl, system?.customAgentOptions); + } + // wrap the network client with a retry policy if the developer has not disabled the option to do so + if (!system?.disableInternalRetries) { + const linearRetryPolicy = new LinearRetryPolicy(MANAGED_IDENTITY_MAX_RETRIES, MANAGED_IDENTITY_RETRY_DELAY, MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON); + networkClient = new HttpClientWithRetries(networkClient, linearRetryPolicy); + } + return { + managedIdentityId: managedIdentityId, + system: { + loggerOptions, + networkClient, + }, + }; +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class GuidGenerator { + /** + * + * RFC4122: The version 4 UUID is meant for generating UUIDs from truly-random or pseudo-random numbers. + * uuidv4 generates guids from cryprtographically-string random + */ + generateGuid() { + return uuid.v4(); + } + /** + * verifies if a string is GUID + * @param guid + */ + isGuid(guid) { + const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + return regexGuid.test(guid); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class EncodingUtils { + /** + * 'utf8': Multibyte encoded Unicode characters. Many web pages and other document formats use UTF-8. + * 'base64': Base64 encoding. + * + * @param str text + */ + static base64Encode(str, encoding) { + return Buffer.from(str, encoding).toString("base64"); + } + /** + * encode a URL + * @param str + */ + static base64EncodeUrl(str, encoding) { + return EncodingUtils.base64Encode(str, encoding) + .replace(/=/g, Constants$1.EMPTY_STRING) + .replace(/\+/g, "-") + .replace(/\//g, "_"); + } + /** + * 'utf8': Multibyte encoded Unicode characters. Many web pages and other document formats use UTF-8. + * 'base64': Base64 encoding. + * + * @param base64Str Base64 encoded text + */ + static base64Decode(base64Str) { + return Buffer.from(base64Str, "base64").toString("utf8"); + } + /** + * @param base64Str Base64 encoded Url + */ + static base64DecodeUrl(base64Str) { + let str = base64Str.replace(/-/g, "+").replace(/_/g, "/"); + while (str.length % 4) { + str += "="; + } + return EncodingUtils.base64Decode(str); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class HashUtils { + /** + * generate 'SHA256' hash + * @param buffer + */ + sha256(buffer) { + return crypto.createHash(Hash.SHA256).update(buffer).digest(); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * https://tools.ietf.org/html/rfc7636#page-8 + */ +class PkceGenerator { + constructor() { + this.hashUtils = new HashUtils(); + } + /** + * generates the codeVerfier and the challenge from the codeVerfier + * reference: https://tools.ietf.org/html/rfc7636#section-4.1 and https://tools.ietf.org/html/rfc7636#section-4.2 + */ + async generatePkceCodes() { + const verifier = this.generateCodeVerifier(); + const challenge = this.generateCodeChallengeFromVerifier(verifier); + return { verifier, challenge }; + } + /** + * generates the codeVerfier; reference: https://tools.ietf.org/html/rfc7636#section-4.1 + */ + generateCodeVerifier() { + const charArr = []; + const maxNumber = 256 - (256 % CharSet.CV_CHARSET.length); + while (charArr.length <= RANDOM_OCTET_SIZE) { + const byte = crypto.randomBytes(1)[0]; + if (byte >= maxNumber) { + /* + * Ignore this number to maintain randomness. + * Including it would result in an unequal distribution of characters after doing the modulo + */ + continue; + } + const index = byte % CharSet.CV_CHARSET.length; + charArr.push(CharSet.CV_CHARSET[index]); + } + const verifier = charArr.join(Constants$1.EMPTY_STRING); + return EncodingUtils.base64EncodeUrl(verifier); + } + /** + * generate the challenge from the codeVerfier; reference: https://tools.ietf.org/html/rfc7636#section-4.2 + * @param codeVerifier + */ + generateCodeChallengeFromVerifier(codeVerifier) { + return EncodingUtils.base64EncodeUrl(this.hashUtils.sha256(codeVerifier).toString("base64"), "base64"); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class implements MSAL node's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and + * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636). + * @public + */ +class CryptoProvider { + constructor() { + // Browser crypto needs to be validated first before any other classes can be set. + this.pkceGenerator = new PkceGenerator(); + this.guidGenerator = new GuidGenerator(); + this.hashUtils = new HashUtils(); + } + /** + * base64 URL safe encoded string + */ + base64UrlEncode() { + throw new Error("Method not implemented."); + } + /** + * Stringifies and base64Url encodes input public key + * @param inputKid + * @returns Base64Url encoded public key + */ + encodeKid() { + throw new Error("Method not implemented."); + } + /** + * Creates a new random GUID - used to populate state and nonce. + * @returns string (GUID) + */ + createNewGuid() { + return this.guidGenerator.generateGuid(); + } + /** + * Encodes input string to base64. + * @param input - string to be encoded + */ + base64Encode(input) { + return EncodingUtils.base64Encode(input); + } + /** + * Decodes input string from base64. + * @param input - string to be decoded + */ + base64Decode(input) { + return EncodingUtils.base64Decode(input); + } + /** + * Generates PKCE codes used in Authorization Code Flow. + */ + generatePkceCodes() { + return this.pkceGenerator.generatePkceCodes(); + } + /** + * Generates a keypair, stores it and returns a thumbprint - not yet implemented for node + */ + getPublicKeyThumbprint() { + throw new Error("Method not implemented."); + } + /** + * Removes cryptographic keypair from key store matching the keyId passed in + * @param kid + */ + removeTokenBindingKey() { + throw new Error("Method not implemented."); + } + /** + * Removes all cryptographic keys from Keystore + */ + clearKeystore() { + throw new Error("Method not implemented."); + } + /** + * Signs the given object as a jwt payload with private key retrieved by given kid - currently not implemented for node + */ + signJwt() { + throw new Error("Method not implemented."); + } + /** + * Returns the SHA-256 hash of an input string + */ + async hashString(plainText) { + return EncodingUtils.base64EncodeUrl(this.hashUtils.sha256(plainText).toString("base64"), "base64"); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class implements Storage for node, reading cache from user specified storage location or an extension library + * @public + */ +class NodeStorage extends CacheManager { + constructor(logger, clientId, cryptoImpl, staticAuthorityOptions) { + super(clientId, cryptoImpl, logger, staticAuthorityOptions); + this.cache = {}; + this.changeEmitters = []; + this.logger = logger; + } + /** + * Queue up callbacks + * @param func - a callback function for cache change indication + */ + registerChangeEmitter(func) { + this.changeEmitters.push(func); + } + /** + * Invoke the callback when cache changes + */ + emitChange() { + this.changeEmitters.forEach((func) => func.call(null)); + } + /** + * Converts cacheKVStore to InMemoryCache + * @param cache - key value store + */ + cacheToInMemoryCache(cache) { + const inMemoryCache = { + accounts: {}, + idTokens: {}, + accessTokens: {}, + refreshTokens: {}, + appMetadata: {}, + }; + for (const key in cache) { + const value = cache[key]; + if (typeof value !== "object") { + continue; + } + if (value instanceof AccountEntity) { + inMemoryCache.accounts[key] = value; + } + else if (isIdTokenEntity(value)) { + inMemoryCache.idTokens[key] = value; + } + else if (isAccessTokenEntity(value)) { + inMemoryCache.accessTokens[key] = value; + } + else if (isRefreshTokenEntity(value)) { + inMemoryCache.refreshTokens[key] = value; + } + else if (isAppMetadataEntity(key, value)) { + inMemoryCache.appMetadata[key] = value; + } + else { + continue; + } + } + return inMemoryCache; + } + /** + * converts inMemoryCache to CacheKVStore + * @param inMemoryCache - kvstore map for inmemory + */ + inMemoryCacheToCache(inMemoryCache) { + // convert in memory cache to a flat Key-Value map + let cache = this.getCache(); + cache = { + ...cache, + ...inMemoryCache.accounts, + ...inMemoryCache.idTokens, + ...inMemoryCache.accessTokens, + ...inMemoryCache.refreshTokens, + ...inMemoryCache.appMetadata, + }; + // convert in memory cache to a flat Key-Value map + return cache; + } + /** + * gets the current in memory cache for the client + */ + getInMemoryCache() { + this.logger.trace("Getting in-memory cache"); + // convert the cache key value store to inMemoryCache + const inMemoryCache = this.cacheToInMemoryCache(this.getCache()); + return inMemoryCache; + } + /** + * sets the current in memory cache for the client + * @param inMemoryCache - key value map in memory + */ + setInMemoryCache(inMemoryCache) { + this.logger.trace("Setting in-memory cache"); + // convert and append the inMemoryCache to cacheKVStore + const cache = this.inMemoryCacheToCache(inMemoryCache); + this.setCache(cache); + this.emitChange(); + } + /** + * get the current cache key-value store + */ + getCache() { + this.logger.trace("Getting cache key-value store"); + return this.cache; + } + /** + * sets the current cache (key value store) + * @param cacheMap - key value map + */ + setCache(cache) { + this.logger.trace("Setting cache key value store"); + this.cache = cache; + // mark change in cache + this.emitChange(); + } + /** + * Gets cache item with given key. + * @param key - lookup key for the cache entry + */ + getItem(key) { + this.logger.tracePii(`Item key: ${key}`); + // read cache + const cache = this.getCache(); + return cache[key]; + } + /** + * Gets cache item with given key-value + * @param key - lookup key for the cache entry + * @param value - value of the cache entry + */ + setItem(key, value) { + this.logger.tracePii(`Item key: ${key}`); + // read cache + const cache = this.getCache(); + cache[key] = value; + // write to cache + this.setCache(cache); + } + getAccountKeys() { + const inMemoryCache = this.getInMemoryCache(); + const accountKeys = Object.keys(inMemoryCache.accounts); + return accountKeys; + } + getTokenKeys() { + const inMemoryCache = this.getInMemoryCache(); + const tokenKeys = { + idToken: Object.keys(inMemoryCache.idTokens), + accessToken: Object.keys(inMemoryCache.accessTokens), + refreshToken: Object.keys(inMemoryCache.refreshTokens), + }; + return tokenKeys; + } + /** + * fetch the account entity + * @param accountKey - lookup key to fetch cache type AccountEntity + */ + getAccount(accountKey) { + const accountEntity = this.getCachedAccountEntity(accountKey); + if (accountEntity && AccountEntity.isAccountEntity(accountEntity)) { + return this.updateOutdatedCachedAccount(accountKey, accountEntity); + } + return null; + } + /** + * Reads account from cache, builds it into an account entity and returns it. + * @param accountKey + * @returns + */ + getCachedAccountEntity(accountKey) { + const cachedAccount = this.getItem(accountKey); + return cachedAccount + ? Object.assign(new AccountEntity(), this.getItem(accountKey)) + : null; + } + /** + * set account entity + * @param account - cache value to be set of type AccountEntity + */ + setAccount(account) { + const accountKey = account.generateAccountKey(); + this.setItem(accountKey, account); + } + /** + * fetch the idToken credential + * @param idTokenKey - lookup key to fetch cache type IdTokenEntity + */ + getIdTokenCredential(idTokenKey) { + const idToken = this.getItem(idTokenKey); + if (isIdTokenEntity(idToken)) { + return idToken; + } + return null; + } + /** + * set idToken credential + * @param idToken - cache value to be set of type IdTokenEntity + */ + setIdTokenCredential(idToken) { + const idTokenKey = generateCredentialKey(idToken); + this.setItem(idTokenKey, idToken); + } + /** + * fetch the accessToken credential + * @param accessTokenKey - lookup key to fetch cache type AccessTokenEntity + */ + getAccessTokenCredential(accessTokenKey) { + const accessToken = this.getItem(accessTokenKey); + if (isAccessTokenEntity(accessToken)) { + return accessToken; + } + return null; + } + /** + * set accessToken credential + * @param accessToken - cache value to be set of type AccessTokenEntity + */ + setAccessTokenCredential(accessToken) { + const accessTokenKey = generateCredentialKey(accessToken); + this.setItem(accessTokenKey, accessToken); + } + /** + * fetch the refreshToken credential + * @param refreshTokenKey - lookup key to fetch cache type RefreshTokenEntity + */ + getRefreshTokenCredential(refreshTokenKey) { + const refreshToken = this.getItem(refreshTokenKey); + if (isRefreshTokenEntity(refreshToken)) { + return refreshToken; + } + return null; + } + /** + * set refreshToken credential + * @param refreshToken - cache value to be set of type RefreshTokenEntity + */ + setRefreshTokenCredential(refreshToken) { + const refreshTokenKey = generateCredentialKey(refreshToken); + this.setItem(refreshTokenKey, refreshToken); + } + /** + * fetch appMetadata entity from the platform cache + * @param appMetadataKey - lookup key to fetch cache type AppMetadataEntity + */ + getAppMetadata(appMetadataKey) { + const appMetadata = this.getItem(appMetadataKey); + if (isAppMetadataEntity(appMetadataKey, appMetadata)) { + return appMetadata; + } + return null; + } + /** + * set appMetadata entity to the platform cache + * @param appMetadata - cache value to be set of type AppMetadataEntity + */ + setAppMetadata(appMetadata) { + const appMetadataKey = generateAppMetadataKey(appMetadata); + this.setItem(appMetadataKey, appMetadata); + } + /** + * fetch server telemetry entity from the platform cache + * @param serverTelemetrykey - lookup key to fetch cache type ServerTelemetryEntity + */ + getServerTelemetry(serverTelemetrykey) { + const serverTelemetryEntity = this.getItem(serverTelemetrykey); + if (serverTelemetryEntity && + isServerTelemetryEntity(serverTelemetrykey, serverTelemetryEntity)) { + return serverTelemetryEntity; + } + return null; + } + /** + * set server telemetry entity to the platform cache + * @param serverTelemetryKey - lookup key to fetch cache type ServerTelemetryEntity + * @param serverTelemetry - cache value to be set of type ServerTelemetryEntity + */ + setServerTelemetry(serverTelemetryKey, serverTelemetry) { + this.setItem(serverTelemetryKey, serverTelemetry); + } + /** + * fetch authority metadata entity from the platform cache + * @param key - lookup key to fetch cache type AuthorityMetadataEntity + */ + getAuthorityMetadata(key) { + const authorityMetadataEntity = this.getItem(key); + if (authorityMetadataEntity && + isAuthorityMetadataEntity(key, authorityMetadataEntity)) { + return authorityMetadataEntity; + } + return null; + } + /** + * Get all authority metadata keys + */ + getAuthorityMetadataKeys() { + return this.getKeys().filter((key) => { + return this.isAuthorityMetadata(key); + }); + } + /** + * set authority metadata entity to the platform cache + * @param key - lookup key to fetch cache type AuthorityMetadataEntity + * @param metadata - cache value to be set of type AuthorityMetadataEntity + */ + setAuthorityMetadata(key, metadata) { + this.setItem(key, metadata); + } + /** + * fetch throttling entity from the platform cache + * @param throttlingCacheKey - lookup key to fetch cache type ThrottlingEntity + */ + getThrottlingCache(throttlingCacheKey) { + const throttlingCache = this.getItem(throttlingCacheKey); + if (throttlingCache && + isThrottlingEntity(throttlingCacheKey, throttlingCache)) { + return throttlingCache; + } + return null; + } + /** + * set throttling entity to the platform cache + * @param throttlingCacheKey - lookup key to fetch cache type ThrottlingEntity + * @param throttlingCache - cache value to be set of type ThrottlingEntity + */ + setThrottlingCache(throttlingCacheKey, throttlingCache) { + this.setItem(throttlingCacheKey, throttlingCache); + } + /** + * Removes the cache item from memory with the given key. + * @param key - lookup key to remove a cache entity + * @param inMemory - key value map of the cache + */ + removeItem(key) { + this.logger.tracePii(`Item key: ${key}`); + // read inMemoryCache + let result = false; + const cache = this.getCache(); + if (!!cache[key]) { + delete cache[key]; + result = true; + } + // write to the cache after removal + if (result) { + this.setCache(cache); + this.emitChange(); + } + return result; + } + /** + * Remove account entity from the platform cache if it's outdated + * @param accountKey + */ + removeOutdatedAccount(accountKey) { + this.removeItem(accountKey); + } + /** + * Checks whether key is in cache. + * @param key - look up key for a cache entity + */ + containsKey(key) { + return this.getKeys().includes(key); + } + /** + * Gets all keys in window. + */ + getKeys() { + this.logger.trace("Retrieving all cache keys"); + // read cache + const cache = this.getCache(); + return [...Object.keys(cache)]; + } + /** + * Clears all cache entries created by MSAL (except tokens). + */ + async clear() { + this.logger.trace("Clearing cache entries created by MSAL"); + // read inMemoryCache + const cacheKeys = this.getKeys(); + // delete each element + cacheKeys.forEach((key) => { + this.removeItem(key); + }); + this.emitChange(); + } + /** + * Initialize in memory cache from an exisiting cache vault + * @param cache - blob formatted cache (JSON) + */ + static generateInMemoryCache(cache) { + return Deserializer.deserializeAllCache(Deserializer.deserializeJSONBlob(cache)); + } + /** + * retrieves the final JSON + * @param inMemoryCache - itemised cache read from the JSON + */ + static generateJsonCache(inMemoryCache) { + return Serializer.serializeAllCache(inMemoryCache); + } + /** + * Updates a credential's cache key if the current cache key is outdated + */ + updateCredentialCacheKey(currentCacheKey, credential) { + const updatedCacheKey = generateCredentialKey(credential); + if (currentCacheKey !== updatedCacheKey) { + const cacheItem = this.getItem(currentCacheKey); + if (cacheItem) { + this.removeItem(currentCacheKey); + this.setItem(updatedCacheKey, cacheItem); + this.logger.verbose(`Updated an outdated ${credential.credentialType} cache key`); + return updatedCacheKey; + } + else { + this.logger.error(`Attempted to update an outdated ${credential.credentialType} cache key but no item matching the outdated key was found in storage`); + } + } + return currentCacheKey; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const defaultSerializedCache = { + Account: {}, + IdToken: {}, + AccessToken: {}, + RefreshToken: {}, + AppMetadata: {}, +}; +/** + * In-memory token cache manager + * @public + */ +class TokenCache { + constructor(storage, logger, cachePlugin) { + this.cacheHasChanged = false; + this.storage = storage; + this.storage.registerChangeEmitter(this.handleChangeEvent.bind(this)); + if (cachePlugin) { + this.persistence = cachePlugin; + } + this.logger = logger; + } + /** + * Set to true if cache state has changed since last time serialize or writeToPersistence was called + */ + hasChanged() { + return this.cacheHasChanged; + } + /** + * Serializes in memory cache to JSON + */ + serialize() { + this.logger.trace("Serializing in-memory cache"); + let finalState = Serializer.serializeAllCache(this.storage.getInMemoryCache()); + // if cacheSnapshot not null or empty, merge + if (this.cacheSnapshot) { + this.logger.trace("Reading cache snapshot from disk"); + finalState = this.mergeState(JSON.parse(this.cacheSnapshot), finalState); + } + else { + this.logger.trace("No cache snapshot to merge"); + } + this.cacheHasChanged = false; + return JSON.stringify(finalState); + } + /** + * Deserializes JSON to in-memory cache. JSON should be in MSAL cache schema format + * @param cache - blob formatted cache + */ + deserialize(cache) { + this.logger.trace("Deserializing JSON to in-memory cache"); + this.cacheSnapshot = cache; + if (this.cacheSnapshot) { + this.logger.trace("Reading cache snapshot from disk"); + const deserializedCache = Deserializer.deserializeAllCache(this.overlayDefaults(JSON.parse(this.cacheSnapshot))); + this.storage.setInMemoryCache(deserializedCache); + } + else { + this.logger.trace("No cache snapshot to deserialize"); + } + } + /** + * Fetches the cache key-value map + */ + getKVStore() { + return this.storage.getCache(); + } + /** + * API that retrieves all accounts currently in cache to the user + */ + async getAllAccounts() { + this.logger.trace("getAllAccounts called"); + let cacheContext; + try { + if (this.persistence) { + cacheContext = new TokenCacheContext(this, true); + await this.persistence.beforeCacheAccess(cacheContext); + } + return this.storage.getAllAccounts(); + } + finally { + if (this.persistence && cacheContext) { + await this.persistence.afterCacheAccess(cacheContext); + } + } + } + /** + * Returns the signed in account matching homeAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param homeAccountId - unique identifier for an account (uid.utid) + */ + async getAccountByHomeId(homeAccountId) { + const allAccounts = await this.getAllAccounts(); + if (homeAccountId && allAccounts && allAccounts.length) { + return (allAccounts.filter((accountObj) => accountObj.homeAccountId === homeAccountId)[0] || null); + } + else { + return null; + } + } + /** + * Returns the signed in account matching localAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param localAccountId - unique identifier of an account (sub/obj when homeAccountId cannot be populated) + */ + async getAccountByLocalId(localAccountId) { + const allAccounts = await this.getAllAccounts(); + if (localAccountId && allAccounts && allAccounts.length) { + return (allAccounts.filter((accountObj) => accountObj.localAccountId === localAccountId)[0] || null); + } + else { + return null; + } + } + /** + * API to remove a specific account and the relevant data from cache + * @param account - AccountInfo passed by the user + */ + async removeAccount(account) { + this.logger.trace("removeAccount called"); + let cacheContext; + try { + if (this.persistence) { + cacheContext = new TokenCacheContext(this, true); + await this.persistence.beforeCacheAccess(cacheContext); + } + await this.storage.removeAccount(AccountEntity.generateAccountCacheKey(account)); + } + finally { + if (this.persistence && cacheContext) { + await this.persistence.afterCacheAccess(cacheContext); + } + } + } + /** + * Called when the cache has changed state. + */ + handleChangeEvent() { + this.cacheHasChanged = true; + } + /** + * Merge in memory cache with the cache snapshot. + * @param oldState - cache before changes + * @param currentState - current cache state in the library + */ + mergeState(oldState, currentState) { + this.logger.trace("Merging in-memory cache with cache snapshot"); + const stateAfterRemoval = this.mergeRemovals(oldState, currentState); + return this.mergeUpdates(stateAfterRemoval, currentState); + } + /** + * Deep update of oldState based on newState values + * @param oldState - cache before changes + * @param newState - updated cache + */ + mergeUpdates(oldState, newState) { + Object.keys(newState).forEach((newKey) => { + const newValue = newState[newKey]; + // if oldState does not contain value but newValue does, add it + if (!oldState.hasOwnProperty(newKey)) { + if (newValue !== null) { + oldState[newKey] = newValue; + } + } + else { + // both oldState and newState contain the key, do deep update + const newValueNotNull = newValue !== null; + const newValueIsObject = typeof newValue === "object"; + const newValueIsNotArray = !Array.isArray(newValue); + const oldStateNotUndefinedOrNull = typeof oldState[newKey] !== "undefined" && + oldState[newKey] !== null; + if (newValueNotNull && + newValueIsObject && + newValueIsNotArray && + oldStateNotUndefinedOrNull) { + this.mergeUpdates(oldState[newKey], newValue); + } + else { + oldState[newKey] = newValue; + } + } + }); + return oldState; + } + /** + * Removes entities in oldState that the were removed from newState. If there are any unknown values in root of + * oldState that are not recognized, they are left untouched. + * @param oldState - cache before changes + * @param newState - updated cache + */ + mergeRemovals(oldState, newState) { + this.logger.trace("Remove updated entries in cache"); + const accounts = oldState.Account + ? this.mergeRemovalsDict(oldState.Account, newState.Account) + : oldState.Account; + const accessTokens = oldState.AccessToken + ? this.mergeRemovalsDict(oldState.AccessToken, newState.AccessToken) + : oldState.AccessToken; + const refreshTokens = oldState.RefreshToken + ? this.mergeRemovalsDict(oldState.RefreshToken, newState.RefreshToken) + : oldState.RefreshToken; + const idTokens = oldState.IdToken + ? this.mergeRemovalsDict(oldState.IdToken, newState.IdToken) + : oldState.IdToken; + const appMetadata = oldState.AppMetadata + ? this.mergeRemovalsDict(oldState.AppMetadata, newState.AppMetadata) + : oldState.AppMetadata; + return { + ...oldState, + Account: accounts, + AccessToken: accessTokens, + RefreshToken: refreshTokens, + IdToken: idTokens, + AppMetadata: appMetadata, + }; + } + /** + * Helper to merge new cache with the old one + * @param oldState - cache before changes + * @param newState - updated cache + */ + mergeRemovalsDict(oldState, newState) { + const finalState = { ...oldState }; + Object.keys(oldState).forEach((oldKey) => { + if (!newState || !newState.hasOwnProperty(oldKey)) { + delete finalState[oldKey]; + } + }); + return finalState; + } + /** + * Helper to overlay as a part of cache merge + * @param passedInCache - cache read from the blob + */ + overlayDefaults(passedInCache) { + this.logger.trace("Overlaying input cache with the default cache"); + return { + Account: { + ...defaultSerializedCache.Account, + ...passedInCache.Account, + }, + IdToken: { + ...defaultSerializedCache.IdToken, + ...passedInCache.IdToken, + }, + AccessToken: { + ...defaultSerializedCache.AccessToken, + ...passedInCache.AccessToken, + }, + RefreshToken: { + ...defaultSerializedCache.RefreshToken, + ...passedInCache.RefreshToken, + }, + AppMetadata: { + ...defaultSerializedCache.AppMetadata, + ...passedInCache.AppMetadata, + }, + }; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Client assertion of type jwt-bearer used in confidential client flows + * @public + */ +class ClientAssertion { + /** + * Initialize the ClientAssertion class from the clientAssertion passed by the user + * @param assertion - refer https://tools.ietf.org/html/rfc7521 + */ + static fromAssertion(assertion) { + const clientAssertion = new ClientAssertion(); + clientAssertion.jwt = assertion; + return clientAssertion; + } + /** + * @deprecated Use fromCertificateWithSha256Thumbprint instead, with a SHA-256 thumprint + * Initialize the ClientAssertion class from the certificate passed by the user + * @param thumbprint - identifier of a certificate + * @param privateKey - secret key + * @param publicCertificate - electronic document provided to prove the ownership of the public key + */ + static fromCertificate(thumbprint, privateKey, publicCertificate) { + const clientAssertion = new ClientAssertion(); + clientAssertion.privateKey = privateKey; + clientAssertion.thumbprint = thumbprint; + clientAssertion.useSha256 = false; + if (publicCertificate) { + clientAssertion.publicCertificate = + this.parseCertificate(publicCertificate); + } + return clientAssertion; + } + /** + * Initialize the ClientAssertion class from the certificate passed by the user + * @param thumbprint - identifier of a certificate + * @param privateKey - secret key + * @param publicCertificate - electronic document provided to prove the ownership of the public key + */ + static fromCertificateWithSha256Thumbprint(thumbprint, privateKey, publicCertificate) { + const clientAssertion = new ClientAssertion(); + clientAssertion.privateKey = privateKey; + clientAssertion.thumbprint = thumbprint; + clientAssertion.useSha256 = true; + if (publicCertificate) { + clientAssertion.publicCertificate = + this.parseCertificate(publicCertificate); + } + return clientAssertion; + } + /** + * Update JWT for certificate based clientAssertion, if passed by the user, uses it as is + * @param cryptoProvider - library's crypto helper + * @param issuer - iss claim + * @param jwtAudience - aud claim + */ + getJwt(cryptoProvider, issuer, jwtAudience) { + // if assertion was created from certificate, check if jwt is expired and create new one. + if (this.privateKey && this.thumbprint) { + if (this.jwt && + !this.isExpired() && + issuer === this.issuer && + jwtAudience === this.jwtAudience) { + return this.jwt; + } + return this.createJwt(cryptoProvider, issuer, jwtAudience); + } + /* + * if assertion was created by caller, then we just append it. It is up to the caller to + * ensure that it contains necessary claims and that it is not expired. + */ + if (this.jwt) { + return this.jwt; + } + throw createClientAuthError(invalidAssertion); + } + /** + * JWT format and required claims specified: https://tools.ietf.org/html/rfc7523#section-3 + */ + createJwt(cryptoProvider, issuer, jwtAudience) { + this.issuer = issuer; + this.jwtAudience = jwtAudience; + const issuedAt = nowSeconds(); + this.expirationTime = issuedAt + 600; + const algorithm = this.useSha256 + ? JwtConstants.PSS_256 + : JwtConstants.RSA_256; + const header = { + alg: algorithm, + }; + const thumbprintHeader = this.useSha256 + ? JwtConstants.X5T_256 + : JwtConstants.X5T; + Object.assign(header, { + [thumbprintHeader]: EncodingUtils.base64EncodeUrl(this.thumbprint, "hex"), + }); + if (this.publicCertificate) { + Object.assign(header, { + [JwtConstants.X5C]: this.publicCertificate, + }); + } + const payload = { + [JwtConstants.AUDIENCE]: this.jwtAudience, + [JwtConstants.EXPIRATION_TIME]: this.expirationTime, + [JwtConstants.ISSUER]: this.issuer, + [JwtConstants.SUBJECT]: this.issuer, + [JwtConstants.NOT_BEFORE]: issuedAt, + [JwtConstants.JWT_ID]: cryptoProvider.createNewGuid(), + }; + this.jwt = jwt.sign(payload, this.privateKey, { header }); + return this.jwt; + } + /** + * Utility API to check expiration + */ + isExpired() { + return this.expirationTime < nowSeconds(); + } + /** + * Extracts the raw certs from a given certificate string and returns them in an array. + * @param publicCertificate - electronic document provided to prove the ownership of the public key + */ + static parseCertificate(publicCertificate) { + /** + * This is regex to identify the certs in a given certificate string. + * We want to look for the contents between the BEGIN and END certificate strings, without the associated newlines. + * The information in parens "(.+?)" is the capture group to represent the cert we want isolated. + * "." means any string character, "+" means match 1 or more times, and "?" means the shortest match. + * The "g" at the end of the regex means search the string globally, and the "s" enables the "." to match newlines. + */ + const regexToFindCerts = /-----BEGIN CERTIFICATE-----\r*\n(.+?)\r*\n-----END CERTIFICATE-----/gs; + const certs = []; + let matches; + while ((matches = regexToFindCerts.exec(publicCertificate)) !== null) { + // matches[1] represents the first parens capture group in the regex. + certs.push(matches[1].replace(/\r*\n/g, Constants$1.EMPTY_STRING)); + } + return certs; + } +} + +/* eslint-disable header/header */ +const name = "@azure/msal-node"; +const version = "2.15.0"; + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Oauth2.0 Password grant client + * Note: We are only supporting public clients for password grant and for purely testing purposes + */ +class UsernamePasswordClient extends BaseClient { + constructor(configuration) { + super(configuration); + } + /** + * API to acquire a token by passing the username and password to the service in exchage of credentials + * password_grant + * @param request + */ + async acquireToken(request) { + this.logger.info("in acquireToken call in username-password client"); + const reqTimestamp = nowSeconds(); + const response = await this.executeTokenRequest(this.authority, request); + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin); + // Validate response. This function throws a server error if an error is returned by the server. + responseHandler.validateTokenResponse(response.body); + const tokenResponse = responseHandler.handleServerTokenResponse(response.body, this.authority, reqTimestamp, request); + return tokenResponse; + } + /** + * Executes POST request to token endpoint + * @param authority + * @param request + */ + async executeTokenRequest(authority, request) { + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await this.createTokenRequestBody(request); + const headers = this.createTokenRequestHeaders({ + credential: request.username, + type: CcsCredentialType.UPN, + }); + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: authority.canonicalAuthority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + return this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); + } + /** + * Generates a map for all the params to be sent to the service + * @param request + */ + async createTokenRequestBody(request) { + const parameterBuilder = new RequestParameterBuilder(); + parameterBuilder.addClientId(this.config.authOptions.clientId); + parameterBuilder.addUsername(request.username); + parameterBuilder.addPassword(request.password); + parameterBuilder.addScopes(request.scopes); + parameterBuilder.addResponseTypeForTokenAndIdToken(); + parameterBuilder.addGrantType(GrantType.RESOURCE_OWNER_PASSWORD_GRANT); + parameterBuilder.addClientInfo(); + parameterBuilder.addLibraryInfo(this.config.libraryInfo); + parameterBuilder.addApplicationTelemetry(this.config.telemetry.application); + parameterBuilder.addThrottling(); + if (this.serverTelemetryManager) { + parameterBuilder.addServerTelemetry(this.serverTelemetryManager); + } + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + parameterBuilder.addCorrelationId(correlationId); + if (this.config.clientCredentials.clientSecret) { + parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret); + } + const clientAssertion = this.config.clientCredentials.clientAssertion; + if (clientAssertion) { + parameterBuilder.addClientAssertion(await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + parameterBuilder.addClientAssertionType(clientAssertion.assertionType); + } + if (!StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities); + } + if (this.config.systemOptions.preventCorsPreflight && + request.username) { + parameterBuilder.addCcsUpn(request.username); + } + return parameterBuilder.createQueryString(); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Base abstract class for all ClientApplications - public and confidential + * @public + */ +class ClientApplication { + /** + * Constructor for the ClientApplication + */ + constructor(configuration) { + this.config = buildAppConfiguration(configuration); + this.cryptoProvider = new CryptoProvider(); + this.logger = new Logger(this.config.system.loggerOptions, name, version); + this.storage = new NodeStorage(this.logger, this.config.auth.clientId, this.cryptoProvider, buildStaticAuthorityOptions(this.config.auth)); + this.tokenCache = new TokenCache(this.storage, this.logger, this.config.cache.cachePlugin); + } + /** + * Creates the URL of the authorization request, letting the user input credentials and consent to the + * application. The URL targets the /authorize endpoint of the authority configured in the + * application object. + * + * Once the user inputs their credentials and consents, the authority will send a response to the redirect URI + * sent in the request and should contain an authorization code, which can then be used to acquire tokens via + * `acquireTokenByCode(AuthorizationCodeRequest)`. + */ + async getAuthCodeUrl(request) { + this.logger.info("getAuthCodeUrl called", request.correlationId); + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + responseMode: request.responseMode || ResponseMode.QUERY, + authenticationScheme: AuthenticationScheme.BEARER, + }; + const authClientConfig = await this.buildOauthClientConfiguration(validRequest.authority, validRequest.correlationId, undefined, undefined, request.azureCloudOptions); + const authorizationCodeClient = new AuthorizationCodeClient(authClientConfig); + this.logger.verbose("Auth code client created", validRequest.correlationId); + return authorizationCodeClient.getAuthCodeUrl(validRequest); + } + /** + * Acquires a token by exchanging the Authorization Code received from the first step of OAuth2.0 + * Authorization Code flow. + * + * `getAuthCodeUrl(AuthorizationCodeUrlRequest)` can be used to create the URL for the first step of OAuth2.0 + * Authorization Code flow. Ensure that values for redirectUri and scopes in AuthorizationCodeUrlRequest and + * AuthorizationCodeRequest are the same. + */ + async acquireTokenByCode(request, authCodePayLoad) { + this.logger.info("acquireTokenByCode called"); + if (request.state && authCodePayLoad) { + this.logger.info("acquireTokenByCode - validating state"); + this.validateState(request.state, authCodePayLoad.state || ""); + // eslint-disable-next-line no-param-reassign + authCodePayLoad = { ...authCodePayLoad, state: "" }; + } + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + authenticationScheme: AuthenticationScheme.BEARER, + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByCode, validRequest.correlationId); + try { + const authClientConfig = await this.buildOauthClientConfiguration(validRequest.authority, validRequest.correlationId, serverTelemetryManager, undefined, request.azureCloudOptions); + const authorizationCodeClient = new AuthorizationCodeClient(authClientConfig); + this.logger.verbose("Auth code client created", validRequest.correlationId); + return await authorizationCodeClient.acquireToken(validRequest, authCodePayLoad); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires a token by exchanging the refresh token provided for a new set of tokens. + * + * This API is provided only for scenarios where you would like to migrate from ADAL to MSAL. Otherwise, it is + * recommended that you use `acquireTokenSilent()` for silent scenarios. When using `acquireTokenSilent()`, MSAL will + * handle the caching and refreshing of tokens automatically. + */ + async acquireTokenByRefreshToken(request) { + this.logger.info("acquireTokenByRefreshToken called", request.correlationId); + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + authenticationScheme: AuthenticationScheme.BEARER, + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByRefreshToken, validRequest.correlationId); + try { + const refreshTokenClientConfig = await this.buildOauthClientConfiguration(validRequest.authority, validRequest.correlationId, serverTelemetryManager, undefined, request.azureCloudOptions); + const refreshTokenClient = new RefreshTokenClient(refreshTokenClientConfig); + this.logger.verbose("Refresh token client created", validRequest.correlationId); + return await refreshTokenClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires a token silently when a user specifies the account the token is requested for. + * + * This API expects the user to provide an account object and looks into the cache to retrieve the token if present. + * There is also an optional "forceRefresh" boolean the user can send to bypass the cache for access_token and id_token. + * In case the refresh_token is expired or not found, an error is thrown + * and the guidance is for the user to call any interactive token acquisition API (eg: `acquireTokenByCode()`). + */ + async acquireTokenSilent(request) { + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + forceRefresh: request.forceRefresh || false, + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent, validRequest.correlationId, validRequest.forceRefresh); + try { + const silentFlowClientConfig = await this.buildOauthClientConfiguration(validRequest.authority, validRequest.correlationId, serverTelemetryManager, undefined, request.azureCloudOptions); + const silentFlowClient = new SilentFlowClient(silentFlowClientConfig); + this.logger.verbose("Silent flow client created", validRequest.correlationId); + return await silentFlowClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires tokens with password grant by exchanging client applications username and password for credentials + * + * The latest OAuth 2.0 Security Best Current Practice disallows the password grant entirely. + * More details on this recommendation at https://tools.ietf.org/html/draft-ietf-oauth-security-topics-13#section-3.4 + * Microsoft's documentation and recommendations are at: + * https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-authentication-flows#usernamepassword + * + * @param request - UsenamePasswordRequest + */ + async acquireTokenByUsernamePassword(request) { + this.logger.info("acquireTokenByUsernamePassword called", request.correlationId); + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByUsernamePassword, validRequest.correlationId); + try { + const usernamePasswordClientConfig = await this.buildOauthClientConfiguration(validRequest.authority, validRequest.correlationId, serverTelemetryManager, undefined, request.azureCloudOptions); + const usernamePasswordClient = new UsernamePasswordClient(usernamePasswordClientConfig); + this.logger.verbose("Username password client created", validRequest.correlationId); + return await usernamePasswordClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Gets the token cache for the application. + */ + getTokenCache() { + this.logger.info("getTokenCache called"); + return this.tokenCache; + } + /** + * Validates OIDC state by comparing the user cached state with the state received from the server. + * + * This API is provided for scenarios where you would use OAuth2.0 state parameter to mitigate against + * CSRF attacks. + * For more information about state, visit https://datatracker.ietf.org/doc/html/rfc6819#section-3.6. + * @param state + * @param cachedState + */ + validateState(state, cachedState) { + if (!state) { + throw NodeAuthError.createStateNotFoundError(); + } + if (state !== cachedState) { + throw createClientAuthError(stateMismatch); + } + } + /** + * Returns the logger instance + */ + getLogger() { + return this.logger; + } + /** + * Replaces the default logger set in configurations with new Logger with new configurations + * @param logger - Logger instance + */ + setLogger(logger) { + this.logger = logger; + } + /** + * Builds the common configuration to be passed to the common component based on the platform configurarion + * @param authority - user passed authority in configuration + * @param serverTelemetryManager - initializes servertelemetry if passed + */ + async buildOauthClientConfiguration(authority, requestCorrelationId, serverTelemetryManager, azureRegionConfiguration, azureCloudOptions) { + this.logger.verbose("buildOauthClientConfiguration called", requestCorrelationId); + // precedence - azureCloudInstance + tenant >> authority and request >> config + const userAzureCloudOptions = azureCloudOptions + ? azureCloudOptions + : this.config.auth.azureCloudOptions; + // using null assertion operator as we ensure that all config values have default values in buildConfiguration() + const discoveredAuthority = await this.createAuthority(authority, requestCorrelationId, azureRegionConfiguration, userAzureCloudOptions); + this.logger.info(`Building oauth client configuration with the following authority: ${discoveredAuthority.tokenEndpoint}.`, requestCorrelationId); + serverTelemetryManager?.updateRegionDiscoveryMetadata(discoveredAuthority.regionDiscoveryMetadata); + const clientConfiguration = { + authOptions: { + clientId: this.config.auth.clientId, + authority: discoveredAuthority, + clientCapabilities: this.config.auth.clientCapabilities, + }, + loggerOptions: { + logLevel: this.config.system.loggerOptions.logLevel, + loggerCallback: this.config.system.loggerOptions.loggerCallback, + piiLoggingEnabled: this.config.system.loggerOptions.piiLoggingEnabled, + correlationId: requestCorrelationId, + }, + cacheOptions: { + claimsBasedCachingEnabled: this.config.cache.claimsBasedCachingEnabled, + }, + cryptoInterface: this.cryptoProvider, + networkInterface: this.config.system.networkClient, + storageInterface: this.storage, + serverTelemetryManager: serverTelemetryManager, + clientCredentials: { + clientSecret: this.clientSecret, + clientAssertion: await this.getClientAssertion(discoveredAuthority), + }, + libraryInfo: { + sku: Constants.MSAL_SKU, + version: version, + cpu: process.arch || Constants$1.EMPTY_STRING, + os: process.platform || Constants$1.EMPTY_STRING, + }, + telemetry: this.config.telemetry, + persistencePlugin: this.config.cache.cachePlugin, + serializableCache: this.tokenCache, + }; + return clientConfiguration; + } + async getClientAssertion(authority) { + if (this.developerProvidedClientAssertion) { + this.clientAssertion = ClientAssertion.fromAssertion(await getClientAssertion(this.developerProvidedClientAssertion, this.config.auth.clientId, authority.tokenEndpoint)); + } + return (this.clientAssertion && { + assertion: this.clientAssertion.getJwt(this.cryptoProvider, this.config.auth.clientId, authority.tokenEndpoint), + assertionType: Constants.JWT_BEARER_ASSERTION_TYPE, + }); + } + /** + * Generates a request with the default scopes & generates a correlationId. + * @param authRequest - BaseAuthRequest for initialization + */ + async initializeBaseRequest(authRequest) { + this.logger.verbose("initializeRequestScopes called", authRequest.correlationId); + // Default authenticationScheme to Bearer, log that POP isn't supported yet + if (authRequest.authenticationScheme && + authRequest.authenticationScheme === AuthenticationScheme.POP) { + this.logger.verbose("Authentication Scheme 'pop' is not supported yet, setting Authentication Scheme to 'Bearer' for request", authRequest.correlationId); + } + authRequest.authenticationScheme = AuthenticationScheme.BEARER; + // Set requested claims hash if claims-based caching is enabled and claims were requested + if (this.config.cache.claimsBasedCachingEnabled && + authRequest.claims && + // Checks for empty stringified object "{}" which doesn't qualify as requested claims + !StringUtils.isEmptyObj(authRequest.claims)) { + authRequest.requestedClaimsHash = + await this.cryptoProvider.hashString(authRequest.claims); + } + return { + ...authRequest, + scopes: [ + ...((authRequest && authRequest.scopes) || []), + ...OIDC_DEFAULT_SCOPES, + ], + correlationId: (authRequest && authRequest.correlationId) || + this.cryptoProvider.createNewGuid(), + authority: authRequest.authority || this.config.auth.authority, + }; + } + /** + * Initializes the server telemetry payload + * @param apiId - Id for a specific request + * @param correlationId - GUID + * @param forceRefresh - boolean to indicate network call + */ + initializeServerTelemetryManager(apiId, correlationId, forceRefresh) { + const telemetryPayload = { + clientId: this.config.auth.clientId, + correlationId: correlationId, + apiId: apiId, + forceRefresh: forceRefresh || false, + }; + return new ServerTelemetryManager(telemetryPayload, this.storage); + } + /** + * Create authority instance. If authority not passed in request, default to authority set on the application + * object. If no authority set in application object, then default to common authority. + * @param authorityString - authority from user configuration + */ + async createAuthority(authorityString, requestCorrelationId, azureRegionConfiguration, azureCloudOptions) { + this.logger.verbose("createAuthority called", requestCorrelationId); + // build authority string based on auth params - azureCloudInstance is prioritized if provided + const authorityUrl = Authority.generateAuthority(authorityString, azureCloudOptions); + const authorityOptions = { + protocolMode: this.config.auth.protocolMode, + knownAuthorities: this.config.auth.knownAuthorities, + cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata, + authorityMetadata: this.config.auth.authorityMetadata, + azureRegionConfiguration, + skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache, + }; + return createDiscoveredInstance(authorityUrl, this.config.system.networkClient, this.storage, authorityOptions, this.logger, requestCorrelationId); + } + /** + * Clear the cache + */ + clearCache() { + void this.storage.clear(); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class LoopbackClient { + /** + * Spins up a loopback server which returns the server response when the localhost redirectUri is hit + * @param successTemplate + * @param errorTemplate + * @returns + */ + async listenForAuthCode(successTemplate, errorTemplate) { + if (this.server) { + throw NodeAuthError.createLoopbackServerAlreadyExistsError(); + } + return new Promise((resolve, reject) => { + this.server = http.createServer((req, res) => { + const url = req.url; + if (!url) { + res.end(errorTemplate || + "Error occurred loading redirectUrl"); + reject(NodeAuthError.createUnableToLoadRedirectUrlError()); + return; + } + else if (url === Constants$1.FORWARD_SLASH) { + res.end(successTemplate || + "Auth code was successfully acquired. You can close this window now."); + return; + } + const redirectUri = this.getRedirectUri(); + const parsedUrl = new URL(url, redirectUri); + const authCodeResponse = getDeserializedResponse(parsedUrl.search) || {}; + if (authCodeResponse.code) { + res.writeHead(HttpStatus.REDIRECT, { + location: redirectUri, + }); // Prevent auth code from being saved in the browser history + res.end(); + } + if (authCodeResponse.error) { + res.end(errorTemplate || + `Error occurred: ${authCodeResponse.error}`); + } + resolve(authCodeResponse); + }); + this.server.listen(0, "127.0.0.1"); // Listen on any available port + }); + } + /** + * Get the port that the loopback server is running on + * @returns + */ + getRedirectUri() { + if (!this.server || !this.server.listening) { + throw NodeAuthError.createNoLoopbackServerExistsError(); + } + const address = this.server.address(); + if (!address || typeof address === "string" || !address.port) { + this.closeServer(); + throw NodeAuthError.createInvalidLoopbackAddressTypeError(); + } + const port = address && address.port; + return `${Constants.HTTP_PROTOCOL}${Constants.LOCALHOST}:${port}`; + } + /** + * Close the loopback server + */ + closeServer() { + if (this.server) { + // Only stops accepting new connections, server will close once open/idle connections are closed. + this.server.close(); + if (typeof this.server.closeAllConnections === "function") { + /* + * Close open/idle connections. This API is available in Node versions 18.2 and higher + */ + this.server.closeAllConnections(); + } + this.server.unref(); + this.server = undefined; + } + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * OAuth2.0 Device code client + */ +class DeviceCodeClient extends BaseClient { + constructor(configuration) { + super(configuration); + } + /** + * Gets device code from device code endpoint, calls back to with device code response, and + * polls token endpoint to exchange device code for tokens + * @param request + */ + async acquireToken(request) { + const deviceCodeResponse = await this.getDeviceCode(request); + request.deviceCodeCallback(deviceCodeResponse); + const reqTimestamp = nowSeconds(); + const response = await this.acquireTokenWithDeviceCode(request, deviceCodeResponse); + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin); + // Validate response. This function throws a server error if an error is returned by the server. + responseHandler.validateTokenResponse(response); + return responseHandler.handleServerTokenResponse(response, this.authority, reqTimestamp, request); + } + /** + * Creates device code request and executes http GET + * @param request + */ + async getDeviceCode(request) { + const queryParametersString = this.createExtraQueryParameters(request); + const endpoint = UrlString.appendQueryString(this.authority.deviceCodeEndpoint, queryParametersString); + const queryString = this.createQueryString(request); + const headers = this.createTokenRequestHeaders(); + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: request.authority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + return this.executePostRequestToDeviceCodeEndpoint(endpoint, queryString, headers, thumbprint); + } + /** + * Creates query string for the device code request + * @param request + */ + createExtraQueryParameters(request) { + const parameterBuilder = new RequestParameterBuilder(); + if (request.extraQueryParameters) { + parameterBuilder.addExtraQueryParameters(request.extraQueryParameters); + } + return parameterBuilder.createQueryString(); + } + /** + * Executes POST request to device code endpoint + * @param deviceCodeEndpoint + * @param queryString + * @param headers + */ + async executePostRequestToDeviceCodeEndpoint(deviceCodeEndpoint, queryString, headers, thumbprint) { + const { body: { user_code: userCode, device_code: deviceCode, verification_uri: verificationUri, expires_in: expiresIn, interval, message, }, } = await this.networkManager.sendPostRequest(thumbprint, deviceCodeEndpoint, { + body: queryString, + headers: headers, + }); + return { + userCode, + deviceCode, + verificationUri, + expiresIn, + interval, + message, + }; + } + /** + * Create device code endpoint query parameters and returns string + */ + createQueryString(request) { + const parameterBuilder = new RequestParameterBuilder(); + parameterBuilder.addScopes(request.scopes); + parameterBuilder.addClientId(this.config.authOptions.clientId); + if (request.extraQueryParameters) { + parameterBuilder.addExtraQueryParameters(request.extraQueryParameters); + } + if (request.claims || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities); + } + return parameterBuilder.createQueryString(); + } + /** + * Breaks the polling with specific conditions. + * @param request CommonDeviceCodeRequest + * @param deviceCodeResponse DeviceCodeResponse + */ + continuePolling(deviceCodeExpirationTime, userSpecifiedTimeout, userSpecifiedCancelFlag) { + if (userSpecifiedCancelFlag) { + this.logger.error("Token request cancelled by setting DeviceCodeRequest.cancel = true"); + throw createClientAuthError(deviceCodePollingCancelled); + } + else if (userSpecifiedTimeout && + userSpecifiedTimeout < deviceCodeExpirationTime && + nowSeconds() > userSpecifiedTimeout) { + this.logger.error(`User defined timeout for device code polling reached. The timeout was set for ${userSpecifiedTimeout}`); + throw createClientAuthError(userTimeoutReached); + } + else if (nowSeconds() > deviceCodeExpirationTime) { + if (userSpecifiedTimeout) { + this.logger.verbose(`User specified timeout ignored as the device code has expired before the timeout elapsed. The user specified timeout was set for ${userSpecifiedTimeout}`); + } + this.logger.error(`Device code expired. Expiration time of device code was ${deviceCodeExpirationTime}`); + throw createClientAuthError(deviceCodeExpired); + } + return true; + } + /** + * Creates token request with device code response and polls token endpoint at interval set by the device code + * response + * @param request + * @param deviceCodeResponse + */ + async acquireTokenWithDeviceCode(request, deviceCodeResponse) { + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(this.authority.tokenEndpoint, queryParametersString); + const requestBody = this.createTokenRequestBody(request, deviceCodeResponse); + const headers = this.createTokenRequestHeaders(); + const userSpecifiedTimeout = request.timeout + ? nowSeconds() + request.timeout + : undefined; + const deviceCodeExpirationTime = nowSeconds() + deviceCodeResponse.expiresIn; + const pollingIntervalMilli = deviceCodeResponse.interval * 1000; + /* + * Poll token endpoint while (device code is not expired AND operation has not been cancelled by + * setting CancellationToken.cancel = true). POST request is sent at interval set by pollingIntervalMilli + */ + while (this.continuePolling(deviceCodeExpirationTime, userSpecifiedTimeout, request.cancel)) { + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: request.authority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); + if (response.body && response.body.error) { + // user authorization is pending. Sleep for polling interval and try again + if (response.body.error === Constants$1.AUTHORIZATION_PENDING) { + this.logger.info("Authorization pending. Continue polling."); + await delay(pollingIntervalMilli); + } + else { + // for any other error, throw + this.logger.info("Unexpected error in polling from the server"); + throw createAuthError(postRequestFailed, response.body.error); + } + } + else { + this.logger.verbose("Authorization completed successfully. Polling stopped."); + return response.body; + } + } + /* + * The above code should've thrown by this point, but to satisfy TypeScript, + * and in the rare case the conditionals in continuePolling() may not catch everything... + */ + this.logger.error("Polling stopped for unknown reasons."); + throw createClientAuthError(deviceCodeUnknownError); + } + /** + * Creates query parameters and converts to string. + * @param request + * @param deviceCodeResponse + */ + createTokenRequestBody(request, deviceCodeResponse) { + const requestParameters = new RequestParameterBuilder(); + requestParameters.addScopes(request.scopes); + requestParameters.addClientId(this.config.authOptions.clientId); + requestParameters.addGrantType(GrantType.DEVICE_CODE_GRANT); + requestParameters.addDeviceCode(deviceCodeResponse.deviceCode); + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + requestParameters.addCorrelationId(correlationId); + requestParameters.addClientInfo(); + requestParameters.addLibraryInfo(this.config.libraryInfo); + requestParameters.addApplicationTelemetry(this.config.telemetry.application); + requestParameters.addThrottling(); + if (this.serverTelemetryManager) { + requestParameters.addServerTelemetry(this.serverTelemetryManager); + } + if (!StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + requestParameters.addClaims(request.claims, this.config.authOptions.clientCapabilities); + } + return requestParameters.createQueryString(); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class is to be used to acquire tokens for public client applications (desktop, mobile). Public client applications + * are not trusted to safely store application secrets, and therefore can only request tokens in the name of an user. + * @public + */ +class PublicClientApplication extends ClientApplication { + /** + * Important attributes in the Configuration object for auth are: + * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal. + * - authority: the authority URL for your application. + * + * AAD authorities are of the form https://login.microsoftonline.com/\{Enter_the_Tenant_Info_Here\}. + * - If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). + * - If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. + * - If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. + * - To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. + * + * Azure B2C authorities are of the form https://\{instance\}/\{tenant\}/\{policy\}. Each policy is considered + * its own authority. You will have to set the all of the knownAuthorities at the time of the client application + * construction. + * + * ADFS authorities are of the form https://\{instance\}/adfs. + */ + constructor(configuration) { + super(configuration); + if (this.config.broker.nativeBrokerPlugin) { + if (this.config.broker.nativeBrokerPlugin.isBrokerAvailable) { + this.nativeBrokerPlugin = this.config.broker.nativeBrokerPlugin; + this.nativeBrokerPlugin.setLogger(this.config.system.loggerOptions); + } + else { + this.logger.warning("NativeBroker implementation was provided but the broker is unavailable."); + } + } + this.skus = ServerTelemetryManager.makeExtraSkuString({ + libraryName: Constants.MSAL_SKU, + libraryVersion: version, + }); + } + /** + * Acquires a token from the authority using OAuth2.0 device code flow. + * This flow is designed for devices that do not have access to a browser or have input constraints. + * The authorization server issues a DeviceCode object with a verification code, an end-user code, + * and the end-user verification URI. The DeviceCode object is provided through a callback, and the end-user should be + * instructed to use another device to navigate to the verification URI to input credentials. + * Since the client cannot receive incoming requests, it polls the authorization server repeatedly + * until the end-user completes input of credentials. + */ + async acquireTokenByDeviceCode(request) { + this.logger.info("acquireTokenByDeviceCode called", request.correlationId); + const validRequest = Object.assign(request, await this.initializeBaseRequest(request)); + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByDeviceCode, validRequest.correlationId); + try { + const deviceCodeConfig = await this.buildOauthClientConfiguration(validRequest.authority, validRequest.correlationId, serverTelemetryManager, undefined, request.azureCloudOptions); + const deviceCodeClient = new DeviceCodeClient(deviceCodeConfig); + this.logger.verbose("Device code client created", validRequest.correlationId); + return await deviceCodeClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires a token interactively via the browser by requesting an authorization code then exchanging it for a token. + */ + async acquireTokenInteractive(request) { + const correlationId = request.correlationId || this.cryptoProvider.createNewGuid(); + this.logger.trace("acquireTokenInteractive called", correlationId); + const { openBrowser, successTemplate, errorTemplate, windowHandle, loopbackClient: customLoopbackClient, ...remainingProperties } = request; + if (this.nativeBrokerPlugin) { + const brokerRequest = { + ...remainingProperties, + clientId: this.config.auth.clientId, + scopes: request.scopes || OIDC_DEFAULT_SCOPES, + redirectUri: `${Constants.HTTP_PROTOCOL}${Constants.LOCALHOST}`, + authority: request.authority || this.config.auth.authority, + correlationId: correlationId, + extraParameters: { + ...remainingProperties.extraQueryParameters, + ...remainingProperties.tokenQueryParameters, + [X_CLIENT_EXTRA_SKU]: this.skus, + }, + accountId: remainingProperties.account?.nativeAccountId, + }; + return this.nativeBrokerPlugin.acquireTokenInteractive(brokerRequest, windowHandle); + } + const { verifier, challenge } = await this.cryptoProvider.generatePkceCodes(); + const loopbackClient = customLoopbackClient || new LoopbackClient(); + let authCodeResponse = {}; + let authCodeListenerError = null; + try { + const authCodeListener = loopbackClient + .listenForAuthCode(successTemplate, errorTemplate) + .then((response) => { + authCodeResponse = response; + }) + .catch((e) => { + // Store the promise instead of throwing so we can control when its thrown + authCodeListenerError = e; + }); + // Wait for server to be listening + const redirectUri = await this.waitForRedirectUri(loopbackClient); + const validRequest = { + ...remainingProperties, + correlationId: correlationId, + scopes: request.scopes || OIDC_DEFAULT_SCOPES, + redirectUri: redirectUri, + responseMode: ResponseMode.QUERY, + codeChallenge: challenge, + codeChallengeMethod: CodeChallengeMethodValues.S256, + }; + const authCodeUrl = await this.getAuthCodeUrl(validRequest); + await openBrowser(authCodeUrl); + await authCodeListener; + if (authCodeListenerError) { + throw authCodeListenerError; + } + if (authCodeResponse.error) { + throw new ServerError(authCodeResponse.error, authCodeResponse.error_description, authCodeResponse.suberror); + } + else if (!authCodeResponse.code) { + throw NodeAuthError.createNoAuthCodeInResponseError(); + } + const clientInfo = authCodeResponse.client_info; + const tokenRequest = { + code: authCodeResponse.code, + codeVerifier: verifier, + clientInfo: clientInfo || Constants$1.EMPTY_STRING, + ...validRequest, + }; + return await this.acquireTokenByCode(tokenRequest); // Await this so the server doesn't close prematurely + } + finally { + loopbackClient.closeServer(); + } + } + /** + * Returns a token retrieved either from the cache or by exchanging the refresh token for a fresh access token. If brokering is enabled the token request will be serviced by the broker. + * @param request + * @returns + */ + async acquireTokenSilent(request) { + const correlationId = request.correlationId || this.cryptoProvider.createNewGuid(); + this.logger.trace("acquireTokenSilent called", correlationId); + if (this.nativeBrokerPlugin) { + const brokerRequest = { + ...request, + clientId: this.config.auth.clientId, + scopes: request.scopes || OIDC_DEFAULT_SCOPES, + redirectUri: `${Constants.HTTP_PROTOCOL}${Constants.LOCALHOST}`, + authority: request.authority || this.config.auth.authority, + correlationId: correlationId, + extraParameters: { + ...request.tokenQueryParameters, + [X_CLIENT_EXTRA_SKU]: this.skus, + }, + accountId: request.account.nativeAccountId, + forceRefresh: request.forceRefresh || false, + }; + return this.nativeBrokerPlugin.acquireTokenSilent(brokerRequest); + } + return super.acquireTokenSilent(request); + } + /** + * Removes cache artifacts associated with the given account + * @param request + * @returns + */ + async signOut(request) { + if (this.nativeBrokerPlugin && request.account.nativeAccountId) { + const signoutRequest = { + clientId: this.config.auth.clientId, + accountId: request.account.nativeAccountId, + correlationId: request.correlationId || + this.cryptoProvider.createNewGuid(), + }; + await this.nativeBrokerPlugin.signOut(signoutRequest); + } + await this.getTokenCache().removeAccount(request.account); + } + /** + * Returns all cached accounts for this application. If brokering is enabled this request will be serviced by the broker. + * @returns + */ + async getAllAccounts() { + if (this.nativeBrokerPlugin) { + const correlationId = this.cryptoProvider.createNewGuid(); + return this.nativeBrokerPlugin.getAllAccounts(this.config.auth.clientId, correlationId); + } + return this.getTokenCache().getAllAccounts(); + } + /** + * Attempts to retrieve the redirectUri from the loopback server. If the loopback server does not start listening for requests within the timeout this will throw. + * @param loopbackClient + * @returns + */ + async waitForRedirectUri(loopbackClient) { + return new Promise((resolve, reject) => { + let ticks = 0; + const id = setInterval(() => { + if (LOOPBACK_SERVER_CONSTANTS.TIMEOUT_MS / + LOOPBACK_SERVER_CONSTANTS.INTERVAL_MS < + ticks) { + clearInterval(id); + reject(NodeAuthError.createLoopbackServerTimeoutError()); + return; + } + try { + const r = loopbackClient.getRedirectUri(); + clearInterval(id); + resolve(r); + return; + } + catch (e) { + if (e instanceof AuthError && + e.errorCode === + NodeAuthErrorMessage.noLoopbackServerExists.code) { + // Loopback server is not listening yet + ticks++; + return; + } + clearInterval(id); + reject(e); + return; + } + }, LOOPBACK_SERVER_CONSTANTS.INTERVAL_MS); + }); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * OAuth2.0 client credential grant + */ +class ClientCredentialClient extends BaseClient { + constructor(configuration, appTokenProvider) { + super(configuration); + this.appTokenProvider = appTokenProvider; + } + /** + * Public API to acquire a token with ClientCredential Flow for Confidential clients + * @param request + */ + async acquireToken(request) { + if (request.skipCache || request.claims) { + return this.executeTokenRequest(request, this.authority); + } + const [cachedAuthenticationResult, lastCacheOutcome] = await this.getCachedAuthenticationResult(request, this.config, this.cryptoUtils, this.authority, this.cacheManager, this.serverTelemetryManager); + if (cachedAuthenticationResult) { + // if the token is not expired but must be refreshed; get a new one in the background + if (lastCacheOutcome === CacheOutcome.PROACTIVELY_REFRESHED) { + this.logger.info("ClientCredentialClient:getCachedAuthenticationResult - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed."); + // refresh the access token in the background + const refreshAccessToken = true; + await this.executeTokenRequest(request, this.authority, refreshAccessToken); + } + // return the cached token + return cachedAuthenticationResult; + } + else { + return this.executeTokenRequest(request, this.authority); + } + } + /** + * looks up cache if the tokens are cached already + */ + async getCachedAuthenticationResult(request, config, cryptoUtils, authority, cacheManager, serverTelemetryManager) { + const clientConfiguration = config; + const managedIdentityConfiguration = config; + let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE; + // read the user-supplied cache into memory, if applicable + let cacheContext; + if (clientConfiguration.serializableCache && + clientConfiguration.persistencePlugin) { + cacheContext = new TokenCacheContext(clientConfiguration.serializableCache, false); + await clientConfiguration.persistencePlugin.beforeCacheAccess(cacheContext); + } + const cachedAccessToken = this.readAccessTokenFromCache(authority, managedIdentityConfiguration.managedIdentityId?.id || + clientConfiguration.authOptions.clientId, new ScopeSet(request.scopes || []), cacheManager); + if (clientConfiguration.serializableCache && + clientConfiguration.persistencePlugin && + cacheContext) { + await clientConfiguration.persistencePlugin.afterCacheAccess(cacheContext); + } + // must refresh due to non-existent access_token + if (!cachedAccessToken) { + serverTelemetryManager?.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN); + return [null, CacheOutcome.NO_CACHED_ACCESS_TOKEN]; + } + // must refresh due to the expires_in value + if (isTokenExpired(cachedAccessToken.expiresOn, clientConfiguration.systemOptions?.tokenRenewalOffsetSeconds || + DEFAULT_TOKEN_RENEWAL_OFFSET_SEC)) { + serverTelemetryManager?.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED); + return [null, CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED]; + } + // must refresh (in the background) due to the refresh_in value + if (cachedAccessToken.refreshOn && + isTokenExpired(cachedAccessToken.refreshOn.toString(), 0)) { + lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED; + serverTelemetryManager?.setCacheOutcome(CacheOutcome.PROACTIVELY_REFRESHED); + } + return [ + await ResponseHandler.generateAuthenticationResult(cryptoUtils, authority, { + account: null, + idToken: null, + accessToken: cachedAccessToken, + refreshToken: null, + appMetadata: null, + }, true, request), + lastCacheOutcome, + ]; + } + /** + * Reads access token from the cache + */ + readAccessTokenFromCache(authority, id, scopeSet, cacheManager) { + const accessTokenFilter = { + homeAccountId: Constants$1.EMPTY_STRING, + environment: authority.canonicalAuthorityUrlComponents.HostNameAndPort, + credentialType: CredentialType.ACCESS_TOKEN, + clientId: id, + realm: authority.tenant, + target: ScopeSet.createSearchScopes(scopeSet.asArray()), + }; + const accessTokens = cacheManager.getAccessTokensByFilter(accessTokenFilter); + if (accessTokens.length < 1) { + return null; + } + else if (accessTokens.length > 1) { + throw createClientAuthError(multipleMatchingTokens); + } + return accessTokens[0]; + } + /** + * Makes a network call to request the token from the service + * @param request + * @param authority + */ + async executeTokenRequest(request, authority, refreshAccessToken) { + let serverTokenResponse; + let reqTimestamp; + if (this.appTokenProvider) { + this.logger.info("Using appTokenProvider extensibility."); + const appTokenPropviderParameters = { + correlationId: request.correlationId, + tenantId: this.config.authOptions.authority.tenant, + scopes: request.scopes, + claims: request.claims, + }; + reqTimestamp = nowSeconds(); + const appTokenProviderResult = await this.appTokenProvider(appTokenPropviderParameters); + serverTokenResponse = { + access_token: appTokenProviderResult.accessToken, + expires_in: appTokenProviderResult.expiresInSeconds, + refresh_in: appTokenProviderResult.refreshInSeconds, + token_type: AuthenticationScheme.BEARER, + }; + } + else { + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await this.createTokenRequestBody(request); + const headers = this.createTokenRequestHeaders(); + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: request.authority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + this.logger.info("Sending token request to endpoint: " + authority.tokenEndpoint); + reqTimestamp = nowSeconds(); + const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); + serverTokenResponse = response.body; + serverTokenResponse.status = response.status; + } + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin); + responseHandler.validateTokenResponse(serverTokenResponse, refreshAccessToken); + const tokenResponse = await responseHandler.handleServerTokenResponse(serverTokenResponse, this.authority, reqTimestamp, request); + return tokenResponse; + } + /** + * generate the request to the server in the acceptable format + * @param request + */ + async createTokenRequestBody(request) { + const parameterBuilder = new RequestParameterBuilder(); + parameterBuilder.addClientId(this.config.authOptions.clientId); + parameterBuilder.addScopes(request.scopes, false); + parameterBuilder.addGrantType(GrantType.CLIENT_CREDENTIALS_GRANT); + parameterBuilder.addLibraryInfo(this.config.libraryInfo); + parameterBuilder.addApplicationTelemetry(this.config.telemetry.application); + parameterBuilder.addThrottling(); + if (this.serverTelemetryManager) { + parameterBuilder.addServerTelemetry(this.serverTelemetryManager); + } + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + parameterBuilder.addCorrelationId(correlationId); + if (this.config.clientCredentials.clientSecret) { + parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret); + } + // Use clientAssertion from request, fallback to client assertion in base configuration + const clientAssertion = request.clientAssertion || + this.config.clientCredentials.clientAssertion; + if (clientAssertion) { + parameterBuilder.addClientAssertion(await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + parameterBuilder.addClientAssertionType(clientAssertion.assertionType); + } + if (!StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities); + } + return parameterBuilder.createQueryString(); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * On-Behalf-Of client + */ +class OnBehalfOfClient extends BaseClient { + constructor(configuration) { + super(configuration); + } + /** + * Public API to acquire tokens with on behalf of flow + * @param request + */ + async acquireToken(request) { + this.scopeSet = new ScopeSet(request.scopes || []); + // generate the user_assertion_hash for OBOAssertion + this.userAssertionHash = await this.cryptoUtils.hashString(request.oboAssertion); + if (request.skipCache || request.claims) { + return this.executeTokenRequest(request, this.authority, this.userAssertionHash); + } + try { + return await this.getCachedAuthenticationResult(request); + } + catch (e) { + // Any failure falls back to interactive request, once we implement distributed cache, we plan to handle `createRefreshRequiredError` to refresh using the RT + return await this.executeTokenRequest(request, this.authority, this.userAssertionHash); + } + } + /** + * look up cache for tokens + * Find idtoken in the cache + * Find accessToken based on user assertion and account info in the cache + * Please note we are not yet supported OBO tokens refreshed with long lived RT. User will have to send a new assertion if the current access token expires + * This is to prevent security issues when the assertion changes over time, however, longlived RT helps retaining the session + * @param request + */ + async getCachedAuthenticationResult(request) { + // look in the cache for the access_token which matches the incoming_assertion + const cachedAccessToken = this.readAccessTokenFromCacheForOBO(this.config.authOptions.clientId, request); + if (!cachedAccessToken) { + // Must refresh due to non-existent access_token. + this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN); + this.logger.info("SilentFlowClient:acquireCachedToken - No access token found in cache for the given properties."); + throw createClientAuthError(tokenRefreshRequired); + } + else if (isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) { + // Access token expired, will need to renewed + this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED); + this.logger.info(`OnbehalfofFlow:getCachedAuthenticationResult - Cached access token is expired or will expire within ${this.config.systemOptions.tokenRenewalOffsetSeconds} seconds.`); + throw createClientAuthError(tokenRefreshRequired); + } + // fetch the idToken from cache + const cachedIdToken = this.readIdTokenFromCacheForOBO(cachedAccessToken.homeAccountId); + let idTokenClaims; + let cachedAccount = null; + if (cachedIdToken) { + idTokenClaims = extractTokenClaims(cachedIdToken.secret, EncodingUtils.base64Decode); + const localAccountId = idTokenClaims.oid || idTokenClaims.sub; + const accountInfo = { + homeAccountId: cachedIdToken.homeAccountId, + environment: cachedIdToken.environment, + tenantId: cachedIdToken.realm, + username: Constants$1.EMPTY_STRING, + localAccountId: localAccountId || Constants$1.EMPTY_STRING, + }; + cachedAccount = this.cacheManager.readAccountFromCache(accountInfo); + } + // increment telemetry cache hit counter + if (this.config.serverTelemetryManager) { + this.config.serverTelemetryManager.incrementCacheHits(); + } + return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, { + account: cachedAccount, + accessToken: cachedAccessToken, + idToken: cachedIdToken, + refreshToken: null, + appMetadata: null, + }, true, request, idTokenClaims); + } + /** + * read idtoken from cache, this is a specific implementation for OBO as the requirements differ from a generic lookup in the cacheManager + * Certain use cases of OBO flow do not expect an idToken in the cache/or from the service + * @param atHomeAccountId {string} + */ + readIdTokenFromCacheForOBO(atHomeAccountId) { + const idTokenFilter = { + homeAccountId: atHomeAccountId, + environment: this.authority.canonicalAuthorityUrlComponents.HostNameAndPort, + credentialType: CredentialType.ID_TOKEN, + clientId: this.config.authOptions.clientId, + realm: this.authority.tenant, + }; + const idTokenMap = this.cacheManager.getIdTokensByFilter(idTokenFilter); + // When acquiring a token on behalf of an application, there might not be an id token in the cache + if (Object.values(idTokenMap).length < 1) { + return null; + } + return Object.values(idTokenMap)[0]; + } + /** + * Fetches the cached access token based on incoming assertion + * @param clientId + * @param request + * @param userAssertionHash + */ + readAccessTokenFromCacheForOBO(clientId, request) { + const authScheme = request.authenticationScheme || AuthenticationScheme.BEARER; + /* + * Distinguish between Bearer and PoP/SSH token cache types + * Cast to lowercase to handle "bearer" from ADFS + */ + const credentialType = authScheme && + authScheme.toLowerCase() !== + AuthenticationScheme.BEARER.toLowerCase() + ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME + : CredentialType.ACCESS_TOKEN; + const accessTokenFilter = { + credentialType: credentialType, + clientId, + target: ScopeSet.createSearchScopes(this.scopeSet.asArray()), + tokenType: authScheme, + keyId: request.sshKid, + requestedClaimsHash: request.requestedClaimsHash, + userAssertionHash: this.userAssertionHash, + }; + const accessTokens = this.cacheManager.getAccessTokensByFilter(accessTokenFilter); + const numAccessTokens = accessTokens.length; + if (numAccessTokens < 1) { + return null; + } + else if (numAccessTokens > 1) { + throw createClientAuthError(multipleMatchingTokens); + } + return accessTokens[0]; + } + /** + * Make a network call to the server requesting credentials + * @param request + * @param authority + */ + async executeTokenRequest(request, authority, userAssertionHash) { + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await this.createTokenRequestBody(request); + const headers = this.createTokenRequestHeaders(); + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: request.authority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + const reqTimestamp = nowSeconds(); + const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin); + responseHandler.validateTokenResponse(response.body); + const tokenResponse = await responseHandler.handleServerTokenResponse(response.body, this.authority, reqTimestamp, request, undefined, userAssertionHash); + return tokenResponse; + } + /** + * generate a server request in accepable format + * @param request + */ + async createTokenRequestBody(request) { + const parameterBuilder = new RequestParameterBuilder(); + parameterBuilder.addClientId(this.config.authOptions.clientId); + parameterBuilder.addScopes(request.scopes); + parameterBuilder.addGrantType(GrantType.JWT_BEARER); + parameterBuilder.addClientInfo(); + parameterBuilder.addLibraryInfo(this.config.libraryInfo); + parameterBuilder.addApplicationTelemetry(this.config.telemetry.application); + parameterBuilder.addThrottling(); + if (this.serverTelemetryManager) { + parameterBuilder.addServerTelemetry(this.serverTelemetryManager); + } + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + parameterBuilder.addCorrelationId(correlationId); + parameterBuilder.addRequestTokenUse(ON_BEHALF_OF); + parameterBuilder.addOboAssertion(request.oboAssertion); + if (this.config.clientCredentials.clientSecret) { + parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret); + } + const clientAssertion = this.config.clientCredentials.clientAssertion; + if (clientAssertion) { + parameterBuilder.addClientAssertion(await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + parameterBuilder.addClientAssertionType(clientAssertion.assertionType); + } + if (request.claims || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities); + } + return parameterBuilder.createQueryString(); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// AADAuthorityConstants +/** + * This class is to be used to acquire tokens for confidential client applications (webApp, webAPI). Confidential client applications + * will configure application secrets, client certificates/assertions as applicable + * @public + */ +class ConfidentialClientApplication extends ClientApplication { + /** + * Constructor for the ConfidentialClientApplication + * + * Required attributes in the Configuration object are: + * - clientID: the application ID of your application. You can obtain one by registering your application with our application registration portal + * - authority: the authority URL for your application. + * - client credential: Must set either client secret, certificate, or assertion for confidential clients. You can obtain a client secret from the application registration portal. + * + * In Azure AD, authority is a URL indicating of the form https://login.microsoftonline.com/\{Enter_the_Tenant_Info_Here\}. + * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). + * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. + * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. + * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. + * + * In Azure B2C, authority is of the form https://\{instance\}/tfp/\{tenant\}/\{policyName\}/ + * Full B2C functionality will be available in this library in future versions. + * + * @param Configuration - configuration object for the MSAL ConfidentialClientApplication instance + */ + constructor(configuration) { + super(configuration); + this.setClientCredential(); + this.appTokenProvider = undefined; + } + /** + * This extensibility point only works for the client_credential flow, i.e. acquireTokenByClientCredential and + * is meant for Azure SDK to enhance Managed Identity support. + * + * @param IAppTokenProvider - Extensibility interface, which allows the app developer to return a token from a custom source. + */ + SetAppTokenProvider(provider) { + this.appTokenProvider = provider; + } + /** + * Acquires tokens from the authority for the application (not for an end user). + */ + async acquireTokenByClientCredential(request) { + this.logger.info("acquireTokenByClientCredential called", request.correlationId); + // If there is a client assertion present in the request, it overrides the one present in the client configuration + let clientAssertion; + if (request.clientAssertion) { + clientAssertion = { + assertion: await getClientAssertion(request.clientAssertion, this.config.auth.clientId + // tokenEndpoint will be undefined. resourceRequestUri is omitted in ClientCredentialRequest + ), + assertionType: Constants.JWT_BEARER_ASSERTION_TYPE, + }; + } + const baseRequest = await this.initializeBaseRequest(request); + // valid base request should not contain oidc scopes in this grant type + const validBaseRequest = { + ...baseRequest, + scopes: baseRequest.scopes.filter((scope) => !OIDC_DEFAULT_SCOPES.includes(scope)), + }; + const validRequest = { + ...request, + ...validBaseRequest, + clientAssertion, + }; + /* + * valid request should not have "common" or "organizations" in lieu of the tenant_id in the authority in the auth configuration + * example authority: "https://login.microsoftonline.com/TenantId", + */ + const authority = new UrlString(validRequest.authority); + const tenantId = authority.getUrlComponents().PathSegments[0]; + if (Object.values(AADAuthorityConstants).includes(tenantId)) { + throw createClientAuthError(missingTenantIdError); + } + const azureRegionConfiguration = { + azureRegion: validRequest.azureRegion, + environmentRegion: process.env[REGION_ENVIRONMENT_VARIABLE], + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByClientCredential, validRequest.correlationId, validRequest.skipCache); + try { + const clientCredentialConfig = await this.buildOauthClientConfiguration(validRequest.authority, validRequest.correlationId, serverTelemetryManager, azureRegionConfiguration, request.azureCloudOptions); + const clientCredentialClient = new ClientCredentialClient(clientCredentialConfig, this.appTokenProvider); + this.logger.verbose("Client credential client created", validRequest.correlationId); + return await clientCredentialClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires tokens from the authority for the application. + * + * Used in scenarios where the current app is a middle-tier service which was called with a token + * representing an end user. The current app can use the token (oboAssertion) to request another + * token to access downstream web API, on behalf of that user. + * + * The current middle-tier app has no user interaction to obtain consent. + * See how to gain consent upfront for your middle-tier app from this article. + * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#gaining-consent-for-the-middle-tier-application + */ + async acquireTokenOnBehalfOf(request) { + this.logger.info("acquireTokenOnBehalfOf called", request.correlationId); + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + }; + try { + const onBehalfOfConfig = await this.buildOauthClientConfiguration(validRequest.authority, validRequest.correlationId, undefined, undefined, request.azureCloudOptions); + const oboClient = new OnBehalfOfClient(onBehalfOfConfig); + this.logger.verbose("On behalf of client created", validRequest.correlationId); + return await oboClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + throw e; + } + } + setClientCredential() { + const clientSecretNotEmpty = !!this.config.auth.clientSecret; + const clientAssertionNotEmpty = !!this.config.auth.clientAssertion; + const certificateNotEmpty = (!!this.config.auth.clientCertificate?.thumbprint || + !!this.config.auth.clientCertificate?.thumbprintSha256) && + !!this.config.auth.clientCertificate?.privateKey; + /* + * If app developer configures this callback, they don't need a credential + * i.e. AzureSDK can get token from Managed Identity without a cert / secret + */ + if (this.appTokenProvider) { + return; + } + // Check that at most one credential is set on the application + if ((clientSecretNotEmpty && clientAssertionNotEmpty) || + (clientAssertionNotEmpty && certificateNotEmpty) || + (clientSecretNotEmpty && certificateNotEmpty)) { + throw createClientAuthError(invalidClientCredential); + } + if (this.config.auth.clientSecret) { + this.clientSecret = this.config.auth.clientSecret; + return; + } + if (this.config.auth.clientAssertion) { + this.developerProvidedClientAssertion = + this.config.auth.clientAssertion; + return; + } + if (!certificateNotEmpty) { + throw createClientAuthError(invalidClientCredential); + } + else { + this.clientAssertion = !!this.config.auth.clientCertificate + .thumbprintSha256 + ? ClientAssertion.fromCertificateWithSha256Thumbprint(this.config.auth.clientCertificate.thumbprintSha256, this.config.auth.clientCertificate.privateKey, this.config.auth.clientCertificate.x5c) + : ClientAssertion.fromCertificate( + // guaranteed to be a string, due to prior error checking in this function + this.config.auth.clientCertificate.thumbprint, this.config.auth.clientCertificate.privateKey, this.config.auth.clientCertificate.x5c); + } + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Managed Identity User Assigned Id Query Parameter Names + */ +const ManagedIdentityUserAssignedIdQueryParameterNames = { + MANAGED_IDENTITY_CLIENT_ID: "client_id", + MANAGED_IDENTITY_OBJECT_ID: "object_id", + MANAGED_IDENTITY_RESOURCE_ID: "mi_res_id", +}; +class BaseManagedIdentitySource { + constructor(logger, nodeStorage, networkClient, cryptoProvider) { + this.logger = logger; + this.nodeStorage = nodeStorage; + this.networkClient = networkClient; + this.cryptoProvider = cryptoProvider; + } + async getServerTokenResponseAsync(response, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _networkClient, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _networkRequest, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _networkRequestOptions) { + return this.getServerTokenResponse(response); + } + getServerTokenResponse(response) { + let refreshIn, expiresIn; + if (response.body.expires_on) { + expiresIn = response.body.expires_on - nowSeconds(); + // compute refresh_in as 1/2 of expires_in, but only if expires_in > 2h + if (expiresIn > 2 * 3600) { + refreshIn = expiresIn / 2; + } + } + const serverTokenResponse = { + status: response.status, + // success + access_token: response.body.access_token, + expires_in: expiresIn, + scope: response.body.resource, + token_type: response.body.token_type, + refresh_in: refreshIn, + // error + correlation_id: response.body.correlation_id || response.body.correlationId, + error: typeof response.body.error === "string" + ? response.body.error + : response.body.error?.code, + error_description: response.body.message || + (typeof response.body.error === "string" + ? response.body.error_description + : response.body.error?.message), + error_codes: response.body.error_codes, + timestamp: response.body.timestamp, + trace_id: response.body.trace_id, + }; + return serverTokenResponse; + } + async acquireTokenWithManagedIdentity(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken) { + const networkRequest = this.createRequest(managedIdentityRequest.resource, managedIdentityId); + const headers = networkRequest.headers; + headers[HeaderNames.CONTENT_TYPE] = Constants$1.URL_FORM_CONTENT_TYPE; + const networkRequestOptions = { headers }; + if (Object.keys(networkRequest.bodyParameters).length) { + networkRequestOptions.body = + networkRequest.computeParametersBodyString(); + } + const reqTimestamp = nowSeconds(); + let response; + try { + // Sources that send POST requests: Cloud Shell + if (networkRequest.httpMethod === HttpMethod.POST) { + response = + await this.networkClient.sendPostRequestAsync(networkRequest.computeUri(), networkRequestOptions); + // Sources that send GET requests: App Service, Azure Arc, IMDS, Service Fabric + } + else { + response = + await this.networkClient.sendGetRequestAsync(networkRequest.computeUri(), networkRequestOptions); + } + } + catch (error) { + if (error instanceof AuthError) { + throw error; + } + else { + throw createClientAuthError(networkError); + } + } + const responseHandler = new ResponseHandler(managedIdentityId.id, this.nodeStorage, this.cryptoProvider, this.logger, null, null); + const serverTokenResponse = await this.getServerTokenResponseAsync(response, this.networkClient, networkRequest, networkRequestOptions); + responseHandler.validateTokenResponse(serverTokenResponse, refreshAccessToken); + // caches the token + return responseHandler.handleServerTokenResponse(serverTokenResponse, fakeAuthority, reqTimestamp, managedIdentityRequest); + } + getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityIdType) { + switch (managedIdentityIdType) { + case ManagedIdentityIdType.USER_ASSIGNED_CLIENT_ID: + this.logger.info("[Managed Identity] Adding user assigned client id to the request."); + return ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_CLIENT_ID; + case ManagedIdentityIdType.USER_ASSIGNED_RESOURCE_ID: + this.logger.info("[Managed Identity] Adding user assigned resource id to the request."); + return ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_RESOURCE_ID; + case ManagedIdentityIdType.USER_ASSIGNED_OBJECT_ID: + this.logger.info("[Managed Identity] Adding user assigned object id to the request."); + return ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_OBJECT_ID; + default: + throw createManagedIdentityError(invalidManagedIdentityIdType); + } + } +} +BaseManagedIdentitySource.getValidatedEnvVariableUrlString = (envVariableStringName, envVariable, sourceName, logger) => { + try { + return new UrlString(envVariable).urlString; + } + catch (error) { + logger.info(`[Managed Identity] ${sourceName} managed identity is unavailable because the '${envVariableStringName}' environment variable is malformed.`); + throw createManagedIdentityError(MsiEnvironmentVariableUrlMalformedErrorCodes[envVariableStringName]); + } +}; + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class ManagedIdentityRequestParameters { + constructor(httpMethod, endpoint) { + this.httpMethod = httpMethod; + this._baseEndpoint = endpoint; + this.headers = {}; + this.bodyParameters = {}; + this.queryParameters = {}; + } + computeUri() { + const parameterBuilder = new RequestParameterBuilder(); + if (this.queryParameters) { + parameterBuilder.addExtraQueryParameters(this.queryParameters); + } + const queryParametersString = parameterBuilder.createQueryString(); + return UrlString.appendQueryString(this._baseEndpoint, queryParametersString); + } + computeParametersBodyString() { + const parameterBuilder = new RequestParameterBuilder(); + if (this.bodyParameters) { + parameterBuilder.addExtraQueryParameters(this.bodyParameters); + } + return parameterBuilder.createQueryString(); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity +const APP_SERVICE_MSI_API_VERSION = "2019-08-01"; +/** + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/AppServiceManagedIdentitySource.cs + */ +class AppService extends BaseManagedIdentitySource { + constructor(logger, nodeStorage, networkClient, cryptoProvider, identityEndpoint, identityHeader) { + super(logger, nodeStorage, networkClient, cryptoProvider); + this.identityEndpoint = identityEndpoint; + this.identityHeader = identityHeader; + } + static getEnvironmentVariables() { + const identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; + const identityHeader = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER]; + return [identityEndpoint, identityHeader]; + } + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider) { + const [identityEndpoint, identityHeader] = AppService.getEnvironmentVariables(); + // if either of the identity endpoint or identity header variables are undefined, this MSI provider is unavailable. + if (!identityEndpoint || !identityHeader) { + logger.info(`[Managed Identity] ${ManagedIdentitySourceNames.APP_SERVICE} managed identity is unavailable because one or both of the '${ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER}' and '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' environment variables are not defined.`); + return null; + } + const validatedIdentityEndpoint = AppService.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, ManagedIdentitySourceNames.APP_SERVICE, logger); + logger.info(`[Managed Identity] Environment variables validation passed for ${ManagedIdentitySourceNames.APP_SERVICE} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${ManagedIdentitySourceNames.APP_SERVICE} managed identity.`); + return new AppService(logger, nodeStorage, networkClient, cryptoProvider, identityEndpoint, identityHeader); + } + createRequest(resource, managedIdentityId) { + const request = new ManagedIdentityRequestParameters(HttpMethod.GET, this.identityEndpoint); + request.headers[APP_SERVICE_SECRET_HEADER_NAME] = this.identityHeader; + request.queryParameters[API_VERSION_QUERY_PARAMETER_NAME] = + APP_SERVICE_MSI_API_VERSION; + request.queryParameters[RESOURCE_BODY_OR_QUERY_PARAMETER_NAME] = + resource; + if (managedIdentityId.idType !== ManagedIdentityIdType.SYSTEM_ASSIGNED) { + request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType)] = managedIdentityId.id; + } + // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity + return request; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const ARC_API_VERSION = "2019-11-01"; +const DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT = "http://127.0.0.1:40342/metadata/identity/oauth2/token"; +const HIMDS_EXECUTABLE_HELPER_STRING = "N/A: himds executable exists"; +const SUPPORTED_AZURE_ARC_PLATFORMS = { + win32: `${process.env["ProgramData"]}\\AzureConnectedMachineAgent\\Tokens\\`, + linux: "/var/opt/azcmagent/tokens/", +}; +const AZURE_ARC_FILE_DETECTION = { + win32: `${process.env["ProgramFiles"]}\\AzureConnectedMachineAgent\\himds.exe`, + linux: "/opt/azcmagent/bin/himds", +}; +/** + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/AzureArcManagedIdentitySource.cs + */ +class AzureArc extends BaseManagedIdentitySource { + constructor(logger, nodeStorage, networkClient, cryptoProvider, identityEndpoint) { + super(logger, nodeStorage, networkClient, cryptoProvider); + this.identityEndpoint = identityEndpoint; + } + static getEnvironmentVariables() { + let identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; + let imdsEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT]; + // if either of the identity or imds endpoints are undefined, check if the himds executable exists + if (!identityEndpoint || !imdsEndpoint) { + // get the expected Windows or Linux file path of the himds executable + const fileDetectionPath = AZURE_ARC_FILE_DETECTION[process.platform]; + try { + /* + * check if the himds executable exists and its permissions allow it to be read + * returns undefined if true, throws an error otherwise + */ + fs.accessSync(fileDetectionPath, fs.constants.F_OK | fs.constants.R_OK); + identityEndpoint = DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT; + imdsEndpoint = HIMDS_EXECUTABLE_HELPER_STRING; + } + catch (err) { + /* + * do nothing + * accessSync returns undefined on success, and throws an error on failure + */ + } + } + return [identityEndpoint, imdsEndpoint]; + } + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, managedIdentityId) { + const [identityEndpoint, imdsEndpoint] = AzureArc.getEnvironmentVariables(); + // if either of the identity or imds endpoints are undefined (even after himds file detection) + if (!identityEndpoint || !imdsEndpoint) { + logger.info(`[Managed Identity] ${ManagedIdentitySourceNames.AZURE_ARC} managed identity is unavailable through environment variables because one or both of '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' and '${ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT}' are not defined. ${ManagedIdentitySourceNames.AZURE_ARC} managed identity is also unavailable through file detection.`); + return null; + } + // check if the imds endpoint is set to the default for file detection + if (imdsEndpoint === HIMDS_EXECUTABLE_HELPER_STRING) { + logger.info(`[Managed Identity] ${ManagedIdentitySourceNames.AZURE_ARC} managed identity is available through file detection. Defaulting to known ${ManagedIdentitySourceNames.AZURE_ARC} endpoint: ${DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT}. Creating ${ManagedIdentitySourceNames.AZURE_ARC} managed identity.`); + } + else { + // otherwise, both the identity and imds endpoints are defined without file detection; validate them + const validatedIdentityEndpoint = AzureArc.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, ManagedIdentitySourceNames.AZURE_ARC, logger); + // remove trailing slash + validatedIdentityEndpoint.endsWith("/") + ? validatedIdentityEndpoint.slice(0, -1) + : validatedIdentityEndpoint; + AzureArc.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT, imdsEndpoint, ManagedIdentitySourceNames.AZURE_ARC, logger); + logger.info(`[Managed Identity] Environment variables validation passed for ${ManagedIdentitySourceNames.AZURE_ARC} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${ManagedIdentitySourceNames.AZURE_ARC} managed identity.`); + } + if (managedIdentityId.idType !== ManagedIdentityIdType.SYSTEM_ASSIGNED) { + throw createManagedIdentityError(unableToCreateAzureArc); + } + return new AzureArc(logger, nodeStorage, networkClient, cryptoProvider, identityEndpoint); + } + createRequest(resource) { + const request = new ManagedIdentityRequestParameters(HttpMethod.GET, this.identityEndpoint.replace("localhost", "127.0.0.1")); + request.headers[METADATA_HEADER_NAME] = "true"; + request.queryParameters[API_VERSION_QUERY_PARAMETER_NAME] = + ARC_API_VERSION; + request.queryParameters[RESOURCE_BODY_OR_QUERY_PARAMETER_NAME] = + resource; + // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity + return request; + } + async getServerTokenResponseAsync(originalResponse, networkClient, networkRequest, networkRequestOptions) { + let retryResponse; + if (originalResponse.status === HttpStatus.UNAUTHORIZED) { + const wwwAuthHeader = originalResponse.headers["www-authenticate"]; + if (!wwwAuthHeader) { + throw createManagedIdentityError(wwwAuthenticateHeaderMissing); + } + if (!wwwAuthHeader.includes("Basic realm=")) { + throw createManagedIdentityError(wwwAuthenticateHeaderUnsupportedFormat); + } + const secretFilePath = wwwAuthHeader.split("Basic realm=")[1]; + // throw an error if the managed identity application is not being run on Windows or Linux + if (!SUPPORTED_AZURE_ARC_PLATFORMS.hasOwnProperty(process.platform)) { + throw createManagedIdentityError(platformNotSupported); + } + // get the expected Windows or Linux file path + const expectedSecretFilePath = SUPPORTED_AZURE_ARC_PLATFORMS[process.platform]; + // throw an error if the file in the file path is not a .key file + const fileName = path.basename(secretFilePath); + if (!fileName.endsWith(".key")) { + throw createManagedIdentityError(invalidFileExtension); + } + /* + * throw an error if the file path from the www-authenticate header does not match the + * expected file path for the platform (Windows or Linux) the managed identity application + * is running on + */ + if (expectedSecretFilePath + fileName !== secretFilePath) { + throw createManagedIdentityError(invalidFilePath); + } + let secretFileSize; + // attempt to get the secret file's size, in bytes + try { + secretFileSize = await fs.statSync(secretFilePath).size; + } + catch (e) { + throw createManagedIdentityError(unableToReadSecretFile); + } + // throw an error if the secret file's size is greater than 4096 bytes + if (secretFileSize > AZURE_ARC_SECRET_FILE_MAX_SIZE_BYTES) { + throw createManagedIdentityError(invalidSecret); + } + // attempt to read the contents of the secret file + let secret; + try { + secret = fs.readFileSync(secretFilePath, "utf-8"); + } + catch (e) { + throw createManagedIdentityError(unableToReadSecretFile); + } + const authHeaderValue = `Basic ${secret}`; + this.logger.info(`[Managed Identity] Adding authorization header to the request.`); + networkRequest.headers[AUTHORIZATION_HEADER_NAME] = authHeaderValue; + try { + retryResponse = + await networkClient.sendGetRequestAsync(networkRequest.computeUri(), networkRequestOptions); + } + catch (error) { + if (error instanceof AuthError) { + throw error; + } + else { + throw createClientAuthError(networkError); + } + } + } + return this.getServerTokenResponse(retryResponse || originalResponse); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/CloudShellManagedIdentitySource.cs + */ +class CloudShell extends BaseManagedIdentitySource { + constructor(logger, nodeStorage, networkClient, cryptoProvider, msiEndpoint) { + super(logger, nodeStorage, networkClient, cryptoProvider); + this.msiEndpoint = msiEndpoint; + } + static getEnvironmentVariables() { + const msiEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT]; + return [msiEndpoint]; + } + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, managedIdentityId) { + const [msiEndpoint] = CloudShell.getEnvironmentVariables(); + // if the msi endpoint environment variable is undefined, this MSI provider is unavailable. + if (!msiEndpoint) { + logger.info(`[Managed Identity] ${ManagedIdentitySourceNames.CLOUD_SHELL} managed identity is unavailable because the '${ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT} environment variable is not defined.`); + return null; + } + const validatedMsiEndpoint = CloudShell.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT, msiEndpoint, ManagedIdentitySourceNames.CLOUD_SHELL, logger); + logger.info(`[Managed Identity] Environment variable validation passed for ${ManagedIdentitySourceNames.CLOUD_SHELL} managed identity. Endpoint URI: ${validatedMsiEndpoint}. Creating ${ManagedIdentitySourceNames.CLOUD_SHELL} managed identity.`); + if (managedIdentityId.idType !== ManagedIdentityIdType.SYSTEM_ASSIGNED) { + throw createManagedIdentityError(unableToCreateCloudShell); + } + return new CloudShell(logger, nodeStorage, networkClient, cryptoProvider, msiEndpoint); + } + createRequest(resource) { + const request = new ManagedIdentityRequestParameters(HttpMethod.POST, this.msiEndpoint); + request.headers[METADATA_HEADER_NAME] = "true"; + request.bodyParameters[RESOURCE_BODY_OR_QUERY_PARAMETER_NAME] = + resource; + return request; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// IMDS constants. Docs for IMDS are available here https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http +const IMDS_TOKEN_PATH = "/metadata/identity/oauth2/token"; +const DEFAULT_IMDS_ENDPOINT = `http://169.254.169.254${IMDS_TOKEN_PATH}`; +const IMDS_API_VERSION = "2018-02-01"; +// Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ImdsManagedIdentitySource.cs +class Imds extends BaseManagedIdentitySource { + constructor(logger, nodeStorage, networkClient, cryptoProvider, identityEndpoint) { + super(logger, nodeStorage, networkClient, cryptoProvider); + this.identityEndpoint = identityEndpoint; + } + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider) { + let validatedIdentityEndpoint; + if (process.env[ManagedIdentityEnvironmentVariableNames + .AZURE_POD_IDENTITY_AUTHORITY_HOST]) { + logger.info(`[Managed Identity] Environment variable ${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST} for ${ManagedIdentitySourceNames.IMDS} returned endpoint: ${process.env[ManagedIdentityEnvironmentVariableNames + .AZURE_POD_IDENTITY_AUTHORITY_HOST]}`); + validatedIdentityEndpoint = Imds.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST, `${process.env[ManagedIdentityEnvironmentVariableNames + .AZURE_POD_IDENTITY_AUTHORITY_HOST]}${IMDS_TOKEN_PATH}`, ManagedIdentitySourceNames.IMDS, logger); + } + else { + logger.info(`[Managed Identity] Unable to find ${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST} environment variable for ${ManagedIdentitySourceNames.IMDS}, using the default endpoint.`); + validatedIdentityEndpoint = DEFAULT_IMDS_ENDPOINT; + } + return new Imds(logger, nodeStorage, networkClient, cryptoProvider, validatedIdentityEndpoint); + } + createRequest(resource, managedIdentityId) { + const request = new ManagedIdentityRequestParameters(HttpMethod.GET, this.identityEndpoint); + request.headers[METADATA_HEADER_NAME] = "true"; + request.queryParameters[API_VERSION_QUERY_PARAMETER_NAME] = + IMDS_API_VERSION; + request.queryParameters[RESOURCE_BODY_OR_QUERY_PARAMETER_NAME] = + resource; + if (managedIdentityId.idType !== ManagedIdentityIdType.SYSTEM_ASSIGNED) { + request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType)] = managedIdentityId.id; + } + // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity + return request; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity +const SERVICE_FABRIC_MSI_API_VERSION = "2019-07-01-preview"; +/** + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ServiceFabricManagedIdentitySource.cs + */ +class ServiceFabric extends BaseManagedIdentitySource { + constructor(logger, nodeStorage, networkClient, cryptoProvider, identityEndpoint, identityHeader) { + super(logger, nodeStorage, networkClient, cryptoProvider); + this.identityEndpoint = identityEndpoint; + this.identityHeader = identityHeader; + } + static getEnvironmentVariables() { + const identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; + const identityHeader = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER]; + const identityServerThumbprint = process.env[ManagedIdentityEnvironmentVariableNames + .IDENTITY_SERVER_THUMBPRINT]; + return [identityEndpoint, identityHeader, identityServerThumbprint]; + } + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, managedIdentityId) { + const [identityEndpoint, identityHeader, identityServerThumbprint] = ServiceFabric.getEnvironmentVariables(); + /* + * if either of the identity endpoint, identity header, or identity server thumbprint + * environment variables are undefined, this MSI provider is unavailable. + */ + if (!identityEndpoint || !identityHeader || !identityServerThumbprint) { + logger.info(`[Managed Identity] ${ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity is unavailable because one or all of the '${ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER}', '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' or '${ManagedIdentityEnvironmentVariableNames.IDENTITY_SERVER_THUMBPRINT}' environment variables are not defined.`); + return null; + } + const validatedIdentityEndpoint = ServiceFabric.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, ManagedIdentitySourceNames.SERVICE_FABRIC, logger); + logger.info(`[Managed Identity] Environment variables validation passed for ${ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity.`); + if (managedIdentityId.idType !== ManagedIdentityIdType.SYSTEM_ASSIGNED) { + logger.warning(`[Managed Identity] ${ManagedIdentitySourceNames.SERVICE_FABRIC} user assigned managed identity is configured in the cluster, not during runtime. See also: https://learn.microsoft.com/en-us/azure/service-fabric/configure-existing-cluster-enable-managed-identity-token-service.`); + } + return new ServiceFabric(logger, nodeStorage, networkClient, cryptoProvider, identityEndpoint, identityHeader); + } + createRequest(resource, managedIdentityId) { + const request = new ManagedIdentityRequestParameters(HttpMethod.GET, this.identityEndpoint); + request.headers[SERVICE_FABRIC_SECRET_HEADER_NAME] = + this.identityHeader; + request.queryParameters[API_VERSION_QUERY_PARAMETER_NAME] = + SERVICE_FABRIC_MSI_API_VERSION; + request.queryParameters[RESOURCE_BODY_OR_QUERY_PARAMETER_NAME] = + resource; + if (managedIdentityId.idType !== ManagedIdentityIdType.SYSTEM_ASSIGNED) { + request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType)] = managedIdentityId.id; + } + // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity + return request; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/* + * Class to initialize a managed identity and identify the service. + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ManagedIdentityClient.cs + */ +class ManagedIdentityClient { + constructor(logger, nodeStorage, networkClient, cryptoProvider) { + this.logger = logger; + this.nodeStorage = nodeStorage; + this.networkClient = networkClient; + this.cryptoProvider = cryptoProvider; + } + async sendManagedIdentityTokenRequest(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken) { + if (!ManagedIdentityClient.identitySource) { + ManagedIdentityClient.identitySource = + this.selectManagedIdentitySource(this.logger, this.nodeStorage, this.networkClient, this.cryptoProvider, managedIdentityId); + } + return ManagedIdentityClient.identitySource.acquireTokenWithManagedIdentity(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken); + } + allEnvironmentVariablesAreDefined(environmentVariables) { + return Object.values(environmentVariables).every((environmentVariable) => { + return environmentVariable !== undefined; + }); + } + /** + * Determine the Managed Identity Source based on available environment variables. This API is consumed by ManagedIdentityApplication's getManagedIdentitySource. + * @returns ManagedIdentitySourceNames - The Managed Identity source's name + */ + getManagedIdentitySource() { + ManagedIdentityClient.sourceName = + this.allEnvironmentVariablesAreDefined(ServiceFabric.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.SERVICE_FABRIC + : this.allEnvironmentVariablesAreDefined(AppService.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.APP_SERVICE + : this.allEnvironmentVariablesAreDefined(CloudShell.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.CLOUD_SHELL + : this.allEnvironmentVariablesAreDefined(AzureArc.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.AZURE_ARC + : ManagedIdentitySourceNames.DEFAULT_TO_IMDS; + return ManagedIdentityClient.sourceName; + } + /** + * Tries to create a managed identity source for all sources + * @returns the managed identity Source + */ + selectManagedIdentitySource(logger, nodeStorage, networkClient, cryptoProvider, managedIdentityId) { + const source = ServiceFabric.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, managedIdentityId) || + AppService.tryCreate(logger, nodeStorage, networkClient, cryptoProvider) || + CloudShell.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, managedIdentityId) || + AzureArc.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, managedIdentityId) || + Imds.tryCreate(logger, nodeStorage, networkClient, cryptoProvider); + if (!source) { + throw createManagedIdentityError(unableToCreateSource); + } + return source; + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Class to initialize a managed identity and identify the service + * @public + */ +class ManagedIdentityApplication { + constructor(configuration) { + // undefined config means the managed identity is system-assigned + this.config = buildManagedIdentityConfiguration(configuration || {}); + this.logger = new Logger(this.config.system.loggerOptions, name, version); + const fakeStatusAuthorityOptions = { + canonicalAuthority: Constants$1.DEFAULT_AUTHORITY, + }; + if (!ManagedIdentityApplication.nodeStorage) { + ManagedIdentityApplication.nodeStorage = new NodeStorage(this.logger, this.config.managedIdentityId.id, DEFAULT_CRYPTO_IMPLEMENTATION, fakeStatusAuthorityOptions); + } + this.networkClient = this.config.system.networkClient; + this.cryptoProvider = new CryptoProvider(); + const fakeAuthorityOptions = { + protocolMode: ProtocolMode.AAD, + knownAuthorities: [DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY], + cloudDiscoveryMetadata: "", + authorityMetadata: "", + }; + this.fakeAuthority = new Authority(DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY, this.networkClient, ManagedIdentityApplication.nodeStorage, fakeAuthorityOptions, this.logger, this.cryptoProvider.createNewGuid(), // correlationID + undefined, true); + this.fakeClientCredentialClient = new ClientCredentialClient({ + authOptions: { + clientId: this.config.managedIdentityId.id, + authority: this.fakeAuthority, + }, + }); + this.managedIdentityClient = new ManagedIdentityClient(this.logger, ManagedIdentityApplication.nodeStorage, this.networkClient, this.cryptoProvider); + } + /** + * Acquire an access token from the cache or the managed identity + * @param managedIdentityRequest - the ManagedIdentityRequestParams object passed in by the developer + * @returns the access token + */ + async acquireToken(managedIdentityRequestParams) { + if (!managedIdentityRequestParams.resource) { + throw createClientConfigurationError(urlEmptyError); + } + const managedIdentityRequest = { + forceRefresh: managedIdentityRequestParams.forceRefresh, + resource: managedIdentityRequestParams.resource.replace("/.default", ""), + scopes: [ + managedIdentityRequestParams.resource.replace("/.default", ""), + ], + authority: this.fakeAuthority.canonicalAuthority, + correlationId: this.cryptoProvider.createNewGuid(), + }; + if (managedIdentityRequestParams.claims || + managedIdentityRequest.forceRefresh) { + // make a network call to the managed identity source + return this.managedIdentityClient.sendManagedIdentityTokenRequest(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority); + } + const [cachedAuthenticationResult, lastCacheOutcome] = await this.fakeClientCredentialClient.getCachedAuthenticationResult(managedIdentityRequest, this.config, this.cryptoProvider, this.fakeAuthority, ManagedIdentityApplication.nodeStorage); + if (cachedAuthenticationResult) { + // if the token is not expired but must be refreshed; get a new one in the background + if (lastCacheOutcome === CacheOutcome.PROACTIVELY_REFRESHED) { + this.logger.info("ClientCredentialClient:getCachedAuthenticationResult - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed."); + // make a network call to the managed identity source; refresh the access token in the background + const refreshAccessToken = true; + await this.managedIdentityClient.sendManagedIdentityTokenRequest(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority, refreshAccessToken); + } + return cachedAuthenticationResult; + } + else { + // make a network call to the managed identity source + return this.managedIdentityClient.sendManagedIdentityTokenRequest(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority); + } + } + /** + * Determine the Managed Identity Source based on available environment variables. This API is consumed by Azure Identity SDK. + * @returns ManagedIdentitySourceNames - The Managed Identity source's name + */ + getManagedIdentitySource() { + return (ManagedIdentityClient.sourceName || + this.managedIdentityClient.getManagedIdentitySource()); + } +} + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class DistributedCachePlugin { + constructor(client, partitionManager) { + this.client = client; + this.partitionManager = partitionManager; + } + async beforeCacheAccess(cacheContext) { + const partitionKey = await this.partitionManager.getKey(); + const cacheData = await this.client.get(partitionKey); + cacheContext.tokenCache.deserialize(cacheData); + } + async afterCacheAccess(cacheContext) { + if (cacheContext.cacheHasChanged) { + const kvStore = cacheContext.tokenCache.getKVStore(); + const accountEntities = Object.values(kvStore).filter((value) => AccountEntity.isAccountEntity(value)); + if (accountEntities.length > 0) { + const accountEntity = accountEntities[0]; + const partitionKey = await this.partitionManager.extractKey(accountEntity); + await this.client.set(partitionKey, cacheContext.tokenCache.serialize()); + } + } + } +} + +exports.AuthError = AuthError; +exports.AuthErrorCodes = AuthErrorCodes; +exports.AuthErrorMessage = AuthErrorMessage; +exports.AzureCloudInstance = AzureCloudInstance; +exports.ClientApplication = ClientApplication; +exports.ClientAssertion = ClientAssertion; +exports.ClientAuthError = ClientAuthError; +exports.ClientAuthErrorCodes = ClientAuthErrorCodes; +exports.ClientAuthErrorMessage = ClientAuthErrorMessage; +exports.ClientConfigurationError = ClientConfigurationError; +exports.ClientConfigurationErrorCodes = ClientConfigurationErrorCodes; +exports.ClientConfigurationErrorMessage = ClientConfigurationErrorMessage; +exports.ClientCredentialClient = ClientCredentialClient; +exports.ConfidentialClientApplication = ConfidentialClientApplication; +exports.CryptoProvider = CryptoProvider; +exports.DeviceCodeClient = DeviceCodeClient; +exports.DistributedCachePlugin = DistributedCachePlugin; +exports.InteractionRequiredAuthError = InteractionRequiredAuthError; +exports.InteractionRequiredAuthErrorCodes = InteractionRequiredAuthErrorCodes; +exports.InteractionRequiredAuthErrorMessage = InteractionRequiredAuthErrorMessage; +exports.Logger = Logger; +exports.ManagedIdentityApplication = ManagedIdentityApplication; +exports.ManagedIdentitySourceNames = ManagedIdentitySourceNames; +exports.NodeStorage = NodeStorage; +exports.OnBehalfOfClient = OnBehalfOfClient; +exports.PromptValue = PromptValue; +exports.ProtocolMode = ProtocolMode; +exports.PublicClientApplication = PublicClientApplication; +exports.ResponseMode = ResponseMode; +exports.ServerError = ServerError; +exports.TokenCache = TokenCache; +exports.TokenCacheContext = TokenCacheContext; +exports.UsernamePasswordClient = UsernamePasswordClient; +exports.buildAppConfiguration = buildAppConfiguration; +exports.internals = internals; +exports.version = version; +//# sourceMappingURL=msal-node.cjs.map + + +/***/ }), + +/***/ 2472: +/***/ ((module) => { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nccwpck_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ var threw = true; +/******/ try { +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__); +/******/ threw = false; +/******/ } finally { +/******/ if(threw) delete __webpack_module_cache__[moduleId]; +/******/ } +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat */ +/******/ +/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/"; +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __nccwpck_require__(9407); +/******/ module.exports = __webpack_exports__; +/******/ +/******/ })() +; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7998d69a..00000000 --- a/package-lock.json +++ /dev/null @@ -1,3210 +0,0 @@ -{ - "name": "cydig-azure-tasks", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "cydig-azure-tasks", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@actions/core": "^1.11.1", - "@azure/arm-authorization": "^9.0.0", - "@azure/arm-compute": "^22.1.0", - "@azure/arm-policy": "^5.1.0", - "@azure/arm-policyinsights": "^5.0.0", - "@azure/arm-security": "^5.0.0", - "@azure/identity": "^4.5.0", - "@microsoft/microsoft-graph-client": "^3.0.7", - "@vercel/ncc": "^0.38.3", - "isomorphic-fetch": "^3.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.16", - "@types/isomorphic-fetch": "^0.0.39", - "@types/mocha": "^10.0.8", - "@types/node": "^22.10.1", - "@types/sinon": "^17.0.3", - "@types/sinon-chai": "^3.2.12", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.18.0", - "chai": "^4.0.0", - "eslint": "^8.57.1", - "husky": "^9.1.7", - "mocha": "^10.7.3", - "prettier": "^3.3.2", - "sinon": "^19.0.2", - "sinon-chai": "^3.7.0", - "typescript": "^5.7.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@actions/core": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", - "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", - "dependencies": { - "@actions/exec": "^1.1.1", - "@actions/http-client": "^2.0.1" - } - }, - "node_modules/@actions/exec": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", - "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", - "dependencies": { - "@actions/io": "^1.0.1" - } - }, - "node_modules/@actions/http-client": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.1.tgz", - "integrity": "sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==", - "dependencies": { - "tunnel": "^0.0.6", - "undici": "^5.25.4" - } - }, - "node_modules/@actions/io": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", - "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==" - }, - "node_modules/@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "dependencies": { - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/arm-authorization": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@azure/arm-authorization/-/arm-authorization-9.0.0.tgz", - "integrity": "sha512-GdiCA8IA1gO+qcCbFEPj+iLC4+3ByjfKzmeAnkP7MdlL84Yo30Huo/EwbZzwRjYybXYUBuFxGPBB+yeTT4Ebxg==", - "dependencies": { - "@azure/core-auth": "^1.3.0", - "@azure/core-client": "^1.7.0", - "@azure/core-paging": "^1.2.0", - "@azure/core-rest-pipeline": "^1.8.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@azure/arm-compute": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@azure/arm-compute/-/arm-compute-22.1.0.tgz", - "integrity": "sha512-UE2pOuQPPgHeeIXjpXkWI9I5j8al6BS/l+oBi8i3apgCbtkZ0TfA+N2NJ2ItarZ46CUcpgvktshz0ftDJDK6mA==", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.6.0", - "@azure/core-client": "^1.7.0", - "@azure/core-lro": "^2.5.4", - "@azure/core-paging": "^1.2.0", - "@azure/core-rest-pipeline": "^1.14.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/arm-policy": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@azure/arm-policy/-/arm-policy-5.1.0.tgz", - "integrity": "sha512-biNqsIV3uQqxCLYkHnDAJjvex3zATpvjhldbRWbew32HJQVmDxiLcep2kRoDy+8G4RoPJyo/fDTVYR+j5OpJ3Q==", - "dependencies": { - "@azure/core-auth": "^1.3.0", - "@azure/core-client": "^1.7.0", - "@azure/core-paging": "^1.2.0", - "@azure/core-rest-pipeline": "^1.8.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@azure/arm-policyinsights": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@azure/arm-policyinsights/-/arm-policyinsights-5.0.0.tgz", - "integrity": "sha512-JNnM1En1K18/WUBspGkhry0UPjrajjFUdsxwsnGOGwW2/QWNbCyg6mUag3e9ngJHEvfPxMgQ/qX9Kw5+ZOqfdQ==", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-client": "^1.0.0", - "@azure/core-lro": "^2.2.0", - "@azure/core-paging": "^1.2.0", - "@azure/core-rest-pipeline": "^1.1.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/arm-security": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@azure/arm-security/-/arm-security-5.0.0.tgz", - "integrity": "sha512-lmg36E9fsGc6G3jdXbJK5y7Rx+OkXt8CpXn1Jqv1OARM+Q7mz2BQSab5K+KMc2G+GSOmQKbwUnCD5tIbLF/GFg==", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-client": "^1.0.0", - "@azure/core-lro": "^2.2.0", - "@azure/core-paging": "^1.2.0", - "@azure/core-rest-pipeline": "^1.1.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/core-auth": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", - "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-client": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", - "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.9.1", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-lro": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", - "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.2.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-lro/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-paging": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", - "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.17.0.tgz", - "integrity": "sha512-62Vv8nC+uPId3j86XJ0WI+sBf0jlqTqPUFCBNrGtlaUeQUIXWV/D8GE5A1d+Qx8H7OQojn2WguC8kChD6v0shA==", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.9.0", - "@azure/logger": "^1.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-tracing": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", - "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-util": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", - "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/identity": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.5.0.tgz", - "integrity": "sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ==", - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.9.0", - "@azure/core-client": "^1.9.2", - "@azure/core-rest-pipeline": "^1.17.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^3.26.1", - "@azure/msal-node": "^2.15.0", - "events": "^3.0.0", - "jws": "^4.0.0", - "open": "^8.0.0", - "stoppable": "^1.1.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/identity/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/logger": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz", - "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.26.1.tgz", - "integrity": "sha512-y78sr9g61aCAH9fcLO1um+oHFXc1/5Ap88RIsUSuzkm0BHzFnN+PXGaQeuM1h5Qf5dTnWNOd6JqkskkMPAhh7Q==", - "dependencies": { - "@azure/msal-common": "14.15.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "14.15.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.15.0.tgz", - "integrity": "sha512-ImAQHxmpMneJ/4S8BRFhjt1MZ3bppmpRPYYNyzeQPeFN288YKbb8TmmISQEbtfkQ1BPASvYZU5doIZOPBAqENQ==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.15.0.tgz", - "integrity": "sha512-gVPW8YLz92ZeCibQH2QUw96odJoiM3k/ZPH3f2HxptozmH6+OnyyvKXo/Egg39HAM230akarQKHf0W74UHlh0Q==", - "dependencies": { - "@azure/msal-common": "14.15.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", - "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@microsoft/microsoft-graph-client": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-3.0.7.tgz", - "integrity": "sha512-/AazAV/F+HK4LIywF9C+NYHcJo038zEnWkteilcxC1FM/uK/4NVGDKGrxx7nNq1ybspAroRKT4I1FHfxQzxkUw==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependenciesMeta": { - "@azure/identity": { - "optional": true - }, - "@azure/msal-browser": { - "optional": true - }, - "buffer": { - "optional": true - }, - "stream-browserify": { - "optional": true - } - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.2.tgz", - "integrity": "sha512-4Bb+oqXZTSTZ1q27Izly9lv8B9dlV61CROxPiVtywwzv5SnytJqhvYe6FclHYuXml4cd1VHPo1zd5PmTeJozvA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", - "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "lodash.get": "^4.4.2", - "type-detect": "^4.1.0" - } - }, - "node_modules/@sinonjs/samsam/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", - "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", - "dev": true - }, - "node_modules/@types/chai": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", - "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", - "dev": true - }, - "node_modules/@types/isomorphic-fetch": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.39.tgz", - "integrity": "sha512-I0gou/ZdA1vMG7t7gMzL7VYu2xAKU78rW9U1l10MI0nn77pEHq3tQqHQ8hMmXdMpBlkxZOorjI4sO594Z3kKJw==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.8.tgz", - "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/sinon": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", - "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", - "dev": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz", - "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==", - "dev": true, - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz", - "integrity": "sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/type-utils": "7.13.1", - "@typescript-eslint/utils": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz", - "integrity": "sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/utils": "7.13.1", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz", - "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.13.1", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@vercel/ncc": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.3.tgz", - "integrity": "sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==", - "license": "MIT", - "bin": { - "ncc": "dist/ncc/cli.js" - } - }, - "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", - "dev": true, - "license": "MIT", - "bin": { - "husky": "bin.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jsonwebtoken/node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/just-extend": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "dev": true - }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/nise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", - "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.1", - "@sinonjs/text-encoding": "^0.7.3", - "just-extend": "^6.2.0", - "path-to-regexp": "^8.1.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sinon": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.2.tgz", - "integrity": "sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.2", - "@sinonjs/samsam": "^8.0.1", - "diff": "^7.0.0", - "nise": "^6.1.1", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon-chai": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", - "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", - "dev": true, - "peerDependencies": { - "chai": "^4.0.0", - "sinon": ">=4.0.0" - } - }, - "node_modules/sinon/node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true, - "license": "MIT" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 231eb81a..00000000 --- a/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "cydig-azure-tasks", - "description": "cydig azure tasks", - "version": "1.0.0", - "author": "", - "repository": { - "type": "git", - "url": "git+https://github.com/Omegapoint/CydigAzureComplianceAction.git" - }, - "bugs": { - "url": "https://github.com/Omegapoint/CydigAzureComplianceAction/issues" - }, - "keywords": [ - "actions", - "node", - "setup" - ], - "exports": { - ".": "./dist/index.js" - }, - "engines": { - "node": ">=16" - }, - "main": "dist/index.js", - "scripts": { - "build": "ncc build src/index.ts", - "test": "tsc && mocha dist/tests/", - "testScript": "tsc && mocha dist/tests/ --reporter xunit --reporter-option output=ResultsFile.xml", - "prepare": "husky install", - "lint": "eslint . --ext .ts", - "lint:fix": "eslint . --fix --ext .ts", - "format:write": "npx prettier -w .", - "format:check": "npx prettier -c ." - }, - "license": "MIT", - "dependencies": { - "@actions/core": "^1.11.1", - "@azure/arm-authorization": "^9.0.0", - "@azure/arm-compute": "^22.1.0", - "@azure/arm-policy": "^5.1.0", - "@azure/arm-policyinsights": "^5.0.0", - "@azure/arm-security": "^5.0.0", - "@azure/identity": "^4.5.0", - "@microsoft/microsoft-graph-client": "^3.0.7", - "@vercel/ncc": "^0.38.3", - "isomorphic-fetch": "^3.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.16", - "@types/isomorphic-fetch": "^0.0.39", - "@types/mocha": "^10.0.8", - "@types/node": "^22.10.1", - "@types/sinon": "^17.0.3", - "@types/sinon-chai": "^3.2.12", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.18.0", - "chai": "^4.0.0", - "eslint": "^8.57.1", - "husky": "^9.1.7", - "mocha": "^10.7.3", - "prettier": "^3.3.2", - "sinon": "^19.0.2", - "sinon-chai": "^3.7.0", - "typescript": "^5.7.2" - } -} diff --git a/src/allowedlocation/index.ts b/src/allowedlocation/index.ts deleted file mode 100644 index e6df8b4d..00000000 --- a/src/allowedlocation/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { TokenCredential } from '@azure/identity'; -import { PolicyClient, PolicyAssignment } from '@azure/arm-policy'; -import { PolicyInsightsClient } from '@azure/arm-policyinsights'; -import { PolicyService } from './lib/PolicyService'; -import { ManagementGroupAssignment } from './lib/ManagmentGroupAssignment'; -import { SubscriptionAssignment } from './lib/SubscriptionAssignment'; -import * as core from '@actions/core'; - -export class AllowedLocation { - static async getAllowedLocation(credentials: TokenCredential, subscriptionId: string): Promise { - const policyService: PolicyService = new PolicyService(new PolicyClient(credentials, subscriptionId)); - const policyInsightsClient: PolicyInsightsClient = new PolicyInsightsClient(credentials, subscriptionId); - const managementGroupAssignment: ManagementGroupAssignment = new ManagementGroupAssignment( - policyService, - policyInsightsClient, - subscriptionId, - credentials, - ); - const subscriptionAssignment: SubscriptionAssignment = new SubscriptionAssignment( - policyService, - policyInsightsClient, - subscriptionId, - ); - - console.log('Getting policy assignments of allowed locations'); - const allowedLocationPolicyAssignments: PolicyAssignment[] = - await policyService.getPolicyAssignmentsOfAllowedLocations(); - - if (await managementGroupAssignment.policyCheck(allowedLocationPolicyAssignments)) { - console.log(`ALLOWED LOCATION POLICY IN PLACE ON MANAGEMENT GROUP LEVEL: true`); - core.exportVariable('allowedLocationPolicy', 'true'); - return; - } else { - const isSubscriptionLevelPolicyCheckPassed: boolean = await subscriptionAssignment.policyCheck( - allowedLocationPolicyAssignments, - ); - - console.log( - `ALLOWED LOCATION POLICY IN PLACE WITH LOCATIONS ONLY IN EUROPE ON SUBSCRIPTION LEVEL: ${isSubscriptionLevelPolicyCheckPassed.toString()}`, - ); - core.exportVariable('allowedLocationPolicy', isSubscriptionLevelPolicyCheckPassed.toString()); - return; - } - } -} diff --git a/src/allowedlocation/lib/AllowedLocations.ts b/src/allowedlocation/lib/AllowedLocations.ts deleted file mode 100644 index f309f10d..00000000 --- a/src/allowedlocation/lib/AllowedLocations.ts +++ /dev/null @@ -1,33 +0,0 @@ -const allowedLocations: string[] = [ - 'europe', - 'northeurope', - 'westeurope', - 'swedencentral', - 'sweden', - 'france', - 'francecentral', - 'francesouth', - 'germany', - 'germanynorth', - 'germanywest', - 'germanywestcentral', - 'norway', - 'norwayeast', - 'norwaywest', -]; - -export function isLocationAllowed(location: string[]): boolean { - if (location === undefined || location === null || location.length === 0) { - throw Error('Locations must contain values'); - } - let policyValid: boolean = true; - for (let index: number = 0; index < location.length; index++) { - if (!allowedLocations.includes(location[index])) { - console.log( - `${location[index]} is not in the list of allowed locations. Contact the CyDig team if the location is in Europe`, - ); - policyValid = false; - } - } - return policyValid; -} diff --git a/src/allowedlocation/lib/EnabledPolicyFilter.ts b/src/allowedlocation/lib/EnabledPolicyFilter.ts deleted file mode 100644 index feb7ea6e..00000000 --- a/src/allowedlocation/lib/EnabledPolicyFilter.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { InfoPolicyType } from './types/InfoPolicyType'; - -export function enabledPolicyFilter(allowedLocationPolicy: InfoPolicyType[]): InfoPolicyType[] { - return allowedLocationPolicy.filter((x: InfoPolicyType) => checkIfPolicyIsEnabled(x)); -} -function checkIfPolicyIsEnabled(policyAssigment: InfoPolicyType): boolean { - return policyAssigment.enforcementMode !== 'DoNotEnforce'; -} diff --git a/src/allowedlocation/lib/ManagmentGroupAssignment.ts b/src/allowedlocation/lib/ManagmentGroupAssignment.ts deleted file mode 100644 index 9c4aae6f..00000000 --- a/src/allowedlocation/lib/ManagmentGroupAssignment.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { PolicyAssignment } from '@azure/arm-policy'; -import { - ComplianceDetail, - PolicyAssignmentSummary, - PolicyInsightsClient, - SummarizeResults, -} from '@azure/arm-policyinsights'; -import { InfoPolicyType } from './types/InfoPolicyType'; -import { PolicyService } from './PolicyService'; -import { enabledPolicyFilter } from './EnabledPolicyFilter'; -import { TokenCredential } from '@azure/identity'; -import * as core from '@actions/core'; - -export class ManagementGroupAssignment { - policyService: PolicyService; - policyInsightClient: PolicyInsightsClient; - subscriptionId: string; - credentials: TokenCredential; - - constructor( - policyService: PolicyService, - policyInsightClient: PolicyInsightsClient, - subscriptionId: string, - credentials: TokenCredential, - ) { - this.policyService = policyService; - this.policyInsightClient = policyInsightClient; - this.subscriptionId = subscriptionId; - this.credentials = credentials; - } - - async policyCheck(policyAssignment: PolicyAssignment[]): Promise { - console.log('Checking if there is a policy on management group level'); - const managementGroupAllowedLocationPolicy: InfoPolicyType[] = this.getPolicy(policyAssignment); - const allowedLocationPolicyEnabled: InfoPolicyType[] = enabledPolicyFilter(managementGroupAllowedLocationPolicy); - if (await this.policyService.isPolicyValid(allowedLocationPolicyEnabled)) { - await this.setNumberOfNonAndCompliantResources(allowedLocationPolicyEnabled); - return true; - } - return false; - } - - getPolicy(policyAssignment: PolicyAssignment[]): InfoPolicyType[] { - const policies: InfoPolicyType[] = []; - for (let i: number = 0; i < policyAssignment.length; i++) { - if (policyAssignment[i].scope?.startsWith('/providers/Microsoft.Management/managementGroups/')) { - const policy: InfoPolicyType = { - name: policyAssignment[i]?.name as string, - subscriptionId: this.subscriptionId, - managementGroup: policyAssignment[i].scope, - allowedLocations: policyAssignment[i].parameters?.listOfAllowedLocations.value, - enforcementMode: policyAssignment[i]?.enforcementMode as string, - }; - policies.push(policy); - } - } - return policies; - } - - async setNumberOfNonAndCompliantResources(managementGroupAllowedLocationPolicy: InfoPolicyType[]): Promise { - const result: SummarizeResults = await this.policyInsightClient.policyStates.summarizeForManagementGroup( - managementGroupAllowedLocationPolicy[0].managementGroup?.split('/').pop() as string, - { - queryOptions: { - filter: `policyDefinitionName eq 'e56962a6-4747-49cd-b67b-bf8b01975c4c' and contains(resourceId,'/subscriptions/${managementGroupAllowedLocationPolicy[0].subscriptionId}')`, - }, - }, - ); - - let numCompliantResources: number = 0; - let numNonCompliantResources: number = 0; - - result.value?.[0].policyAssignments?.forEach((policyAssignment: PolicyAssignmentSummary) => { - if ( - policyAssignment.policyAssignmentId?.startsWith( - managementGroupAllowedLocationPolicy[0].managementGroup?.toLowerCase() as string, - ) - ) { - policyAssignment.results?.resourceDetails?.forEach((state: ComplianceDetail) => { - if (state.complianceState == 'compliant') { - numCompliantResources = state.count || 0; - } - if (state.complianceState == 'noncompliant') { - numNonCompliantResources = state.count || 0; - } - }); - } - }); - - console.log(`NUMBER OF COMPLIANT RESOURCES: ${numCompliantResources.toString()}`); - core.exportVariable('compliantResources', numCompliantResources.toString()); - console.log(`NUMBER OF NON-COMPLIANT RESOURCES: ${numNonCompliantResources.toString()}`); - core.exportVariable('nonCompliantResources', numNonCompliantResources.toString()); - return; - } -} diff --git a/src/allowedlocation/lib/PolicyService.ts b/src/allowedlocation/lib/PolicyService.ts deleted file mode 100644 index b387cc12..00000000 --- a/src/allowedlocation/lib/PolicyService.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { PolicyAssignment, PolicyClient } from '@azure/arm-policy'; -import { PagedAsyncIterableIterator, PageSettings } from '@azure/core-paging'; -import { InfoPolicyType } from './types/InfoPolicyType'; -import { isLocationAllowed } from './AllowedLocations'; - -export class PolicyService { - policyClient: PolicyClient; - - constructor(policyClient: PolicyClient) { - this.policyClient = policyClient; - } - - async getPolicyAssignmentsOfAllowedLocations(): Promise { - const allowedLocationPolicyAssignments: PolicyAssignment[] = []; - - const allPolicyAssignments: PagedAsyncIterableIterator = - this.policyClient.policyAssignments.list(); - - // eslint-disable-next-line - let policyAssignment: IteratorResult = await allPolicyAssignments.next(); - - while (!policyAssignment.done) { - if (policyAssignment.value.displayName == 'Allowed locations') { - allowedLocationPolicyAssignments.push(policyAssignment.value); - } - policyAssignment = await allPolicyAssignments.next(); - } - return allowedLocationPolicyAssignments; - } - - async isPolicyValid(allowedLocationPolicyEnabled: InfoPolicyType[]): Promise { - console.log('Checking if the policy is enabled'); - - if (allowedLocationPolicyEnabled.length > 0) { - const locationsInPolicy: string[] = this.getLocationsInPolicy(allowedLocationPolicyEnabled); - - if (locationsInPolicy.length > 0) { - console.log('Checking if the policy only contains allowed locations'); - return isLocationAllowed(locationsInPolicy); - } - } - return false; - } - - getLocationsInPolicy(allowedLocationPolicyEnabled: InfoPolicyType[]): string[] { - let locations: string[] = []; - for (let i: number = 0; i < allowedLocationPolicyEnabled.length; i++) { - locations = locations.concat(allowedLocationPolicyEnabled[i].allowedLocations); - } - return locations; - } -} diff --git a/src/allowedlocation/lib/SubscriptionAssignment.ts b/src/allowedlocation/lib/SubscriptionAssignment.ts deleted file mode 100644 index 57864a25..00000000 --- a/src/allowedlocation/lib/SubscriptionAssignment.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { PolicyAssignment } from '@azure/arm-policy'; -import { PolicyInsightsClient, PolicyState } from '@azure/arm-policyinsights'; -import { InfoPolicyType } from './types/InfoPolicyType'; -import { PolicyService } from './PolicyService'; -import { PageSettings, PagedAsyncIterableIterator } from '@azure/core-paging'; -import { enabledPolicyFilter } from './EnabledPolicyFilter'; -import * as core from '@actions/core'; - -export class SubscriptionAssignment { - policyService: PolicyService; - policyInsightClient: PolicyInsightsClient; - subscriptionId: string; - - constructor(policyService: PolicyService, policyInsightClient: PolicyInsightsClient, subscriptionId: string) { - this.policyService = policyService; - this.policyInsightClient = policyInsightClient; - this.subscriptionId = subscriptionId; - } - - async policyCheck(policyAssigment: PolicyAssignment[]): Promise { - console.log('\nChecking if there is a policy on subscription level'); - const subscriptionAllowedLocationPolicy: InfoPolicyType[] = this.getPolicy(policyAssigment); - - const allowedLocationPolicyEnabled: InfoPolicyType[] = enabledPolicyFilter(subscriptionAllowedLocationPolicy); - - if (await this.policyService.isPolicyValid(allowedLocationPolicyEnabled)) { - await this.setNumberOfNonAndCompliantResources(allowedLocationPolicyEnabled); - return true; - } - return false; - } - - getPolicy(policyAssignment: PolicyAssignment[]): InfoPolicyType[] { - const policies: InfoPolicyType[] = []; - for (let i: number = 0; i < policyAssignment.length; i++) { - if (policyAssignment[i].scope == `/subscriptions/${this.subscriptionId}`) { - const policy: InfoPolicyType = { - name: policyAssignment[i].name as string, - subscriptionId: this.subscriptionId, - managementGroup: policyAssignment[i].scope, - allowedLocations: policyAssignment[i].parameters?.listOfAllowedLocations.value, - enforcementMode: policyAssignment[i]?.enforcementMode as string, - }; - policies.push(policy); - } - } - return policies; - } - - async setNumberOfNonAndCompliantResources(allowedLocationPolicyEnabled: InfoPolicyType[]): Promise { - const policyResult: PagedAsyncIterableIterator = - this.policyInsightClient.policyStates.listQueryResultsForSubscriptionLevelPolicyAssignment( - 'latest', - this.subscriptionId, - allowedLocationPolicyEnabled[0].name, - ); - - // eslint-disable-next-line - let policy: IteratorResult = await policyResult.next(); - - let numCompliantResources: number = 0; - let numNonCompliantResources: number = 0; - while (!policy.done) { - if (policy.value.isCompliant) { - numCompliantResources++; - } else { - numNonCompliantResources++; - console.debug(`Resource outside of EU: ${policy.value.resourceId?.split('/').pop()}`); - } - policy = await policyResult.next(); - } - - console.log(`NUMBER OF COMPLIANT RESOURCES: ${numCompliantResources.toString()}`); - console.log(`NUMBER OF NON-COMPLIANT RESOURCES: ${numNonCompliantResources.toString()}`); - core.exportVariable('compliantResources', numCompliantResources.toString()); - core.exportVariable('nonCompliantResources', numNonCompliantResources.toString()); - } -} diff --git a/src/allowedlocation/lib/types/InfoPolicyType.ts b/src/allowedlocation/lib/types/InfoPolicyType.ts deleted file mode 100644 index 34adc349..00000000 --- a/src/allowedlocation/lib/types/InfoPolicyType.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type InfoPolicyType = { - name: string; - subscriptionId: string; - managementGroup?: string; - allowedLocations: string[]; - enforcementMode: string; -}; diff --git a/src/cydigConfig.json b/src/cydigConfig.json deleted file mode 100644 index 667c95ae..00000000 --- a/src/cydigConfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "teamName": "CyDig", - "usingAzure": true, - "threatModeling": { - "date": "2024-01-01", - "boardsTag": "TM" - }, - "pentest": { - "date": "2023-01-01", - "boardsTag": "PT" - }, - "azureDevOps": { - "usingBoards": true, - "boards": { - "organizationName": "CyDig", - "projectName": "CyDig", - "nameOfBoard": "not specified" - } - }, - "scaTool": { - "nameOfTool": "OWASP" - }, - "sastTool": { - "nameOfTool": "SEMGREP" - }, - "codeQualityTool": { - "nameOfTool": "not specified" - } -} diff --git a/src/deployedvirtualmachines/DeployedVirtualMachines.ts b/src/deployedvirtualmachines/DeployedVirtualMachines.ts deleted file mode 100644 index 8e0a9e44..00000000 --- a/src/deployedvirtualmachines/DeployedVirtualMachines.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ComputeManagementClient, VirtualMachine } from '@azure/arm-compute'; -import { DefaultAzureCredential } from '@azure/identity'; -import * as core from '@actions/core'; -export class DeployedVirtualMachines { - static async getDeployedVirtualMachines(credentials: DefaultAzureCredential, subscriptionId: string): Promise { - console.log('Getting number of deployed virtual machines'); - const computeManagementClient: ComputeManagementClient = new ComputeManagementClient(credentials, subscriptionId); - const allVirtualMachines: VirtualMachine[] = []; - for await (const virtualMachine of computeManagementClient.virtualMachines.listAll()) { - allVirtualMachines.push(virtualMachine); - } - - console.log(`NUMBER OF DEPLOYED VIRTUAL MACHINES: ${allVirtualMachines.length}`); - core.exportVariable('numberOfDeployedVMs', allVirtualMachines.length.toString()); - } -} diff --git a/src/helpFunctions/JsonService.ts b/src/helpFunctions/JsonService.ts deleted file mode 100644 index 5e4d4760..00000000 --- a/src/helpFunctions/JsonService.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; - -import { CyDigConfig } from '../types/CyDigConfig'; - -export function getContentOfFile(jsonPath: string): CyDigConfig { - const jsonFilePath: string = path.resolve( - __dirname, - path.relative(__dirname, path.normalize(jsonPath).replace(/^(\.\.(\/|\\|$))+/, '')), - ); - const fileContent: string = fs.readFileSync(jsonFilePath, { encoding: 'utf-8' }); - - const cydigConfig: CyDigConfig = JSON.parse(fileContent); - - return cydigConfig; -} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 18947872..00000000 --- a/src/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as core from '@actions/core'; -import { DefaultAzureCredential } from '@azure/identity'; -import { SecureScore } from './securescore/SecureScore'; -import { DeployedVirtualMachines } from './deployedvirtualmachines/DeployedVirtualMachines'; -import { AllowedLocation } from './allowedlocation'; -import { UsersInProduction } from './usersinproduction'; -import { getContentOfFile } from './helpFunctions/JsonService'; -import { CyDigConfig } from './types/CyDigConfig'; - -/** - * The main function for the action. - * @returns {Promise} Resolves when the action is complete. - */ -export async function run(): Promise { - try { - const cydigConfig: CyDigConfig = getContentOfFile(core.getInput('cydigConfigPath')); - if (cydigConfig.usingAzure) { - const credentials: DefaultAzureCredential = new DefaultAzureCredential(); - const subscriptionId: string = core.getInput('subscription'); - if (!subscriptionId) throw new Error('Could not get subscriptionId'); - await SecureScore.getSecureScore(credentials, subscriptionId); - await DeployedVirtualMachines.getDeployedVirtualMachines(credentials, subscriptionId); - await AllowedLocation.getAllowedLocation(credentials, subscriptionId); - await UsersInProduction.getUsersInProduction(credentials, subscriptionId); - } - } catch (error) { - core.setFailed(error.message); - } -} - -run(); diff --git a/src/securescore/SecureScore.ts b/src/securescore/SecureScore.ts deleted file mode 100644 index f39f7f1c..00000000 --- a/src/securescore/SecureScore.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { SecureScoreItem, SecurityCenter } from '@azure/arm-security'; -import { DefaultAzureCredential } from '@azure/identity'; -import * as core from '@actions/core'; -export class SecureScore { - static async getSecureScore(credentials: DefaultAzureCredential, subscriptionId: string): Promise { - const client: SecurityCenter = new SecurityCenter(credentials, subscriptionId); - console.log('Getting Azure Secure Score'); - const secureScoreObject: SecureScoreItem = await client.secureScores.get('ascScore'); - if (secureScoreObject?.['percentage']) { - const secureScorePercent: number = Math.round(secureScoreObject?.['percentage'] * 100); - console.log(`AZURE SECURE SCORE: ${secureScorePercent}%`); - core.exportVariable('secureScore', secureScorePercent.toString()); - } else { - console.log('Something went wrong or no secure score found'); - } - } -} diff --git a/src/types/CyDigConfig.ts b/src/types/CyDigConfig.ts deleted file mode 100644 index 6ef8d191..00000000 --- a/src/types/CyDigConfig.ts +++ /dev/null @@ -1,29 +0,0 @@ -export type CyDigConfig = { - teamName: string; - usingAzure: boolean; - threatModeling: { - date: string; - boardsTag: string; - }; - pentest: { - date: string; - boardsTag: string; - }; - azureDevOps: { - usingBoards: boolean; - boards: { - organizationName: string; - projectName: string; - nameOfBoard: string; - }; - }; - scaTool: { - nameOfTool: string; - }; - sastTool: { - nameOfTool: string; - }; - codeQualityTool: { - nameOfTool: string; - }; -}; diff --git a/src/usersinproduction/index.ts b/src/usersinproduction/index.ts deleted file mode 100644 index deb3de74..00000000 --- a/src/usersinproduction/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { TokenCredential } from '@azure/identity'; -import { AzureRoleService } from './lib/AzureRoleService'; -import * as core from '@actions/core'; -import { RoleAssignment } from '@azure/arm-authorization'; - -export class UsersInProduction { - static async getUsersInProduction(credentials: TokenCredential, subscriptionId: string): Promise { - let disablePermissionWarning: string = core.getInput('disableWarningUsersInProd'); - if (!disablePermissionWarning) { - disablePermissionWarning = 'false'; - } - - const azureRoleService: AzureRoleService = new AzureRoleService(subscriptionId, credentials); - - await azureRoleService.setRoleAssignmentForSubscription(); - - const highPrivRoleAssignments: RoleAssignment[] = await azureRoleService.getHighPrivRoleAssignments(); - const lowPrivRoleAssignments: RoleAssignment[] = await azureRoleService.getLowPrivRoleAssignments(); - const mediumPrivRoleAssignments: RoleAssignment[] = await azureRoleService.getMediumPrivRoleAssignments(); - - const numberOfHighPrivRoleAssignments: number = - await azureRoleService.getNumberOfAssignments(highPrivRoleAssignments); - const numberOfMediumPrivRoleAssignments: number = - await azureRoleService.getNumberOfAssignments(mediumPrivRoleAssignments); - const numberOfLowPrivRoleAssignments: number = - await azureRoleService.getNumberOfAssignments(lowPrivRoleAssignments); - - console.log(`Number of high privileged users in Azure: ${numberOfHighPrivRoleAssignments} `); - await azureRoleService.printRoles(highPrivRoleAssignments); - console.log(`\nNumber of medium privileged users in Azure: ${numberOfMediumPrivRoleAssignments} `); - await azureRoleService.printRoles(mediumPrivRoleAssignments); - console.log(`\nNumber of low privileged users in Azure: ${numberOfLowPrivRoleAssignments} `); - await azureRoleService.printRoles(lowPrivRoleAssignments); - - core.exportVariable('numUserInProdSeverity1', numberOfLowPrivRoleAssignments.toString()); - core.exportVariable('numUserInProdSeverity2', numberOfMediumPrivRoleAssignments.toString()); - core.exportVariable('numUserInProdSeverity3', numberOfHighPrivRoleAssignments.toString()); - - // Refactor the logs to be adjusted to github actions instead of azure devops tasks service connection - if (azureRoleService.insufficientPermission && disablePermissionWarning && !JSON.parse(disablePermissionWarning)) { - core.warning( - `The workflow does not have access to view members in a group in your Azure Subscription, therefore the control will add 5 members for each group it finds. - Follow these steps to give the workflow the necessary permission: - 1. Go to the App Registration connected to your workflow in the Azure portal. - 2. Go to API permission and press Add a permission. - 3. Press Microsoft Graph --> Application permission. - 4. Choose the permission GroupMember.Read.All and press Add permission. - 5. An admin of your Azure tenant must give admin consent in order for the permission to start working.`, - ); - } else { - console.log( - `The workflow does not have access to view members in a group in your Azure Subscription, therefore the control will add 5 members for each group it finds. - Follow these steps to give the workflow the necessary permission: - 1. Go to the App Registration connected to your workflow in the Azure portal. - 2. Go to API permission and press Add a permission. - 3. Press Microsoft Graph --> Application permission. - 4. Choose the permission GroupMember.Read.All and press Add permission. - 5. An admin of your Azure tenant must give admin consent in order for the permission to start working.`, - ); - } - return; - } -} diff --git a/src/usersinproduction/lib/AzureRoleService.ts b/src/usersinproduction/lib/AzureRoleService.ts deleted file mode 100644 index 42ef90a1..00000000 --- a/src/usersinproduction/lib/AzureRoleService.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { AuthorizationManagementClient, RoleAssignment, RoleDefinition } from '@azure/arm-authorization'; -import { TokenCredential } from '@azure/identity'; -import { Client } from '@microsoft/microsoft-graph-client'; -import 'isomorphic-fetch'; -import { TokenCredentialAuthenticationProvider } from '@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials'; - -export class AzureRoleService { - private scope: string; - private authManagementClient: AuthorizationManagementClient; - private client: Client; - private roleAssignments: RoleAssignment[]; - private roleDefinitionsHighPriv: RoleDefinition[]; - private roleDefinitionsLowPriv: RoleDefinition[]; - public insufficientPermission: boolean = false; - - constructor(subscriptionId: string, credentials: TokenCredential) { - this.scope = `/subscriptions/${subscriptionId}`; - this.authManagementClient = new AuthorizationManagementClient(credentials, subscriptionId); - this.client = this.getClient(credentials); - this.roleAssignments = []; - this.roleDefinitionsHighPriv = []; - this.roleDefinitionsLowPriv = []; - } - - private getClient(credentials: TokenCredential): Client { - const scopes: string = 'https://graph.microsoft.com/.default'; - const authProvider: TokenCredentialAuthenticationProvider = new TokenCredentialAuthenticationProvider(credentials, { - scopes: [scopes], - }); - - const client: Client = Client.initWithMiddleware({ - debugLogging: true, - authProvider, - }); - return client; - } - public async setRoleAssignmentForSubscription(): Promise { - // Convert the iterator to an array - const roleAssignmentsArray: RoleDefinition[] = []; - for await (const roleAssignment of this.authManagementClient.roleAssignments.listForScope(this.scope)) { - roleAssignmentsArray.push(roleAssignment); - } - - // Now, you can apply the filter on the array - this.roleAssignments = roleAssignmentsArray.filter((roleAssignment: RoleAssignment) => { - return ( - (roleAssignment.principalType === 'User' || roleAssignment.principalType === 'Group') && - (roleAssignment.scope === this.scope || - roleAssignment.scope === '/' || - roleAssignment.scope?.startsWith('/providers/Microsoft.Management/managementGroups/')) - ); - }); - } - - public async getHighPrivRoleAssignments(): Promise { - // Convert the iterator to an array - const roleDefinitionsArray: RoleDefinition[] = []; - for await (const roleDefinition of this.authManagementClient.roleDefinitions.list(this.scope)) { - roleDefinitionsArray.push(roleDefinition); - } - - // Filter the role definitions - this.roleDefinitionsHighPriv = roleDefinitionsArray.filter( - (roleDefinition: RoleDefinition) => - roleDefinition.roleName?.includes('Owner') || roleDefinition.roleName?.includes('Admin'), - ); - - // Filter the role assignments based on filtered role definitions - const highPrivRoleAssignments: RoleAssignment[] = this.roleAssignments.filter((roleAssignment: RoleAssignment) => - this.filterArray(this.roleDefinitionsHighPriv, roleAssignment), - ); - - return highPrivRoleAssignments; - } - - public async getLowPrivRoleAssignments(): Promise { - // Convert the iterator to an array - const roleDefinitionsArray: RoleDefinition[] = []; - for await (const roleDefinition of this.authManagementClient.roleDefinitions.list(this.scope)) { - roleDefinitionsArray.push(roleDefinition); - } - - // Filter the role definitions - this.roleDefinitionsLowPriv = roleDefinitionsArray.filter((roleDefinition: RoleDefinition) => - roleDefinition.roleName?.includes('Reader'), - ); - - // Filter the role assignments based on filtered role definitions - const lowPrivRoleAssignments: RoleAssignment[] = this.roleAssignments.filter((roleAssignment: RoleAssignment) => - this.filterArray(this.roleDefinitionsLowPriv, roleAssignment), - ); - - return lowPrivRoleAssignments; - } - - public async getMediumPrivRoleAssignments(): Promise { - const mediumPrivRoleAssignments: RoleAssignment[] = this.roleAssignments.filter( - (roleAssignment: RoleAssignment) => - !( - this.filterArray(this.roleDefinitionsLowPriv, roleAssignment) || - this.filterArray(this.roleDefinitionsHighPriv, roleAssignment) - ), - ); - - return mediumPrivRoleAssignments; - } - - public async getNumberOfAssignments(roleAssignments: RoleAssignment[]): Promise { - let numberOfAssignments: number = 0; - const roleAssignmentsIds: string[] = []; // Initialize an array to store unique principalId values - for (let i: number = 0; i < roleAssignments.length; i++) { - if (roleAssignments[i].principalType === 'Group') { - try { - const numberOfMembers: number = await this.getCountMembersOfGroup(roleAssignments[i].principalId as string); - numberOfAssignments += numberOfMembers; - } catch (err) { - if (err.code === 'Authorization_RequestDenied') { - this.insufficientPermission = true; - console.log( - 'Found a group and your pipeline does not have access to count the members. Will add 5 users to the count.', - ); - numberOfAssignments += 5; - } else { - throw err; - } - } - } else { - if (roleAssignmentsIds.indexOf(roleAssignments[i].principalId as string) === -1) { - roleAssignmentsIds.push(roleAssignments[i].principalId as string); - numberOfAssignments++; - } - } - } - return numberOfAssignments; - } - - private filterArray(roleDefinitions: RoleDefinition[], roleAssignment: RoleAssignment): boolean { - return roleDefinitions.some( - (roleDefinition: RoleDefinition) => roleDefinition.id == roleAssignment.roleDefinitionId, - ); - } - - public async getCountMembersOfGroup(groupId: string): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const members: any = await this.client.api(`/groups/${groupId}/members`).get(); - let numberOfMembers: number = 0; - for (let i: number = 0; i < members.value.length; i++) { - if (members.value[i]['@odata.type'] === '#microsoft.graph.group') { - const numberOfMembersInGroupInGroup: number = await this.getCountMembersOfGroup(members.value[i].id); - numberOfMembers += numberOfMembersInGroupInGroup; - } else { - numberOfMembers++; - } - } - return numberOfMembers; - } - - public async printRoles(roleAssignments: RoleAssignment[]): Promise { - const roleDefinitionIds: (string | undefined)[] = [ - ...new Set(roleAssignments.map((roleAssignment: RoleAssignment) => roleAssignment.roleDefinitionId)), - ]; - console.log('Roles:'); - for (let i: number = 0; i < roleDefinitionIds.length; i++) { - console.log((await this.authManagementClient.roleDefinitions.getById(roleDefinitionIds[i] as string)).roleName); - } - } -} diff --git a/tests/AllowedLocation.test.ts b/tests/AllowedLocation.test.ts deleted file mode 100644 index 9f421f03..00000000 --- a/tests/AllowedLocation.test.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import chai, { expect } from 'chai'; -import sinon from 'sinon'; -import sinonChai from 'sinon-chai'; -import { isLocationAllowed } from '../src/allowedlocation/lib/AllowedLocations'; - -chai.use(sinonChai); - -describe('Allowed Location Test', () => { - afterEach(() => { - sinon.restore(); - }); - - it('Should return true if location is within allowed locations', () => { - const isEnabled: boolean = isLocationAllowed(['europe', 'sweden']); - expect(isEnabled).equal(true); - }); - it('Should return false if location is within allowed locations', () => { - const isEnabled: boolean = isLocationAllowed(['europe', 'sweden', 'global']); - expect(isEnabled).equal(false); - }); - it('Should throw error if location is empty', () => - expect(function () { - isLocationAllowed([]); - }).to.throw('Locations must contain values')); - it('Should throw error if location is undefined', () => - expect(function () { - isLocationAllowed(undefined as any); - }).to.throw('Locations must contain values')); - - it('Should throw error if location is null', () => - expect(function () { - isLocationAllowed(null as any); - }).to.throw('Locations must contain values')); -}); diff --git a/tests/EnabledPolicyFilter.test.ts b/tests/EnabledPolicyFilter.test.ts deleted file mode 100644 index b4ebd6a7..00000000 --- a/tests/EnabledPolicyFilter.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import chai, { expect } from 'chai'; -import sinon from 'sinon'; -import sinonChai from 'sinon-chai'; -import { enabledPolicyFilter } from '../src/allowedlocation/lib/EnabledPolicyFilter'; -import { InfoPolicyType } from '../src/allowedlocation/lib/types/InfoPolicyType'; -import * as testData from './TestData'; - -chai.use(sinonChai); - -describe('Allowed Location Test', () => { - afterEach(() => { - sinon.restore(); - }); - - it('Should only returned enabled policies', () => { - const enabledPolicies: InfoPolicyType[] = enabledPolicyFilter(testData.policyTypes); - expect(enabledPolicies.every((x: InfoPolicyType) => x.enforcementMode == 'Enabled')).equal(true); - }); - - it('Should not returned disabled policies', () => - expect(function () { - const enabledPolicies: InfoPolicyType[] = enabledPolicyFilter(testData.policyTypes); - expect(enabledPolicies.some((x: InfoPolicyType) => x.enforcementMode == 'DoNotEnforce')).equal(false); - })); -}); diff --git a/tests/TestData.ts b/tests/TestData.ts deleted file mode 100644 index ac19bafb..00000000 --- a/tests/TestData.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { InfoPolicyType } from '../src/allowedlocation/lib/types/InfoPolicyType'; - -const name: string = 'testPolicy'; -const subscriptionId: string = 'testSubscriptionId'; -const managementGroup: string = 'testmanagementGroup'; -const allowedLocations: string[] = ['sweden', 'europe']; -const enforcementModeOn: string = 'Enabled'; -const enforcementModeOff: string = 'DoNotEnforce'; - -export const policyEnabled: InfoPolicyType = { - name: name, - subscriptionId: subscriptionId, - managementGroup: managementGroup, - allowedLocations: allowedLocations, - enforcementMode: enforcementModeOn, -}; - -export const policyNotEnabled: InfoPolicyType = { - name: name, - subscriptionId: subscriptionId, - managementGroup: managementGroup, - allowedLocations: allowedLocations, - enforcementMode: enforcementModeOff, -}; - -export const policyTypes: InfoPolicyType[] = [policyEnabled, policyNotEnabled]; diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 1b8f86bb..00000000 --- a/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "target": "ES2022", - "module": "nodenext", - "rootDir": "./", - "moduleResolution": "nodenext", - "baseUrl": "./", - "sourceMap": true, - "outDir": "./dist", - "noImplicitAny": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true, - "newLine": "lf", - "strict": true, - "useUnknownInCatchVariables": false - }, - "exclude": ["./dist", "./node_modules", "./src"] -}