diff --git a/.github/workflows/enable-pr-annotations.yml b/.github/workflows/enable-pr-annotations.yml
deleted file mode 100644
index a7c72741..00000000
--- a/.github/workflows/enable-pr-annotations.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-# pull request action verification
-
-name: MSDO ubuntu-latest
-on:
- # Triggers the workflow on push or pull request events but only for the main branch
- pull_request:
- branches: ["main"]
-
-jobs:
- sample:
- name: Microsoft Security DevOps Analysis
-
- # MSDO runs on ubuntu-latest
- runs-on: ubuntu-latest
-
- steps:
-
- # Checkout your code repository to scan
- - uses: actions/checkout@v2
-
- # Install dotnet, used by MSDO
- - uses: actions/setup-dotnet@v1
- with:
- dotnet-version: |
- 3.1.x
- 5.0.x
- 6.0.x
-
- # Run analyzers
- - name: Run Microsoft Security DevOps Analysis
- uses: microsoft/security-devops-action@preview
- id: msdo
-
- # Upload alerts to the Security tab
- - name: Upload alerts to Security tab
- uses: github/codeql-action/upload-sarif@v1
- with:
- sarif_file: ${{ steps.msdo.outputs.sarifFile }}
-
- # Upload alerts file as a workflow artifact
- - name: Upload alerts file as a workflow artifact
- uses: actions/upload-artifact@v3
- with:
- name: alerts
- path: ${{ steps.msdo.outputs.sarifFile }}
diff --git a/.github/workflows/official-build.yml b/.github/workflows/official-build.yml
new file mode 100644
index 00000000..5c82489a
--- /dev/null
+++ b/.github/workflows/official-build.yml
@@ -0,0 +1,49 @@
+name: security-devops-action Official Build
+
+on:
+ pull_request:
+ branches:
+ - release/vNext
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ permissions:
+ contents: write
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Extract branch name
+ shell: bash
+ run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
+ id: extract_branch
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v2
+ with:
+ node-version: '14'
+
+ - name: Configure npm to use GitHub Packages
+ run: echo "//npm.pkg.github.com/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Compile TypeScript
+ run: npm run build
+
+ - name: Commit compiled JavaScript
+ run: |
+ git config --global user.name 'github-actions[bot]'
+ git config --global user.email 'github-actions[bot]@users.noreply.github.com'
+ git add lib/.
+ git commit -m 'Official Build: Compile TypeScript to JavaScript'
+ git push --force origin HEAD:${{ steps.extract_branch.outputs.branch }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/on-push-verification.yml b/.github/workflows/on-push-verification.yml
index 918fd418..c45e79fb 100644
--- a/.github/workflows/on-push-verification.yml
+++ b/.github/workflows/on-push-verification.yml
@@ -1,32 +1,31 @@
# pull request action verification
-name: MSDO on-push-verification windows-latest
-on: push
+name: MSDO On Push Verification
+on:
+ push:
+ branches:
+ - '**'
+
+permissions:
+ id-token: write # This is required for federation to Defender for DevOps
+ security-events: write # This is required to upload SARIF files
jobs:
sample:
- name: Microsoft Security DevOps Analysis
+ name: MSDO on ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
- # MSDO runs on windows-latest.
- # ubuntu-latest and macos-latest supporting coming soon
- runs-on: windows-latest
+ strategy:
+ matrix:
+ os: [windows-latest, ubuntu-latest]
steps:
# Checkout your code repository to scan
- uses: actions/checkout@v3
- # Install dotnet, used by MSDO
- - uses: actions/setup-dotnet@v3
- with:
- dotnet-version: |
- 3.1.x
- 5.0.x
- 6.0.x
-
# Run analyzers
- - name: Run Microsoft Security DevOps Analysis
- uses: ./
+ - uses: ./
id: msdo
# Upload alerts to the Security tab
diff --git a/.github/workflows/sample-workflow-windows-latest.yml b/.github/workflows/sample-workflow-windows-latest.yml
deleted file mode 100644
index 37f9b68d..00000000
--- a/.github/workflows/sample-workflow-windows-latest.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: MSDO windows-latest
-on:
- push:
- branches:
- - main
-
-jobs:
- sample:
- name: Microsoft Security DevOps Analysis
-
- # MSDO runs on windows-latest.
- # ubuntu-latest and macos-latest supporting coming soon
- runs-on: windows-latest
-
- steps:
-
- # Checkout your code repository to scan
- - uses: actions/checkout@v3
-
- # Install dotnet, used by MSDO
- - uses: actions/setup-dotnet@v3
- with:
- dotnet-version: |
- 5.0.x
- 6.0.x
-
- # Run analyzers
- - name: Run Microsoft Security DevOps Analysis
- uses: microsoft/security-devops-action@preview
- id: msdo
-
- # Upload alerts to the Security tab
- - name: Upload alerts to Security tab
- uses: github/codeql-action/upload-sarif@v2
- with:
- sarif_file: ${{ steps.msdo.outputs.sarifFile }}
-
- # Upload alerts file as a workflow artifact
- - name: Upload alerts file as a workflow artifact
- uses: actions/upload-artifact@v3
- with:
- name: alerts
- path: ${{ steps.msdo.outputs.sarifFile }}
\ No newline at end of file
diff --git a/.github/workflows/sample-workflow-ubuntu-latest.yml b/.github/workflows/sample-workflow.yml
similarity index 60%
rename from .github/workflows/sample-workflow-ubuntu-latest.yml
rename to .github/workflows/sample-workflow.yml
index b82dfeb0..052df605 100644
--- a/.github/workflows/sample-workflow-ubuntu-latest.yml
+++ b/.github/workflows/sample-workflow.yml
@@ -1,33 +1,30 @@
-name: MSDO ubuntu-latest
+name: MSDO Sample Workflow
on:
push:
branches:
- main
+permissions:
+ id-token: write # This is required for federation to Defender for DevOps
+ security-events: write # This is required to upload SARIF files
+
jobs:
sample:
- name: Microsoft Security DevOps Analysis
+ name: MSDO on ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
- # MSDO runs on windows-latest.
- # ubuntu-latest and macos-latest supporting coming soon
- runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ os: [windows-latest, ubuntu-latest]
steps:
# Checkout your code repository to scan
- uses: actions/checkout@v3
- # Install dotnet, used by MSDO
- - uses: actions/setup-dotnet@v3
- with:
- dotnet-version: |
- 3.1.x
- 5.0.x
- 6.0.x
-
# Run analyzers
- name: Run Microsoft Security DevOps Analysis
- uses: microsoft/security-devops-action@preview
+ uses: microsoft/security-devops-action@v1
id: msdo
# Upload alerts to the Security tab
diff --git a/.gitignore b/.gitignore
index 3e759b75..fc6e625c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,7 @@ bld/
[Bb]in/
[Oo]bj/
[Ll]og/
+test/**/*.js
# Visual Studio 2015/2017 cache/options directory
.vs/
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 00000000..93140e23
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,2 @@
+registry=https://registry.npmjs.org/
+@microsoft:registry=https://npm.pkg.github.com/
\ No newline at end of file
diff --git a/README.md b/README.md
index 3e714914..1ec09319 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,7 @@ Microsoft Security DevOps (MSDO) is a command line application which integrates
Run locally. Run remotely.
-
-
+
This action runs the [Microsoft Security DevOps CLI](https://aka.ms/msdo-nuget) for security analysis:
@@ -17,10 +16,6 @@ This action runs the [Microsoft Security DevOps CLI](https://aka.ms/msdo-nuget)
* Normalized processing of results into the SARIF format
* Build breaks and more
-# Limitations
-
-The Microsoft Security DevOps action is currently in beta and runs on the `windows-latest` queue, as well as Windows self hosted agents. `ubuntu-latest` support coming soon.
-
# Usage
See [action.yml](action.yml)
@@ -30,20 +25,16 @@ See [action.yml](action.yml)
Run **Microsoft Security DevOps (MSDO)** with the default policy and recommended tools.
```yaml
+permissions:
+ security-events: write
+
steps:
+
- uses: actions/checkout@v3
-- uses: actions/setup-dotnet@v3
- with:
- dotnet-version: |
- 5.0.x
- 6.0.x
+
- name: Run Microsoft Security DevOps
- uses: microsoft/security-devops-action@preview
+ uses: microsoft/security-devops-action@latest
id: msdo
-- name: Upload results to Security tab
- uses: github/codeql-action/upload-sarif@v2
- with:
- sarif_file: ${{ steps.msdo.outputs.sarifFile }}
```
## Upload Results to the Security tab
@@ -57,16 +48,30 @@ To upload results to the Security tab of your repo, run the `github/codeql-actio
sarif_file: ${{ steps.msdo.outputs.sarifFile }}
```
-# Open Source Tools
+## Advanced
+
+To only run specific analyzers, use the `tools` command. This command is a comma-seperated list of tools to run. For example, to run only the `container-mapping` tool, configure this action as follows:
+
+```yaml
+- uses: microsoft/security-devops-action@latest
+ id: msdo
+ with:
+ tools: container-mapping
+```
+
+# Tools
| Name | Language | License |
| --- | --- | --- |
+| [AntiMalware](https://www.microsoft.com/en-us/windows/comprehensive-security) | code, artifacts | - |
| [Bandit](https://github.com/PyCQA/bandit) | python | [Apache License 2.0](https://github.com/PyCQA/bandit/blob/master/LICENSE) |
| [BinSkim](https://github.com/Microsoft/binskim) | binary - Windows, ELF | [MIT License](https://github.com/microsoft/binskim/blob/main/LICENSE) |
+| [Checkov](https://github.com/bridgecrewio/checkov) | Infrastructure-as-code (IaC), Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, or OpenTofu | [Apache License 2.0](https://github.com/bridgecrewio/checkov/blob/main/LICENSE) |
| [ESlint](https://github.com/eslint/eslint) | JavaScript | [MIT License](https://github.com/eslint/eslint/blob/main/LICENSE) |
| [Template Analyzer](https://github.com/Azure/template-analyzer) | Infrastructure-as-code (IaC), ARM templates, Bicep files | [MIT License](https://github.com/Azure/template-analyzer/blob/main/LICENSE.txt) |
| [Terrascan](https://github.com/accurics/terrascan) | Infrastructure-as-code (IaC), Terraform (HCL2), Kubernetes (JSON/YAML), Helm v3, Kustomize, Dockerfiles, Cloudformation | [Apache License 2.0](https://github.com/accurics/terrascan/blob/master/LICENSE) |
| [Trivy](https://github.com/aquasecurity/trivy) | container images, file systems, and git repositories | [Apache License 2.0](https://github.com/aquasecurity/trivy/blob/main/LICENSE) |
+| [container-mapping](https://learn.microsoft.com/en-us/azure/defender-for-cloud/container-image-mapping) | container images and registries (only available for DevOps security enabled CSPM plans) | [MIT License](https://github.com/microsoft/security-devops-action/blob/main/LICENSE) |
# More Information
diff --git a/action.yml b/action.yml
index ed664cd3..9bf83346 100644
--- a/action.yml
+++ b/action.yml
@@ -5,6 +5,8 @@ branding:
icon: 'shield'
color: 'black'
inputs:
+ command:
+ description: Deprecated, do not use.
config:
description: A file path to a .gdnconfig file.
policy:
@@ -15,10 +17,16 @@ inputs:
languages:
description: A comma separated list of languages to analyze. Example javascript, typescript. Defaults to all.
tools:
- description: A comma separated list of analyzer tools to run. Example bandit, binskim, eslint, template-analyzer, terrascan, trivy.
+ description: A comma separated list of analyzer to run. Example bandit, binskim, container-mapping, eslint, templateanalyzer, terrascan, trivy.
+ includeTools:
+ description: Deprecated
+ existingFilename:
+ description: A SARIF filename that already exists. If it does, then the normal run will not take place and the file will instead be uploaded to MSDO backend.
outputs:
sarifFile:
description: A file path to a SARIF results file.
runs:
- using: 'node16'
- main: 'lib/action.js'
\ No newline at end of file
+ using: 'node20'
+ main: 'lib/main.js'
+ pre: 'lib/pre.js'
+ post: 'lib/post.js'
diff --git a/build.proj b/build.proj
deleted file mode 100644
index 8d7bedba..00000000
--- a/build.proj
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
- $(MSBuildThisFileDirectory)
- $(RepoDirectory)/src
- $(RepoDirectory)/lib
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 00000000..d96f3449
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,111 @@
+const { execSync } = require('child_process');
+const fs = require('fs');
+const gulp = require('gulp');
+const path = require('path');
+const process = require('process');
+const ts = require('gulp-typescript');
+
+const tsProject = ts.createProject('tsconfig.json');
+const testTsProject = ts.createProject(path.join(__dirname, 'test', 'tsconfig.json'));
+
+function clean(cb) {
+ import('del')
+ .then((del) => del.deleteSync(['lib']))
+ .then(() => cb());
+}
+
+function sideload(cb) {
+ if (process.env.SECURITY_DEVOPS_ACTION_BUILD_SIDELOAD === 'true') {
+ console.log('Sideload mode enabled. Linking @microsoft/security-devops-actions-toolkit');
+
+ const toolkitSrcDir = path.resolve(path.join(__dirname, '..', 'security-devops-actions-toolkit'));
+
+ if (!fs.existsSync(toolkitSrcDir)) {
+ throw new Error(`Could not the toolkit repo directory: ${toolkitSrcDir}. Please clone the repo to a parallel directory to this extension repo. Repo homepage: https://github.com/microsoft/security-devops-actions-toolkit`);
+ }
+
+ const toolkitNodeModulesDir = path.join(__dirname, 'node_modules', '@microsoft', 'security-devops-actions-toolkit');
+
+ if (!fs.existsSync(toolkitNodeModulesDir)) {
+ throw new Error(`The node_modules directory for the toolkit does not exist. please run npm install before continuing: ${toolkitNodeModulesDir}`);
+ }
+
+ if (process.env.SECURITY_DEVOPS_ACTION_BUILD_SIDELOAD_BUILD !== 'false') {
+ console.log('Building sideload project: npm run build');
+ const output = execSync('npm run build', { cwd: toolkitSrcDir, encoding: 'utf8' });
+ console.log(output);
+ }
+
+ console.log(`Clearing the existing toolkit directory: ${toolkitNodeModulesDir}`);
+ clearDir(toolkitNodeModulesDir);
+
+ const toolkitDistDir = path.join(toolkitSrcDir, 'dist');
+
+ console.log("Copying sideload build...");
+ copyFiles(toolkitDistDir, toolkitNodeModulesDir);
+
+ fs.writeFileSync(
+ path.join(toolkitNodeModulesDir, '.sideloaded'),
+ 'This package was built and sideloaded by the security-devops-action build process. Do not commit this file to source control.');
+ }
+ cb();
+}
+
+function compile(cb) {
+ tsProject
+ .src()
+ .pipe(tsProject()).js
+ .pipe(gulp.dest('lib'))
+ .on('end', () => cb());
+}
+
+function compileTests(cb) {
+ testTsProject
+ .src()
+ .pipe(testTsProject()).js
+ .pipe(gulp.dest(path.join(__dirname, 'test')))
+ .on('end', () => cb());
+}
+
+function clearDir(dirPath) {
+ // Get a list of files and subdirectories in the directory
+ const items = fs.readdirSync(dirPath);
+
+ for (const item of items) {
+ const itemPath = path.join(dirPath, item);
+
+ if (fs.statSync(itemPath).isFile()) {
+ fs.unlinkSync(itemPath);
+ } else {
+ clearDir(itemPath);
+ }
+ }
+
+ // Finally, remove the empty directory
+ fs.rmdirSync(dirPath);
+}
+
+function copyFiles(srcDir, destDir) {
+ if (!fs.existsSync(destDir)) {
+ fs.mkdirSync(destDir, { recursive: true });
+ }
+
+ fs.readdirSync(srcDir).forEach((file) => {
+ const srcFilePath = path.join(srcDir, file);
+ const destFilePath = path.join(destDir, file);
+
+ if (fs.statSync(srcFilePath).isDirectory()) {
+ copyFiles(srcFilePath, destFilePath);
+ } else {
+ fs.copyFileSync(srcFilePath, destFilePath);
+ console.log(`Copied ${srcFilePath} to ${destFilePath}`);
+ }
+ });
+ }
+
+exports.clean = clean;
+exports.compile = compile;
+exports.compileTests = compileTests;
+exports.build = gulp.series(clean, sideload, compile);
+exports.buildTests = gulp.series(exports.build, compileTests);
+exports.default = exports.build;
\ No newline at end of file
diff --git a/lib/action.js b/lib/action.js
deleted file mode 100644
index bd3b72ed..00000000
--- a/lib/action.js
+++ /dev/null
@@ -1,85 +0,0 @@
-"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 });
-const core = __importStar(require("@actions/core"));
-const microsoft_security_devops_actions_toolkit_1 = require("microsoft-security-devops-actions-toolkit");
-function run() {
- return __awaiter(this, void 0, void 0, function* () {
- let client = new microsoft_security_devops_actions_toolkit_1.MsdoClient();
- let args = ['run'];
- let config = core.getInput('config');
- if (!client.isNullOrWhiteSpace(config)) {
- args.push('-c');
- args.push(config);
- }
- let policy = core.getInput('policy');
- if (client.isNullOrWhiteSpace(policy)) {
- policy = "GitHub";
- }
- args.push('-p');
- args.push(policy);
- let categoriesString = core.getInput('categories');
- if (!client.isNullOrWhiteSpace(categoriesString)) {
- args.push('--categories');
- let categories = categoriesString.split(',');
- for (let i = 0; i < categories.length; i++) {
- let category = categories[i];
- if (!client.isNullOrWhiteSpace(category)) {
- args.push(category.trim());
- }
- }
- }
- let languagesString = core.getInput('languages');
- if (!client.isNullOrWhiteSpace(languagesString)) {
- let languages = languagesString.split(',');
- args.push('--languages');
- for (let i = 0; i < languages.length; i++) {
- let language = languages[i];
- if (!client.isNullOrWhiteSpace(language)) {
- args.push(language.trim());
- }
- }
- }
- let toolsString = core.getInput('tools');
- if (!client.isNullOrWhiteSpace(toolsString)) {
- let tools = toolsString.split(',');
- args.push('--tool');
- for (let i = 0; i < tools.length; i++) {
- let tool = tools[i];
- if (!client.isNullOrWhiteSpace(tool)) {
- args.push(tool.trim());
- }
- }
- }
- args.push('--github');
- yield client.run(args, 'microsoft/security-devops-action');
- });
-}
-run().catch((error) => core.setFailed(error));
diff --git a/lib/container-mapping.js b/lib/container-mapping.js
new file mode 100644
index 00000000..f0908b59
--- /dev/null
+++ b/lib/container-mapping.js
@@ -0,0 +1,268 @@
+"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.ContainerMapping = void 0;
+const https = __importStar(require("https"));
+const core = __importStar(require("@actions/core"));
+const exec = __importStar(require("@actions/exec"));
+const os = __importStar(require("os"));
+const sendReportRetryCount = 1;
+const GetScanContextURL = "https://dfdinfra-afdendpoint-prod-d5fqbucbg7fue0cf.z01.azurefd.net/github/v1/auth-push/GetScanContext?context=authOnly";
+const ContainerMappingURL = "https://dfdinfra-afdendpoint-prod-d5fqbucbg7fue0cf.z01.azurefd.net/github/v1/container-mappings";
+class ContainerMapping {
+ constructor() {
+ this.succeedOnError = true;
+ }
+ runPreJob() {
+ try {
+ core.info("::group::Microsoft Defender for DevOps container mapping pre-job - https://go.microsoft.com/fwlink/?linkid=2231419");
+ this._runPreJob();
+ }
+ catch (error) {
+ core.info("Error in Container Mapping pre-job: " + error);
+ }
+ finally {
+ core.info("::endgroup::");
+ }
+ }
+ _runPreJob() {
+ const startTime = new Date().toISOString();
+ core.saveState('PreJobStartTime', startTime);
+ core.info(`PreJobStartTime: ${startTime}`);
+ }
+ runMain() {
+ return __awaiter(this, void 0, void 0, function* () {
+ });
+ }
+ runPostJob() {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ core.info("::group::Microsoft Defender for DevOps container mapping post-job - https://go.microsoft.com/fwlink/?linkid=2231419");
+ yield this._runPostJob();
+ }
+ catch (error) {
+ core.info("Error in Container Mapping post-job: " + error);
+ }
+ finally {
+ core.info("::endgroup::");
+ }
+ });
+ }
+ _runPostJob() {
+ return __awaiter(this, void 0, void 0, function* () {
+ let startTime = core.getState('PreJobStartTime');
+ if (startTime.length <= 0) {
+ startTime = new Date(new Date().getTime() - 10000).toISOString();
+ core.debug(`PreJobStartTime not defined, using now-10secs`);
+ }
+ core.info(`PreJobStartTime: ${startTime}`);
+ let reportData = {
+ dockerVersion: "",
+ dockerEvents: [],
+ dockerImages: []
+ };
+ let bearerToken = yield core.getIDToken()
+ .then((token) => { return token; })
+ .catch((error) => {
+ throw new Error("Unable to get token: " + error);
+ });
+ if (!bearerToken) {
+ throw new Error("Empty OIDC token received");
+ }
+ var callerIsOnboarded = yield this.checkCallerIsCustomer(bearerToken, sendReportRetryCount);
+ if (!callerIsOnboarded) {
+ core.info("Client is not onboarded to Defender for DevOps. Skipping container mapping workload.");
+ return;
+ }
+ core.info("Client is onboarded for container mapping.");
+ let dockerVersionOutput = yield exec.getExecOutput('docker --version');
+ if (dockerVersionOutput.exitCode != 0) {
+ core.info(`Unable to get docker version: ${dockerVersionOutput}`);
+ core.info(`Skipping container mapping since docker not found/available.`);
+ return;
+ }
+ reportData.dockerVersion = dockerVersionOutput.stdout.trim();
+ yield this.execCommand(`docker events --since ${startTime} --until ${new Date().toISOString()} --filter event=push --filter type=image --format ID={{.ID}}`, reportData.dockerEvents)
+ .catch((error) => {
+ throw new Error("Unable to get docker events: " + error);
+ });
+ yield this.execCommand(`docker images --format CreatedAt={{.CreatedAt}}::Repo={{.Repository}}::Tag={{.Tag}}::Digest={{.Digest}}`, reportData.dockerImages)
+ .catch((error) => {
+ throw new Error("Unable to get docker images: " + error);
+ });
+ core.debug("Finished data collection, starting API calls.");
+ var reportSent = yield this.sendReport(JSON.stringify(reportData), bearerToken, sendReportRetryCount);
+ if (!reportSent) {
+ throw new Error("Unable to send report to backend service");
+ }
+ ;
+ core.info("Container mapping data sent successfully.");
+ });
+ }
+ execCommand(command, listener) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return exec.getExecOutput(command)
+ .then((result) => {
+ if (result.exitCode != 0) {
+ return Promise.reject(`Command execution failed: ${result}`);
+ }
+ result.stdout.trim().split(os.EOL).forEach(element => {
+ if (element.length > 0) {
+ listener.push(element);
+ }
+ });
+ });
+ });
+ }
+ sendReport(data, bearerToken, retryCount = 0) {
+ return __awaiter(this, void 0, void 0, function* () {
+ core.debug(`attempting to send report: ${data}`);
+ return yield this._sendReport(data, bearerToken)
+ .then(() => {
+ return true;
+ })
+ .catch((error) => __awaiter(this, void 0, void 0, function* () {
+ if (retryCount == 0) {
+ return false;
+ }
+ else {
+ core.info(`Retrying API call due to error: ${error}.\nRetry count: ${retryCount}`);
+ retryCount--;
+ return yield this.sendReport(data, bearerToken, retryCount);
+ }
+ }));
+ });
+ }
+ _sendReport(data, bearerToken) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ let apiTime = new Date().getMilliseconds();
+ let options = {
+ method: 'POST',
+ timeout: 2500,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer ' + bearerToken,
+ 'Content-Length': data.length
+ }
+ };
+ core.debug(`${options['method'].toUpperCase()} ${ContainerMappingURL}`);
+ const req = https.request(ContainerMappingURL, options, (res) => {
+ let resData = '';
+ res.on('data', (chunk) => {
+ resData += chunk.toString();
+ });
+ res.on('end', () => {
+ core.debug('API calls finished. Time taken: ' + (new Date().getMilliseconds() - apiTime) + "ms");
+ core.debug(`Status code: ${res.statusCode} ${res.statusMessage}`);
+ core.debug('Response headers: ' + JSON.stringify(res.headers));
+ if (resData.length > 0) {
+ core.debug('Response: ' + resData);
+ }
+ if (res.statusCode < 200 || res.statusCode >= 300) {
+ return reject(`Received Failed Status code when calling url: ${res.statusCode} ${resData}`);
+ }
+ resolve();
+ });
+ });
+ req.on('error', (error) => {
+ reject(new Error(`Error calling url: ${error}`));
+ });
+ req.write(data);
+ req.end();
+ }));
+ });
+ }
+ checkCallerIsCustomer(bearerToken, retryCount = 0) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield this._checkCallerIsCustomer(bearerToken)
+ .then((statusCode) => __awaiter(this, void 0, void 0, function* () {
+ if (statusCode == 200) {
+ return true;
+ }
+ else if (statusCode == 403) {
+ return false;
+ }
+ else {
+ core.debug(`Unexpected status code: ${statusCode}`);
+ return yield this.retryCall(bearerToken, retryCount);
+ }
+ }))
+ .catch((error) => __awaiter(this, void 0, void 0, function* () {
+ core.info(`Unexpected error: ${error}.`);
+ return yield this.retryCall(bearerToken, retryCount);
+ }));
+ });
+ }
+ retryCall(bearerToken, retryCount) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (retryCount == 0) {
+ core.info(`All retries failed.`);
+ return false;
+ }
+ else {
+ core.info(`Retrying checkCallerIsCustomer.\nRetry count: ${retryCount}`);
+ retryCount--;
+ return yield this.checkCallerIsCustomer(bearerToken, retryCount);
+ }
+ });
+ }
+ _checkCallerIsCustomer(bearerToken) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ let options = {
+ method: 'GET',
+ timeout: 2500,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer ' + bearerToken,
+ }
+ };
+ core.debug(`${options['method'].toUpperCase()} ${GetScanContextURL}`);
+ const req = https.request(GetScanContextURL, options, (res) => {
+ res.on('end', () => {
+ resolve(res.statusCode);
+ });
+ res.on('data', function (d) {
+ });
+ });
+ req.on('error', (error) => {
+ reject(new Error(`Error calling url: ${error}`));
+ });
+ req.end();
+ }));
+ });
+ }
+}
+exports.ContainerMapping = ContainerMapping;
diff --git a/lib/main.js b/lib/main.js
new file mode 100644
index 00000000..f857f586
--- /dev/null
+++ b/lib/main.js
@@ -0,0 +1,62 @@
+"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 });
+const core = __importStar(require("@actions/core"));
+const msdo_1 = require("./msdo");
+const msdo_interface_1 = require("./msdo-interface");
+const common = __importStar(require("@microsoft/security-devops-actions-toolkit/msdo-common"));
+const msdo_helpers_1 = require("./msdo-helpers");
+function runMain() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (shouldRunMain()) {
+ yield (0, msdo_interface_1.getExecutor)(msdo_1.MicrosoftSecurityDevOps).runMain();
+ }
+ else {
+ console.log("Scanning is not enabled. Skipping...");
+ }
+ });
+}
+runMain().catch(error => {
+ core.setFailed(error);
+});
+function shouldRunMain() {
+ let toolsString = core.getInput('tools');
+ if (!common.isNullOrWhiteSpace(toolsString)) {
+ let tools = toolsString.split(',');
+ if (tools.length == 1 && tools[0].trim() == msdo_helpers_1.Tools.ContainerMapping) {
+ return false;
+ }
+ }
+ return true;
+}
diff --git a/lib/msdo-helpers.js b/lib/msdo-helpers.js
new file mode 100644
index 00000000..3a060a58
--- /dev/null
+++ b/lib/msdo-helpers.js
@@ -0,0 +1,56 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.writeToOutStream = exports.getEncodedContent = exports.encode = exports.Constants = exports.Tools = exports.RunnerType = exports.Inputs = void 0;
+const os_1 = __importDefault(require("os"));
+var Inputs;
+(function (Inputs) {
+ Inputs["Command"] = "command";
+ Inputs["Config"] = "config";
+ Inputs["Policy"] = "policy";
+ Inputs["Categories"] = "categories";
+ Inputs["Languages"] = "languages";
+ Inputs["Tools"] = "tools";
+ Inputs["IncludeTools"] = "includeTools";
+ Inputs["ExistingFilename"] = "existingFilename";
+})(Inputs || (exports.Inputs = Inputs = {}));
+var RunnerType;
+(function (RunnerType) {
+ RunnerType["Main"] = "main";
+ RunnerType["Pre"] = "pre";
+ RunnerType["Post"] = "post";
+})(RunnerType || (exports.RunnerType = RunnerType = {}));
+var Tools;
+(function (Tools) {
+ Tools["Bandit"] = "bandit";
+ Tools["Binskim"] = "binskim";
+ Tools["Checkov"] = "checkov";
+ Tools["ContainerMapping"] = "container-mapping";
+ Tools["ESLint"] = "eslint";
+ Tools["TemplateAnalyzer"] = "templateanalyzer";
+ Tools["Terrascan"] = "terrascan";
+ Tools["Trivy"] = "trivy";
+})(Tools || (exports.Tools = Tools = {}));
+var Constants;
+(function (Constants) {
+ Constants["Unknown"] = "unknown";
+ Constants["PreJobStartTime"] = "PREJOBSTARTTIME";
+})(Constants || (exports.Constants = Constants = {}));
+const encode = (str) => Buffer.from(str, 'binary').toString('base64');
+exports.encode = encode;
+function getEncodedContent(dockerVersion, dockerEvents, dockerImages) {
+ let data = [];
+ data.push("DockerVersion: " + dockerVersion);
+ data.push("DockerEvents:");
+ data.push(dockerEvents);
+ data.push("DockerImages:");
+ data.push(dockerImages);
+ return (0, exports.encode)(data.join(os_1.default.EOL));
+}
+exports.getEncodedContent = getEncodedContent;
+function writeToOutStream(data, outStream = process.stdout) {
+ outStream.write(data.trim() + os_1.default.EOL);
+}
+exports.writeToOutStream = writeToOutStream;
diff --git a/lib/msdo-interface.js b/lib/msdo-interface.js
new file mode 100644
index 00000000..ed538cfb
--- /dev/null
+++ b/lib/msdo-interface.js
@@ -0,0 +1,7 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getExecutor = void 0;
+function getExecutor(runner) {
+ return new runner();
+}
+exports.getExecutor = getExecutor;
diff --git a/lib/msdo.js b/lib/msdo.js
new file mode 100644
index 00000000..e15b453e
--- /dev/null
+++ b/lib/msdo.js
@@ -0,0 +1,119 @@
+"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.MicrosoftSecurityDevOps = void 0;
+const core = __importStar(require("@actions/core"));
+const msdo_helpers_1 = require("./msdo-helpers");
+const client = __importStar(require("@microsoft/security-devops-actions-toolkit/msdo-client"));
+const common = __importStar(require("@microsoft/security-devops-actions-toolkit/msdo-common"));
+class MicrosoftSecurityDevOps {
+ constructor() {
+ this.succeedOnError = false;
+ }
+ runPreJob() {
+ return __awaiter(this, void 0, void 0, function* () {
+ });
+ }
+ runPostJob() {
+ return __awaiter(this, void 0, void 0, function* () {
+ });
+ }
+ runMain() {
+ return __awaiter(this, void 0, void 0, function* () {
+ core.debug('MicrosoftSecurityDevOps.runMain - Running MSDO...');
+ let args = undefined;
+ let existingFilename = core.getInput('existingFilename');
+ if (!common.isNullOrWhiteSpace(existingFilename)) {
+ args = ['upload', '--file', existingFilename];
+ }
+ else {
+ args = ['run'];
+ let config = core.getInput('config');
+ if (!common.isNullOrWhiteSpace(config)) {
+ args.push('-c');
+ args.push(config);
+ }
+ let policy = core.getInput('policy');
+ if (common.isNullOrWhiteSpace(policy)) {
+ policy = "GitHub";
+ }
+ args.push('-p');
+ args.push(policy);
+ let categoriesString = core.getInput('categories');
+ if (!common.isNullOrWhiteSpace(categoriesString)) {
+ args.push('--categories');
+ let categories = categoriesString.split(',');
+ for (let i = 0; i < categories.length; i++) {
+ let category = categories[i];
+ if (!common.isNullOrWhiteSpace(category)) {
+ args.push(category.trim());
+ }
+ }
+ }
+ let languagesString = core.getInput('languages');
+ if (!common.isNullOrWhiteSpace(languagesString)) {
+ args.push('--languages');
+ let languages = languagesString.split(',');
+ for (let i = 0; i < languages.length; i++) {
+ let language = languages[i];
+ if (!common.isNullOrWhiteSpace(language)) {
+ args.push(language.trim());
+ }
+ }
+ }
+ let toolsString = core.getInput('tools');
+ let includedTools = [];
+ if (!common.isNullOrWhiteSpace(toolsString)) {
+ let tools = toolsString.split(',');
+ for (let i = 0; i < tools.length; i++) {
+ let tool = tools[i];
+ let toolTrimmed = tool.trim();
+ if (!common.isNullOrWhiteSpace(tool)
+ && tool != msdo_helpers_1.Tools.ContainerMapping
+ && includedTools.indexOf(toolTrimmed) == -1) {
+ if (includedTools.length == 0) {
+ args.push('--tool');
+ }
+ args.push(toolTrimmed);
+ includedTools.push(toolTrimmed);
+ }
+ }
+ }
+ args.push('--github');
+ }
+ yield client.run(args, 'microsoft/security-devops-action');
+ });
+ }
+}
+exports.MicrosoftSecurityDevOps = MicrosoftSecurityDevOps;
diff --git a/lib/post.js b/lib/post.js
new file mode 100644
index 00000000..ca4f9b68
--- /dev/null
+++ b/lib/post.js
@@ -0,0 +1,45 @@
+"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 });
+const core = __importStar(require("@actions/core"));
+const container_mapping_1 = require("./container-mapping");
+const msdo_interface_1 = require("./msdo-interface");
+function runPost() {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield (0, msdo_interface_1.getExecutor)(container_mapping_1.ContainerMapping).runPostJob();
+ });
+}
+runPost().catch((error) => {
+ core.debug(error);
+});
diff --git a/lib/pre.js b/lib/pre.js
new file mode 100644
index 00000000..1305f979
--- /dev/null
+++ b/lib/pre.js
@@ -0,0 +1,45 @@
+"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 });
+const core = __importStar(require("@actions/core"));
+const container_mapping_1 = require("./container-mapping");
+const msdo_interface_1 = require("./msdo-interface");
+function runPre() {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield (0, msdo_interface_1.getExecutor)(container_mapping_1.ContainerMapping).runPreJob();
+ });
+}
+runPre().catch((error) => {
+ core.debug(error);
+});
diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid
index c3ec0035..0c2d4696 100644
--- a/node_modules/.bin/uuid
+++ b/node_modules/.bin/uuid
@@ -2,7 +2,11 @@
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
- *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+ *CYGWIN*|*MINGW*|*MSYS*)
+ if command -v cygpath > /dev/null 2>&1; then
+ basedir=`cygpath -w "$basedir"`
+ fi
+ ;;
esac
if [ -x "$basedir/node" ]; then
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
index da12bcb8..3d2207b8 100644
--- a/node_modules/.package-lock.json
+++ b/node_modules/.package-lock.json
@@ -1,13 +1,11 @@
{
"name": "microsoft-security-devops-action",
- "version": "1.6.0",
- "lockfileVersion": 2,
+ "version": "1.12.0",
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"node_modules/@actions/core": {
"version": "1.10.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/core/-/core-1.10.0.tgz",
- "integrity": "sha1-RFUcPHEWOUmi8G6U2cohV6DPrE8=",
"license": "MIT",
"dependencies": {
"@actions/http-client": "^2.0.1",
@@ -16,8 +14,6 @@
},
"node_modules/@actions/exec": {
"version": "1.1.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/exec/-/exec-1.1.1.tgz",
- "integrity": "sha1-LkPyjFQCJTcXKBmnz4hshEIhphE=",
"license": "MIT",
"dependencies": {
"@actions/io": "^1.0.1"
@@ -25,8 +21,6 @@
},
"node_modules/@actions/http-client": {
"version": "2.0.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/http-client/-/http-client-2.0.1.tgz",
- "integrity": "sha1-hz9MqY/jL2g5RipvBGMyZ3Mi+Zw=",
"license": "MIT",
"dependencies": {
"tunnel": "^0.0.6"
@@ -34,37 +28,5422 @@
},
"node_modules/@actions/io": {
"version": "1.0.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@actions/io/-/io-1.0.2.tgz",
- "integrity": "sha1-L2FLbmnOFNGRGARR6zjmV2puayc=",
"license": "MIT"
},
- "node_modules/microsoft-security-devops-actions-toolkit": {
+ "node_modules/@microsoft/security-devops-actions-toolkit": {
+ "version": "1.11.0",
+ "resolved": "https://npm.pkg.github.com/download/@microsoft/security-devops-actions-toolkit/1.11.0/04fef883382f5a7c9b9ac2015dcc419009e2a858",
+ "integrity": "sha512-dcuMhkEa8uqVpsT05E/nSMfBRtKzEhiQ/KFqEbTd5sAs7ChVP+Ke+ZMEgw4gP4LdA2cO7mH7VTfJ8xxlmwEwUw==",
+ "license": "MIT",
+ "dependencies": {
+ "@actions/core": "1.10.0",
+ "@actions/exec": "1.1.1",
+ "adm-zip": "0.5.10",
+ "decompress-response": "^8.1.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "1.8.6",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/formatio": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "samsam": "1.3.0"
+ }
+ },
+ "node_modules/@sinonjs/samsam": {
+ "version": "3.3.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^1.3.0",
+ "array-from": "^2.1.1",
+ "lodash": "^4.17.15"
+ }
+ },
+ "node_modules/@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "dev": true,
+ "license": "(Unlicense OR Apache-2.0)"
+ },
+ "node_modules/@types/mocha": {
+ "version": "2.2.48",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.8.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/q": {
+ "version": "1.5.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/sinon": {
+ "version": "4.3.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/adm-zip": {
+ "version": "0.5.10",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clean-stack": "^4.0.0",
+ "indent-string": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-wrap": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ansi-gray": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-wrap": "0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/ansi-wrap": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "node_modules/anymatch/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/append-buffer": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-equal": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/archy": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/arr-diff": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-filter": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-flatten": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-map": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-union": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-each": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-from": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/array-initial": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-initial/node_modules/is-number": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-last": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-last/node_modules/is-number": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-slice": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-sort": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-unique": {
+ "version": "0.3.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/assign-symbols": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/async-done": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/async-each": {
+ "version": "1.0.6",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/async-settle": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async-done": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/atob": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "(MIT OR Apache-2.0)",
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/bach": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-filter": "^1.1.1",
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "array-each": "^1.0.0",
+ "array-initial": "^1.0.0",
+ "array-last": "^1.1.1",
+ "async-done": "^1.2.2",
+ "async-settle": "^1.0.0",
+ "now-and-later": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/base": {
+ "version": "0.11.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "1.13.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "2.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/buffer-equal": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cache-base": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "2.1.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ },
+ "optionalDependencies": {
+ "fsevents": "^1.2.7"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils": {
+ "version": "0.3.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clone-buffer": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/clone-stats": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cloneable-readable": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ }
+ },
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/collection-map": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-map": "^2.0.2",
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/collection-visit": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/copy-descriptor": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/copy-props": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "each-props": "^1.3.2",
+ "is-plain-object": "^5.0.0"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "8.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-response": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-compare": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^5.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/default-resolution": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-property": {
+ "version": "0.2.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/del": {
+ "version": "7.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "globby": "^13.1.2",
+ "graceful-fs": "^4.2.10",
+ "is-glob": "^4.0.3",
+ "is-path-cwd": "^3.0.0",
+ "is-path-inside": "^4.0.0",
+ "p-map": "^5.5.0",
+ "rimraf": "^3.0.2",
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/detect-file": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/diff": {
+ "version": "3.5.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/duplexify": {
+ "version": "3.7.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/each-props": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
+ }
+ },
+ "node_modules/each-props/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es5-ext": {
+ "version": "0.10.62",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "ISC",
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "node_modules/es6-weak-map": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/expand-brackets": {
+ "version": "2.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-tilde": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "type": "^2.7.2"
+ }
+ },
+ "node_modules/ext/node_modules/type": {
+ "version": "2.7.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fancy-log": {
+ "version": "1.3.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.1",
+ "dev": true,
+ "license": "MIT",
+ "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-levenshtein": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/findup-sync/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fined": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fined/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/flagged-respawn": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flush-write-stream": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/for-own": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "for-in": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fragment-cache": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "map-cache": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fs-mkdirp-stream": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fs-mkdirp-stream/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/get-caller-file": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-value": {
+ "version": "2.0.6",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "dev": true,
+ "license": "ISC",
+ "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/glob-parent": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob-stream": {
+ "version": "6.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/glob-stream/node_modules/glob-parent": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "node_modules/glob-stream/node_modules/is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob-watcher": {
+ "version": "5.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-done": "^1.2.0",
+ "chokidar": "^2.0.0",
+ "is-negated-glob": "^1.0.0",
+ "just-debounce": "^1.0.0",
+ "normalize-path": "^3.0.0",
+ "object.defaults": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/globby": {
+ "version": "13.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.3.0",
+ "ignore": "^5.2.4",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glogg": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sparkles": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/gulp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
+ "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
+ "vinyl-fs": "^3.0.0"
+ },
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulp-cli": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "color-support": "^1.1.3",
+ "concat-stream": "^1.6.0",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.4.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.2.0",
+ "yargs": "^7.1.0"
+ },
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulp-shell": {
+ "version": "0.8.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^3.0.0",
+ "fancy-log": "^1.3.3",
+ "lodash.template": "^4.5.0",
+ "plugin-error": "^1.0.1",
+ "through2": "^3.0.1",
+ "tslib": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/gulp-typescript": {
+ "version": "6.0.0-alpha.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "plugin-error": "^1.0.1",
+ "source-map": "^0.7.3",
+ "through2": "^3.0.1",
+ "vinyl": "^2.2.0",
+ "vinyl-fs": "^3.0.3"
+ },
+ "engines": {
+ "node": ">= 8"
+ },
+ "peerDependencies": {
+ "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev "
+ }
+ },
+ "node_modules/gulp-typescript/node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/gulplog": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glogg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-value": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/kind-of": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/homedir-polyfill": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parse-passwd": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/invert-kv": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-absolute": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-binary-path": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-negated-glob": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-path-cwd": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-relative": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-unc-path": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-unc-path": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "unc-path-regex": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-valid-glob": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-windows": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/just-debounce": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/just-extend": {
+ "version": "4.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/kind-of": {
+ "version": "5.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/last-run": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "default-resolution": "^2.0.0",
+ "es6-weak-map": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lcid": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "invert-kv": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lead": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flush-write-stream": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/liftoff": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "findup-sync": "^3.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/liftoff/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/load-json-file": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash._reinterpolate": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.template": {
+ "version": "4.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "node_modules/lodash.templatesettings": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "dev": true,
+ "license": "MIT",
+ "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/lolex": {
+ "version": "2.7.5",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/make-iterator": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/make-iterator/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-cache": {
+ "version": "0.2.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-visit": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/findup-sync": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/braces": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/micromatch/node_modules/fill-range": {
+ "version": "7.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/micromatch/node_modules/is-number": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/micromatch/node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "4.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mixin-deep": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mocha": {
+ "version": "10.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mochajs"
+ }
+ },
+ "node_modules/mocha/node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/anymatch": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/mocha/node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/braces": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/chokidar": {
+ "version": "3.5.3",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "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/mocha/node_modules/cliui": {
+ "version": "7.0.4",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/debug": {
+ "version": "4.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/mocha/node_modules/debug/node_modules/ms": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mocha/node_modules/diff": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/mocha/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/fill-range": {
+ "version": "7.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/find-up": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "7.2.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/is-number": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/ms": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mocha/node_modules/path-exists": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/readdirp": {
+ "version": "3.6.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/mocha/node_modules/string-width": {
+ "version": "4.2.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "8.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/mocha/node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/mocha/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "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/mocha/node_modules/y18n": {
+ "version": "5.0.8",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs": {
+ "version": "16.2.0",
+ "dev": true,
+ "license": "MIT",
+ "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/mocha/node_modules/yargs-parser": {
+ "version": "20.2.4",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mute-stdout": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.3",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/nanomatch": {
+ "version": "1.2.13",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/nise": {
+ "version": "1.5.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "lolex": "^5.0.1",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
+ "node_modules/nise/node_modules/@sinonjs/formatio": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+ "node_modules/nise/node_modules/lolex": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/now-and-later": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.3.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object-visit": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.defaults": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.map": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.reduce": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/ordered-read-streams": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "node_modules/os-locale": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lcid": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-filepath": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-node-version": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/parse-passwd": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pascalcase": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-dirname": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-exists": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-root": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-root-regex": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-root-regex": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/path-to-regexp/node_modules/isarray": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/plugin-error/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/posix-character-classes": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pretty-hrtime": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/pumpify": {
+ "version": "1.5.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "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"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg/node_modules/path-type": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/readdirp/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.6.2",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/regex-not": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/remove-bom-buffer": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/remove-bom-stream": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/remove-bom-stream/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/repeat-element": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/replace-ext": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/replace-homedir": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1",
+ "is-absolute": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/resolve": {
+ "version": "1.22.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-dir": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-options": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "value-or-function": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/resolve-url": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ret": {
+ "version": "0.1.15",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "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"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safe-regex": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ret": "~0.1.10"
+ }
+ },
+ "node_modules/samsam": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/semver": {
+ "version": "5.7.2",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/semver-greatest-satisfied-range": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sver-compat": "^1.5.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/set-value": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/set-value/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sinon": {
+ "version": "4.5.0",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/formatio": "^2.0.0",
+ "diff": "^3.1.0",
+ "lodash.get": "^4.4.2",
+ "lolex": "^2.2.0",
+ "nise": "^1.2.0",
+ "supports-color": "^5.1.0",
+ "type-detect": "^4.0.5"
+ }
+ },
+ "node_modules/sinon/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/sinon/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/slash": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/snapdragon": {
+ "version": "0.8.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/source-map": {
+ "version": "0.5.7",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.7.4",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/source-map-resolve": {
+ "version": "0.5.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "node_modules/source-map-url": {
+ "version": "0.4.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sparkles": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.15",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/split-string": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stack-trace": {
+ "version": "0.0.10",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/static-extend": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stream-exhaust": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stream-shift": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-utf8": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sver-compat": {
"version": "1.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/microsoft-security-devops-actions-toolkit/-/microsoft-security-devops-actions-toolkit-1.5.0.tgz",
- "integrity": "sha1-MDmBhJ2uivxSrrUN+K7Yucd0XiY=",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@actions/core": "1.10.0",
- "@actions/exec": "1.1.1"
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/through2": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "2 || 3"
+ }
+ },
+ "node_modules/through2-filter": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "through2": "~2.0.0",
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/through2-filter/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/time-stamp": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-absolute-glob": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path": {
+ "version": "0.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-through": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/to-through/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
}
},
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "dev": true,
+ "license": "0BSD"
+ },
"node_modules/tunnel": {
"version": "0.0.6",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=",
"license": "MIT",
"engines": {
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
}
},
+ "node_modules/type": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/typescript": {
+ "version": "5.2.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unc-path-regex": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/undertaker": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "bach": "^1.0.0",
+ "collection-map": "^1.0.0",
+ "es6-weak-map": "^2.0.1",
+ "fast-levenshtein": "^1.0.0",
+ "last-run": "^1.1.0",
+ "object.defaults": "^1.0.0",
+ "object.reduce": "^1.0.0",
+ "undertaker-registry": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/undertaker-registry": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/union-value": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unique-stream": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "through2-filter": "^3.0.0"
+ }
+ },
+ "node_modules/unset-value": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value": {
+ "version": "0.3.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-values": {
+ "version": "0.1.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/upath": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4",
+ "yarn": "*"
+ }
+ },
+ "node_modules/urix": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/use": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/uuid": {
"version": "8.3.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=",
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
+ },
+ "node_modules/v8flags": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/value-or-function": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-fs": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fs-mkdirp-stream": "^1.0.0",
+ "glob-stream": "^6.1.0",
+ "graceful-fs": "^4.0.0",
+ "is-valid-glob": "^1.0.0",
+ "lazystream": "^1.0.0",
+ "lead": "^1.0.0",
+ "object.assign": "^4.0.4",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.3.3",
+ "remove-bom-buffer": "^3.0.0",
+ "remove-bom-stream": "^1.2.0",
+ "resolve-options": "^1.1.0",
+ "through2": "^2.0.0",
+ "to-through": "^2.0.0",
+ "value-or-function": "^3.0.0",
+ "vinyl": "^2.0.0",
+ "vinyl-sourcemap": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-fs/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/vinyl-sourcemap": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "append-buffer": "^1.0.2",
+ "convert-source-map": "^1.5.0",
+ "graceful-fs": "^4.1.6",
+ "normalize-path": "^2.1.1",
+ "now-and-later": "^2.0.0",
+ "remove-bom-buffer": "^3.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-sourcemap/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/workerpool": {
+ "version": "6.2.1",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yargs": {
+ "version": "7.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.1"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/camelcase": {
+ "version": "6.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/decamelize": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
}
}
}
diff --git a/node_modules/@microsoft/security-devops-actions-toolkit/msdo-client.js b/node_modules/@microsoft/security-devops-actions-toolkit/msdo-client.js
new file mode 100644
index 00000000..f08baae6
--- /dev/null
+++ b/node_modules/@microsoft/security-devops-actions-toolkit/msdo-client.js
@@ -0,0 +1,239 @@
+"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.run = void 0;
+const fs = __importStar(require("fs"));
+const path = __importStar(require("path"));
+const process = __importStar(require("process"));
+const core = __importStar(require("@actions/core"));
+const exec = __importStar(require("@actions/exec"));
+const common = __importStar(require("./msdo-common"));
+const installer = __importStar(require("./msdo-installer"));
+const AdmZip = require("adm-zip");
+const cliVersionDefault = 'Latest';
+function setupEnvironment() {
+ return __awaiter(this, void 0, void 0, function* () {
+ console.log('------------------------------------------------------------------------------');
+ if (!process.env.MSDO_FILEPATH) {
+ let cliVersion = resolveCliVersion();
+ yield installer.install(cliVersion);
+ }
+ process.env.GDN_SETTINGS_FOLDERS = `Install=${process.env.MSDO_PACKAGES_DIRECTORY}`;
+ console.log('------------------------------------------------------------------------------');
+ });
+}
+function resolveCliVersion() {
+ let cliVersion = cliVersionDefault;
+ if (process.env.MSDO_VERSION) {
+ cliVersion = process.env.MSDO_VERSION;
+ }
+ if (cliVersion.includes('*')) {
+ cliVersion = 'Latest';
+ }
+ return cliVersion;
+}
+function getCliFilePath() {
+ let cliFilePath = process.env.MSDO_FILEPATH;
+ core.debug(`cliFilePath = ${cliFilePath}`);
+ return cliFilePath;
+}
+function init() {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ let cliFilePath = getCliFilePath();
+ yield exec.exec(cliFilePath, ['init', '--force']);
+ }
+ catch (error) {
+ core.debug(error);
+ }
+ });
+}
+function run(inputArgs, telemetryEnvironment = 'github') {
+ return __awaiter(this, void 0, void 0, function* () {
+ let cliFilePath = null;
+ let args = [];
+ let debugDrop = common.parseBool(process.env.GDN_DEBUG_DROP);
+ const gdnTaskLibFolder = path.resolve(__dirname);
+ core.debug(`gdnTaskLibFolder = ${gdnTaskLibFolder}`);
+ const nodeModulesFolder = path.dirname(path.dirname(gdnTaskLibFolder));
+ core.debug(`nodeModulesFolder = ${nodeModulesFolder}`);
+ const taskFolder = path.dirname(nodeModulesFolder);
+ core.debug(`taskFolder = ${taskFolder}`);
+ const debugFolder = path.join(taskFolder, 'debug');
+ core.debug(`debugFolder = ${debugFolder}`);
+ try {
+ yield setupEnvironment();
+ yield init();
+ cliFilePath = process.env.MSDO_FILEPATH;
+ core.debug(`cliFilePath = ${cliFilePath}`);
+ if (inputArgs != null && inputArgs.length != 0) {
+ for (let i = 0; i < inputArgs.length; i++) {
+ args.push(inputArgs[i]);
+ }
+ }
+ if (core.isDebug()) {
+ args.push('--logger-level');
+ args.push('trace');
+ }
+ let isUploadExisting = inputArgs[0] == "upload";
+ if (!isUploadExisting) {
+ args.push('--not-break-on-detections');
+ let sarifFile = path.join(process.env.GITHUB_WORKSPACE, '.gdn', 'msdo.sarif');
+ core.debug(`sarifFile = ${sarifFile}`);
+ core.exportVariable('MSDO_SARIF_FILE', sarifFile);
+ core.setOutput('sarifFile', sarifFile);
+ if (common.isVersionGreaterThanOrEqualTo(process.env.MSDO_INSTALLEDVERSION, '0.183.0')) {
+ args.push('--export-file');
+ }
+ else {
+ args.push('--export-breaking-results-to-file');
+ }
+ args.push(sarifFile);
+ }
+ args.push('--telemetry-environment');
+ args.push(telemetryEnvironment);
+ core.debug(`GdnDebugDrop = ${debugDrop}`);
+ if (debugDrop) {
+ args.push('--debug-drop');
+ args.push('--debug-drop-path');
+ args.push(debugFolder);
+ const debugFolderEnvVarName = `GDN_DEBUGDROPPATH`;
+ core.debug(`Debug Drop enabled. ${debugFolderEnvVarName}: ${debugFolder}`);
+ process.env[debugFolderEnvVarName] = debugFolder;
+ }
+ }
+ catch (error) {
+ core.error('Exception occurred while initializing MSDO:');
+ core.error(error);
+ core.setFailed(error);
+ return;
+ }
+ try {
+ core.debug('Running Microsoft Security DevOps...');
+ cleanupDirectory(debugFolder);
+ yield exec.exec(cliFilePath, args);
+ let debugStagingDir = '';
+ core.debug(`GdnDebugDrop = ${debugDrop}`);
+ if (debugDrop) {
+ if (fs.existsSync(debugFolder)) {
+ core.debug("Creating debug drop archive...");
+ let zippedOutput = getZippedFolder(debugFolder);
+ const instanceDirectory = process.env.GITHUB_WORKSPACE;
+ debugStagingDir = path.join(instanceDirectory, '.gdn', 'debugdrop');
+ if (!fs.existsSync(debugStagingDir)) {
+ core.debug(`Creating missing folder: ${debugStagingDir}`);
+ fs.mkdirSync(debugStagingDir);
+ }
+ let debugDropArtifact = path.join(debugStagingDir, `MSDO_debug.zip`);
+ let dupeCount = 1;
+ while (fs.existsSync(debugDropArtifact)) {
+ core.debug(`Debug Drop with the name ${debugDropArtifact} already exists, updating name to avoid collision...`);
+ dupeCount += 1;
+ debugDropArtifact = path.join(debugStagingDir, `MSDO_debug_${dupeCount}.zip`);
+ }
+ fs.copyFileSync(zippedOutput, debugDropArtifact);
+ core.debug(`Finished creating: ${debugDropArtifact}`);
+ core.debug(`DebugDrop = ${debugStagingDir}`);
+ core.exportVariable('MSDO_DEBUG_DROP_FOLDER', debugStagingDir);
+ core.setOutput('debugDrop', debugStagingDir);
+ core.debug(`Cleaning up: ${debugFolder}`);
+ cleanupDirectory(debugFolder);
+ core.debug(`Successfully cleaned up debug dump.`);
+ }
+ }
+ }
+ catch (error) {
+ core.setFailed(error);
+ return;
+ }
+ });
+}
+exports.run = run;
+function getZippedFolder(dir) {
+ core.debug(`Zipping up folder: ${dir}`);
+ let allPaths = getFilePathsRecursively(dir);
+ const zip = new AdmZip();
+ for (let filePath of allPaths) {
+ core.debug(`Adding file to archive: ${filePath}`);
+ zip.addLocalFile(filePath);
+ }
+ let destPath = `${dir}.zip`;
+ core.debug(`Writing to file: ${destPath}`);
+ zip.writeZip(destPath);
+ if (fs.existsSync(destPath)) {
+ core.debug(`Successfully wrote file: ${destPath}`);
+ }
+ else {
+ core.debug(`Something went wrong! File does not exist: ${destPath}`);
+ }
+ return destPath;
+}
+function getFilePathsRecursively(dir) {
+ core.debug(`Searching for files under dir: ${dir}`);
+ var files = [];
+ let fileList = fs.readdirSync(dir);
+ var remaining = fileList.length;
+ if (!remaining)
+ return files;
+ for (let file of fileList) {
+ file = path.resolve(dir, file);
+ let stat = fs.statSync(file);
+ if (stat && stat.isDirectory()) {
+ let f = getFilePathsRecursively(file);
+ files = files.concat(f);
+ }
+ else {
+ files.push(file);
+ }
+ if (!--remaining) {
+ return files;
+ }
+ }
+}
+function cleanupDirectory(dir) {
+ if (!fs.existsSync(dir))
+ return;
+ let items = fs.readdirSync(dir);
+ for (let item of items) {
+ item = path.resolve(dir, item);
+ let stat = fs.statSync(item);
+ if (stat && stat.isDirectory()) {
+ cleanupDirectory(item);
+ }
+ else {
+ fs.unlinkSync(item);
+ }
+ }
+ fs.rmdirSync(dir);
+}
diff --git a/node_modules/@microsoft/security-devops-actions-toolkit/msdo-common.js b/node_modules/@microsoft/security-devops-actions-toolkit/msdo-common.js
new file mode 100644
index 00000000..de9f93a0
--- /dev/null
+++ b/node_modules/@microsoft/security-devops-actions-toolkit/msdo-common.js
@@ -0,0 +1,122 @@
+"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.isVersionGreaterThanOrEqualTo = exports.sleep = exports.getMsdoBreakEnvironmentVariable = exports.removeExtension = exports.isLatestPreRelease = exports.isLatest = exports.isPreRelease = exports.ensureDirectory = exports.isDirectory = exports.getDirectories = exports.directoryExists = exports.parseBool = exports.isNullOrWhiteSpace = void 0;
+const fs = __importStar(require("fs"));
+const path = __importStar(require("path"));
+const process = __importStar(require("process"));
+const core = __importStar(require("@actions/core"));
+function isNullOrWhiteSpace(value) {
+ return !value || !value.trim();
+}
+exports.isNullOrWhiteSpace = isNullOrWhiteSpace;
+function parseBool(value) {
+ let boolValue = false;
+ if (value != null) {
+ value = value.trim().toUpperCase();
+ boolValue = (value == 'TRUE' || value == '1');
+ }
+ return boolValue;
+}
+exports.parseBool = parseBool;
+function directoryExists(directoryPath) {
+ return new Promise((resolve, reject) => {
+ fs.stat(directoryPath, (err, stats) => {
+ if (err) {
+ resolve(false);
+ }
+ else {
+ resolve(stats.isDirectory());
+ }
+ });
+ });
+}
+exports.directoryExists = directoryExists;
+function getDirectories(directory) {
+ return fs.readdirSync(directory).filter(p => isDirectory(directory, p));
+}
+exports.getDirectories = getDirectories;
+function isDirectory(directory, p) {
+ return fs.statSync(path.join(directory, p)).isDirectory();
+}
+exports.isDirectory = isDirectory;
+function ensureDirectory(directory) {
+ if (!fs.existsSync(directory)) {
+ fs.mkdirSync(directory);
+ }
+}
+exports.ensureDirectory = ensureDirectory;
+function isPreRelease(version) {
+ return version != null && version.indexOf('-') > 1;
+}
+exports.isPreRelease = isPreRelease;
+function isLatest(version) {
+ return version == undefined || version == null || version === 'Latest' || version === 'LatestPreRelease';
+}
+exports.isLatest = isLatest;
+function isLatestPreRelease(version) {
+ return version === 'LatestPreRelease';
+}
+exports.isLatestPreRelease = isLatestPreRelease;
+function removeExtension(filePath) {
+ const dirname = path.dirname(filePath);
+ const basename = path.basename(filePath, path.extname(filePath));
+ return path.join(dirname, basename);
+}
+exports.removeExtension = removeExtension;
+function getMsdoBreakEnvironmentVariable() {
+ let msdoBreak = parseBool(process.env.MSDO_BREAK);
+ core.debug(`msdoBreak = ${msdoBreak}`);
+ return msdoBreak;
+}
+exports.getMsdoBreakEnvironmentVariable = getMsdoBreakEnvironmentVariable;
+function sleep(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+exports.sleep = sleep;
+function isVersionGreaterThanOrEqualTo(version1, version2) {
+ if (version1 == null || version2 == null) {
+ return true;
+ }
+ let version1Parts = version1.split('.');
+ let version2Parts = version2.split('.');
+ if (version1Parts == null || version2Parts == null) {
+ return true;
+ }
+ let version1Part = 0;
+ let version2Part = 0;
+ for (let i = 0; i < version1Parts.length; i++) {
+ version1Part = parseInt(version1Parts[i] || '0');
+ version2Part = parseInt(version2Parts[i] || '0');
+ if (version1Part > version2Part) {
+ return true;
+ }
+ else if (version1Part < version2Part) {
+ return false;
+ }
+ }
+ return true;
+}
+exports.isVersionGreaterThanOrEqualTo = isVersionGreaterThanOrEqualTo;
diff --git a/node_modules/@microsoft/security-devops-actions-toolkit/msdo-installer.js b/node_modules/@microsoft/security-devops-actions-toolkit/msdo-installer.js
new file mode 100644
index 00000000..150470e3
--- /dev/null
+++ b/node_modules/@microsoft/security-devops-actions-toolkit/msdo-installer.js
@@ -0,0 +1,156 @@
+"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.install = void 0;
+const fs = __importStar(require("fs"));
+const path = __importStar(require("path"));
+const process = __importStar(require("process"));
+const core = __importStar(require("@actions/core"));
+const common = __importStar(require("./msdo-common"));
+const nuget = __importStar(require("./msdo-nuget-client"));
+function install(cliVersion) {
+ return __awaiter(this, void 0, void 0, function* () {
+ console.log(`Installing Microsoft Security DevOps Cli version: ${cliVersion}`);
+ if (process.env.MSDO_FILEPATH) {
+ console.log(`MSDO CLI File Path overriden by %MSDO_FILEPATH%: ${process.env.MSDO_FILEPATH}`);
+ return;
+ }
+ if (process.env.MSDO_DIRECTORY) {
+ console.log(`MSDO CLI Directory overriden by %MSDO_DIRECTORY%: ${process.env.MSDO_DIRECTORY}`);
+ let msdoFilePath = path.join(process.env.MSDO_DIRECTORY, 'guardian');
+ core.debug(`msdoFilePath = ${msdoFilePath}`);
+ process.env.MSDO_FILEPATH = msdoFilePath;
+ return;
+ }
+ let packageName = resolvePackageName();
+ let agentDirectory = path.resolve(path.join(process.env.GITHUB_WORKSPACE, '../../_msdo'));
+ core.debug(`agentDirectory = ${agentDirectory}`);
+ common.ensureDirectory(agentDirectory);
+ let agentPackagesDirectory = process.env.MSDO_PACKAGES_DIRECTORY;
+ if (!agentPackagesDirectory) {
+ agentPackagesDirectory = path.join(agentDirectory, 'packages');
+ core.debug(`agentPackagesDirectory = ${agentPackagesDirectory}`);
+ common.ensureDirectory(agentPackagesDirectory);
+ process.env.MSDO_PACKAGES_DIRECTORY = agentPackagesDirectory;
+ }
+ let agentVersionsDirectory = path.join(agentDirectory, 'versions');
+ core.debug(`agentVersionsDirectory = ${agentVersionsDirectory}`);
+ common.ensureDirectory(agentVersionsDirectory);
+ if (isInstalled(agentVersionsDirectory, packageName, cliVersion)) {
+ return;
+ }
+ let failed = false;
+ let attempts = 0;
+ let maxAttempts = 2;
+ let serviceIndexUrl = "https://api.nuget.org/v3/index.json";
+ let response;
+ do {
+ failed = false;
+ try {
+ response = yield nuget.install(serviceIndexUrl, packageName, cliVersion, agentVersionsDirectory);
+ }
+ catch (error) {
+ core.debug(error);
+ failed = true;
+ attempts += 1;
+ if (attempts > maxAttempts) {
+ break;
+ }
+ }
+ } while (failed);
+ if (response && response.success) {
+ if (response.inCache == true) {
+ console.log(`${packageName} version ${response.resolvedVersion} already installed`);
+ }
+ else {
+ console.log(`Installed ${packageName} version ${response.resolvedVersion}`);
+ }
+ }
+ else {
+ throw new Error('Failed to install the MSDO CLI nuget package.');
+ }
+ setVariables(agentVersionsDirectory, packageName, response.resolvedVersion, true);
+ });
+}
+exports.install = install;
+function resolvePackageName() {
+ let packageName;
+ if (process.env.MSDO_DOTNETDEPENDENTPACKAGE) {
+ packageName = 'Microsoft.Security.Devops.Cli';
+ }
+ else if (process.platform == 'win32') {
+ packageName = 'Microsoft.Security.Devops.Cli.win-x64';
+ }
+ else if (process.platform == 'linux') {
+ if (process.arch == 'arm64') {
+ packageName = 'Microsoft.Security.Devops.Cli.linux-arm64';
+ }
+ else {
+ packageName = 'Microsoft.Security.Devops.Cli.linux-x64';
+ }
+ }
+ else {
+ packageName = 'Microsoft.Security.Devops.Cli';
+ }
+ core.debug(`packageName = ${packageName}`);
+ return packageName;
+}
+function isInstalled(packagesDirectory, packageName, cliVersion) {
+ let installed = false;
+ if (common.isLatest(cliVersion)) {
+ core.debug(`MSDO CLI version contains a latest quantifier: ${cliVersion}. Continuing with install...`);
+ return installed;
+ }
+ installed = setVariables(packagesDirectory, packageName, cliVersion);
+ if (installed) {
+ console.log(`MSDO CLI v${cliVersion} already installed.`);
+ }
+ return installed;
+}
+function setVariables(packagesDirectory, packageName, cliVersion, validate = false) {
+ let packageDirectory = path.join(packagesDirectory, `${packageName}.${cliVersion}`);
+ core.debug(`packageDirectory = ${packageDirectory}`);
+ let msdoDirectory = path.join(packageDirectory, 'tools');
+ core.debug(`msdoDirectory = ${msdoDirectory}`);
+ let msdoFilePath = path.join(msdoDirectory, 'guardian');
+ core.debug(`msdoFilePath = ${msdoFilePath}`);
+ process.env.MSDO_DIRECTORY = msdoDirectory;
+ process.env.MSDO_FILEPATH = msdoFilePath;
+ process.env.MSDO_INSTALLEDVERSION = cliVersion;
+ let exists = fs.existsSync(process.env.MSDO_FILEPATH);
+ if (validate && !exists) {
+ throw new Error(`MSDO CLI v${cliVersion} was not found after installation. Expected location: ${msdoFilePath}`);
+ }
+ return exists;
+}
diff --git a/node_modules/@microsoft/security-devops-actions-toolkit/msdo-nuget-client.js b/node_modules/@microsoft/security-devops-actions-toolkit/msdo-nuget-client.js
new file mode 100644
index 00000000..4cef11b7
--- /dev/null
+++ b/node_modules/@microsoft/security-devops-actions-toolkit/msdo-nuget-client.js
@@ -0,0 +1,484 @@
+"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.install = void 0;
+const https = __importStar(require("https"));
+const fs = __importStar(require("fs"));
+const path = __importStar(require("path"));
+const process = __importStar(require("process"));
+const core = __importStar(require("@actions/core"));
+const AdmZip = require("adm-zip");
+const common = __importStar(require("./msdo-common"));
+const _defaultFileDownloadRetries = 2;
+const _defaultFileDownloadRetryDelayMs = 1000;
+function install(serviceIndexUrl, packageName, packageVersion, outputDirectory, accessToken = null) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let response = yield getInstallationStatus(packageName, packageVersion, outputDirectory);
+ if (response.inCache) {
+ core.debug(`Package already installed: ${packageName} ${packageVersion}`);
+ }
+ else {
+ let requestOptions = resolveRequestOptions(accessToken);
+ core.debug(`Fetching service index for: ${serviceIndexUrl}`);
+ let serviceIndex = yield requestJson(serviceIndexUrl, requestOptions);
+ let resolvedVersion = packageVersion;
+ if (common.isLatest(packageVersion)) {
+ core.debug(`Resolving package name and version: ${packageName} ${packageVersion}`);
+ resolvedVersion = yield resolveVersion(serviceIndex, requestOptions, packageName, packageVersion);
+ response = yield getInstallationStatus(packageName, resolvedVersion, outputDirectory, true);
+ }
+ if (response.inCache) {
+ core.debug(`Resolved package already installed: ${packageName} ${resolvedVersion}`);
+ }
+ else {
+ core.debug(`Downloading package to: ${outputDirectory}`);
+ let packagePath = yield downloadPackage(serviceIndex, requestOptions, packageName, resolvedVersion, outputDirectory);
+ core.debug(`Extracting package: ${packagePath}`);
+ yield extractPackage(packagePath);
+ response['success'] = true;
+ response['resolvedVersion'] = resolvedVersion;
+ response['packageFolder'] = common.removeExtension(packagePath);
+ response['packagePath'] = packagePath;
+ if (common.isLatest(packageVersion)) {
+ core.exportVariable(getLatestEnviromentVariable(packageName, common.isLatestPreRelease(packageVersion)), resolvedVersion);
+ }
+ }
+ }
+ return response;
+ });
+}
+exports.install = install;
+function getLatestEnviromentVariable(packageName, isPreRelease) {
+ let suffix = isPreRelease ? '_LATESTPRERELEASEVERSION' : '_LATESTVERSION';
+ return `MSDO_${packageName.replace(/\./g, '').replace('-', '')}${suffix}`.toUpperCase();
+}
+function getInstallationStatus(packageName, packageVersion, outputDirectory, force = false) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let response = {
+ success: false,
+ inCache: false,
+ packageName: packageName,
+ packageVersion: packageVersion
+ };
+ let checkInstall = true;
+ if (!force) {
+ const isLatest = common.isLatest(packageVersion);
+ checkInstall = !isLatest;
+ if (isLatest) {
+ const isLatestPreRelease = common.isLatestPreRelease(packageVersion);
+ const latestEnviromentVariable = getLatestEnviromentVariable(packageName, isLatestPreRelease);
+ let cachedVersion = process.env[latestEnviromentVariable];
+ if (!common.isNullOrWhiteSpace(cachedVersion)) {
+ packageVersion = cachedVersion;
+ checkInstall = true;
+ }
+ }
+ }
+ if (checkInstall) {
+ const packagePath = getNuGetPackageFilePath(packageName, packageVersion, outputDirectory);
+ const packageFolder = common.removeExtension(packagePath);
+ const packageFolderExists = yield common.directoryExists(packageFolder);
+ if (packageFolderExists) {
+ response['success'] = true;
+ response['inCache'] = true;
+ response['resolvedVersion'] = packageVersion;
+ response['packageFolder'] = packageFolder;
+ response['packagePath'] = packagePath;
+ }
+ }
+ return response;
+ });
+}
+function resolveVersion(serviceIndex, requestOptions, packageName, packageVersion) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let resolvedVersion = packageVersion;
+ if (common.isLatest(packageVersion)) {
+ let serviceResponse = findService(serviceIndex, 'RegistrationsBaseUrl', ['3.6.0', '3.0.0-beta']);
+ let serviceOptions = {
+ packageName: packageName,
+ packageVersion: packageVersion
+ };
+ resolvedVersion = yield callService(serviceResponse, requestOptions, serviceOptions, _resolveVersion);
+ }
+ core.debug(`resolvedVersion = ${resolvedVersion}`);
+ return resolvedVersion;
+ });
+}
+function _resolveVersion(service, requestOptions, serviceOptions) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let packageName = serviceOptions['packageName'];
+ let packageVersion = serviceOptions['packageVersion'];
+ let resolvedVersion = null;
+ let searchQueryServiceUrlWithQuery = `${service['@id']}${packageName.toLowerCase()}/index.json`;
+ let result = yield requestJson(searchQueryServiceUrlWithQuery, requestOptions);
+ const findPreRelease = common.isLatestPreRelease(packageVersion);
+ resolvedVersion = findLatestVersion(result, findPreRelease);
+ if (resolvedVersion == null) {
+ throw new Error(`Package not found: ${packageName}`);
+ }
+ return resolvedVersion;
+ });
+}
+function findLatestVersion(result, findPreRelease) {
+ let latestVersion = null;
+ let latestVersionParts = null;
+ let latestIsPreRelease = false;
+ let latestPreReleaseFlag = null;
+ if (result == null || result['items'] == null) {
+ return latestVersion;
+ }
+ let currentCatalogEntry = null;
+ let currentVersion = null;
+ let currentVersionParts = null;
+ let currentFullVersionParts = null;
+ let currentVersionNumbersString = null;
+ let currentIsLatest = false;
+ let currentIsPreRelease = false;
+ let currentPreReleaseFlag = null;
+ for (let packageGroup of result['items']) {
+ for (let packageInfo of packageGroup['items']) {
+ currentCatalogEntry = packageInfo['catalogEntry'];
+ if (currentCatalogEntry['listed'] != true) {
+ continue;
+ }
+ currentVersion = currentCatalogEntry['version'];
+ currentIsPreRelease = common.isPreRelease(currentVersion);
+ if (!findPreRelease && currentIsPreRelease) {
+ continue;
+ }
+ currentFullVersionParts = currentVersion.split("-");
+ if (currentIsPreRelease) {
+ currentPreReleaseFlag = currentFullVersionParts[1];
+ }
+ currentVersionNumbersString = currentFullVersionParts[0];
+ currentVersionParts = currentVersionNumbersString.split(".");
+ currentIsLatest = latestVersion == null;
+ if (!currentIsLatest) {
+ let maxVersionParts = currentVersionParts.length;
+ if (currentVersionParts.length < maxVersionParts) {
+ maxVersionParts = latestVersionParts.length;
+ }
+ for (let versionPartIndex = 0; versionPartIndex < currentVersionParts.length; versionPartIndex++) {
+ let versionPart = 0;
+ let latestVersionPart = 0;
+ let isLastVersionPart = versionPartIndex == (maxVersionParts - 1);
+ if (versionPartIndex < currentVersionParts.length) {
+ versionPart = parseInt(currentVersionParts[versionPartIndex]);
+ }
+ if (versionPartIndex < latestVersionParts.length) {
+ latestVersionPart = parseInt(latestVersionParts[versionPartIndex]);
+ }
+ if (versionPart > latestVersionPart) {
+ currentIsLatest = true;
+ }
+ else if (versionPart == latestVersionPart) {
+ currentIsLatest = isLastVersionPart
+ &&
+ ((currentIsPreRelease && latestIsPreRelease && currentPreReleaseFlag > latestPreReleaseFlag)
+ ||
+ (!currentIsPreRelease && latestIsPreRelease));
+ }
+ else {
+ break;
+ }
+ if (currentIsLatest) {
+ break;
+ }
+ }
+ }
+ if (currentIsLatest) {
+ latestVersion = currentVersion;
+ latestVersionParts = currentVersionParts;
+ latestIsPreRelease = currentIsPreRelease;
+ latestPreReleaseFlag = currentPreReleaseFlag;
+ }
+ }
+ }
+ core.debug(`latestVersion = ${latestVersion}`);
+ return latestVersion;
+}
+function downloadPackage(serviceIndex, requestOptions, packageName, resolvedVersion, outputDirectory) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let serviceResponse = findService(serviceIndex, 'PackageBaseAddress', ['3.0.0']);
+ let serviceOptions = {
+ packageName: packageName,
+ resolvedVersion: resolvedVersion,
+ outputDirectory: outputDirectory
+ };
+ return yield callService(serviceResponse, requestOptions, serviceOptions, _downloadPackage);
+ });
+}
+function _downloadPackage(service, requestOptions, serviceOptions) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const packageName = serviceOptions['packageName'];
+ const resolvedVersion = serviceOptions['resolvedVersion'];
+ const outputDirectory = serviceOptions['outputDirectory'];
+ const packageNameLower = packageName.toLowerCase();
+ const resolvedVersionLower = resolvedVersion.toLowerCase();
+ const packageUrl = `${service['@id']}${packageNameLower}/${resolvedVersionLower}/${packageNameLower}.${resolvedVersionLower}.nupkg`;
+ const destinationPath = getNuGetPackageFilePath(packageName, resolvedVersion, outputDirectory);
+ yield downloadFile(packageUrl, requestOptions, destinationPath);
+ if (!fs.existsSync(destinationPath)) {
+ throw new Error(`The package could not be found after download: ${destinationPath}`);
+ }
+ return destinationPath;
+ });
+}
+function getNuGetPackageFilePath(packageName, packageVersion, outputDirectory) {
+ return path.join(outputDirectory, `${packageName}.${packageVersion}.nupkg`);
+}
+function extractPackage(filePath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let packageDirectory = common.removeExtension(filePath);
+ let zip = new AdmZip(filePath);
+ zip.extractAllTo(packageDirectory, true);
+ yield enableOnLinux(packageDirectory);
+ });
+}
+function findService(serviceIndex, serviceName, knownServiceVersions) {
+ const response = {
+ known: [],
+ unknown: []
+ };
+ for (const service of serviceIndex["resources"]) {
+ const serviceParts = service['@type'].split('/');
+ if (serviceParts === undefined || serviceParts.length !== 2) {
+ continue;
+ }
+ const _serviceName = serviceParts[0];
+ const _serviceVersion = serviceParts[1];
+ if (_serviceName === serviceName) {
+ const serviceResponse = {
+ '@id': service['@id'],
+ '@type': service['@type'],
+ 'name': _serviceName,
+ 'version': _serviceVersion
+ };
+ if (knownServiceVersions.indexOf(_serviceVersion) > -1) {
+ response.known.push(serviceResponse);
+ }
+ else {
+ response.unknown.push(serviceResponse);
+ }
+ }
+ }
+ if (response.known.length === 0 && response.unknown.length === 0) {
+ throw new Error(`Could not find service: ${serviceName}`);
+ }
+ return response;
+}
+function callService(serviceResponse, requestOptions, serviceOptions, serviceCall, serviceVersionCalls = null) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let response;
+ let services = serviceResponse.known;
+ let isKnown = true;
+ if (services === undefined || services.length === 0) {
+ services = serviceResponse.unknown;
+ isKnown = false;
+ }
+ let firstError;
+ let i = 0;
+ do {
+ try {
+ const service = services[i];
+ let _serviceCall = serviceCall;
+ if (serviceVersionCalls != null && serviceVersionCalls[service['version']] !== undefined) {
+ _serviceCall = serviceVersionCalls[service['version']];
+ }
+ response = yield _serviceCall(service, requestOptions, serviceOptions);
+ break;
+ }
+ catch (error) {
+ core.debug(`Failed to call service: ${error.message}`);
+ if (firstError === undefined) {
+ firstError = error;
+ }
+ i += 1;
+ if (i == services.length) {
+ if (isKnown) {
+ isKnown = false;
+ core.debug('Attempting to call unknown service type versions...');
+ services = serviceResponse.unknown;
+ if (services === undefined || services.length === 0) {
+ throw firstError;
+ }
+ i = 0;
+ }
+ else {
+ throw firstError;
+ }
+ }
+ }
+ } while (true);
+ return response;
+ });
+}
+function resolveRequestOptions(accessToken) {
+ let options = {
+ method: 'GET',
+ timeout: 2500,
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ };
+ if (!common.isNullOrWhiteSpace(accessToken)) {
+ options['auth'] = `:${accessToken}`;
+ }
+ return options;
+}
+function requestJson(url, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => {
+ core.debug(`${options['method'].toUpperCase()} ${url}`);
+ const req = https.request(url, options, (res) => __awaiter(this, void 0, void 0, function* () {
+ try {
+ const decompressResponse = yield Promise.resolve().then(() => __importStar(require('decompress-response')));
+ res = decompressResponse.default(res);
+ }
+ catch (error) {
+ core.debug(`Failed to add response decompression: ${error.message}`);
+ }
+ if (res.statusCode !== 200) {
+ reject(new Error(`Failed to call: ${url}. Status code: ${res.statusCode}`));
+ return;
+ }
+ let data = '';
+ res.on('data', (chunk) => {
+ data += chunk.toString();
+ });
+ res.on('end', () => {
+ let jsonData;
+ try {
+ jsonData = JSON.parse(data);
+ }
+ catch (error) {
+ reject(new Error(`Failed to parse JSON: ${data}`));
+ return;
+ }
+ resolve(jsonData);
+ });
+ }));
+ req.on('error', (error) => {
+ reject(new Error(`Error calling url: ${error}`));
+ });
+ req.end();
+ });
+ });
+}
+function downloadFile(url, options, destinationPath, retries = _defaultFileDownloadRetries, retryDelay = _defaultFileDownloadRetryDelayMs) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ let errors = [];
+ do {
+ try {
+ yield _downloadFile(url, options, destinationPath);
+ resolve();
+ return;
+ }
+ catch (error) {
+ errors.push(error);
+ if (retries > 0) {
+ core.debug(`Error downloading url: ${error.message}`);
+ core.debug(`Retrying download of url: ${url}`);
+ yield common.sleep(retryDelay);
+ }
+ }
+ } while (retries-- > 0);
+ reject(new Error(`Error downloading url: ${errors[0] || url}`));
+ }));
+ });
+}
+function _downloadFile(url, options, destinationPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ const req = https.request(url, options, (res) => __awaiter(this, void 0, void 0, function* () {
+ if (res.statusCode === 303) {
+ let redirectUrl = res.headers['location'];
+ options['auth'] = null;
+ yield downloadFile(redirectUrl, options, destinationPath);
+ resolve();
+ return;
+ }
+ if (res.statusCode !== 200) {
+ reject(`Failed to download file: ${url}. Status code: ${res.statusCode}`);
+ return;
+ }
+ const file = fs.createWriteStream(destinationPath);
+ res.pipe(file);
+ file.on('finish', () => {
+ file.close();
+ resolve();
+ });
+ }));
+ req.on('error', (error) => {
+ reject(error);
+ });
+ req.end();
+ }));
+ });
+}
+function enableOnLinux(folderPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ if (process.platform != 'linux') {
+ resolve();
+ return;
+ }
+ const entries = fs.readdirSync(folderPath);
+ const tasks = entries.map((entry) => __awaiter(this, void 0, void 0, function* () {
+ try {
+ const entryPath = path.join(folderPath, entry);
+ const stats = fs.statSync(entryPath);
+ if (stats.isFile()) {
+ try {
+ fs.chmodSync(entryPath, 0o755);
+ core.debug(`0o755 permission set for: ${entryPath}`);
+ }
+ catch (error) {
+ core.debug(`Error setting executable permission: ${error.message}`);
+ }
+ }
+ else if (stats.isDirectory()) {
+ yield enableOnLinux(entryPath);
+ }
+ }
+ catch (error) {
+ reject(new Error(`Error getting file stats: ${error.message}`));
+ }
+ }));
+ yield Promise.all(tasks);
+ resolve();
+ }));
+ });
+}
diff --git a/node_modules/@microsoft/security-devops-actions-toolkit/package.json b/node_modules/@microsoft/security-devops-actions-toolkit/package.json
new file mode 100644
index 00000000..a621b3e5
--- /dev/null
+++ b/node_modules/@microsoft/security-devops-actions-toolkit/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "@microsoft/security-devops-actions-toolkit",
+ "version": "1.11.0",
+ "description": "Microsoft Security DevOps for GitHub Actions toolkit.",
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "repository": "https://github.com/microsoft/security-devops-actions-toolkit.git",
+ "homepage": "https://github.com/microsoft/security-devops-actions-toolkit",
+ "scripts": {
+ "build": "npx gulp"
+ },
+ "dependencies": {
+ "@actions/core": "1.10.0",
+ "@actions/exec": "1.1.1",
+ "adm-zip": "0.5.10",
+ "decompress-response": "^8.1.0"
+ },
+ "devDependencies": {
+ "@types/node": "^20.3.1",
+ "del": "^7.0.0",
+ "gulp": "^4.0.2",
+ "gulp-cli": "^2.3.0",
+ "gulp-shell": "^0.8.0",
+ "gulp-typescript": "^6.0.0-alpha.1",
+ "typescript": "^5.1.3"
+ },
+ "main": "msdo-client.js"
+}
diff --git a/node_modules/adm-zip/LICENSE b/node_modules/adm-zip/LICENSE
new file mode 100644
index 00000000..f748c3de
--- /dev/null
+++ b/node_modules/adm-zip/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2012 Another-D-Mention Software and other contributors
+
+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.
diff --git a/node_modules/adm-zip/README.md b/node_modules/adm-zip/README.md
new file mode 100644
index 00000000..60d7a12b
--- /dev/null
+++ b/node_modules/adm-zip/README.md
@@ -0,0 +1,65 @@
+# ADM-ZIP for NodeJS with added support for electron original-fs
+
+ADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](https://nodejs.org/).
+
+# Installation
+
+With [npm](https://www.npmjs.com/) do:
+
+ $ npm install adm-zip
+
+## What is it good for?
+
+The library allows you to:
+
+- decompress zip files directly to disk or in memory buffers
+- compress files and store them to disk in .zip format or in compressed buffers
+- update content of/add new/delete files from an existing .zip
+
+# Dependencies
+
+There are no other nodeJS libraries that ADM-ZIP is dependent of
+
+# Examples
+
+## Basic usage
+
+```javascript
+var AdmZip = require("adm-zip");
+
+// reading archives
+var zip = new AdmZip("./my_file.zip");
+var zipEntries = zip.getEntries(); // an array of ZipEntry records
+
+zipEntries.forEach(function (zipEntry) {
+ console.log(zipEntry.toString()); // outputs zip entries information
+ if (zipEntry.entryName == "my_file.txt") {
+ console.log(zipEntry.getData().toString("utf8"));
+ }
+});
+// outputs the content of some_folder/my_file.txt
+console.log(zip.readAsText("some_folder/my_file.txt"));
+// extracts the specified file to the specified location
+zip.extractEntryTo(/*entry name*/ "some_folder/my_file.txt", /*target path*/ "/home/me/tempfolder", /*maintainEntryPath*/ false, /*overwrite*/ true);
+// extracts everything
+zip.extractAllTo(/*target path*/ "/home/me/zipcontent/", /*overwrite*/ true);
+
+// creating archives
+var zip = new AdmZip();
+
+// add file directly
+var content = "inner content of the file";
+zip.addFile("test.txt", Buffer.from(content, "utf8"), "entry comment goes here");
+// add local file
+zip.addLocalFile("/home/me/some_picture.png");
+// get everything as a buffer
+var willSendthis = zip.toBuffer();
+// or write everything to disk
+zip.writeZip(/*target file name*/ "/home/me/files.zip");
+
+// ... more examples in the wiki
+```
+
+For more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki).
+
+[](https://travis-ci.org/cthackers/adm-zip)
diff --git a/node_modules/adm-zip/adm-zip.js b/node_modules/adm-zip/adm-zip.js
new file mode 100644
index 00000000..e1f1ce57
--- /dev/null
+++ b/node_modules/adm-zip/adm-zip.js
@@ -0,0 +1,786 @@
+const Utils = require("./util");
+const pth = require("path");
+const ZipEntry = require("./zipEntry");
+const ZipFile = require("./zipFile");
+
+const get_Bool = (val, def) => (typeof val === "boolean" ? val : def);
+const get_Str = (val, def) => (typeof val === "string" ? val : def);
+
+const defaultOptions = {
+ // option "noSort" : if true it disables files sorting
+ noSort: false,
+ // read entries during load (initial loading may be slower)
+ readEntries: false,
+ // default method is none
+ method: Utils.Constants.NONE,
+ // file system
+ fs: null
+};
+
+module.exports = function (/**String*/ input, /** object */ options) {
+ let inBuffer = null;
+
+ // create object based default options, allowing them to be overwritten
+ const opts = Object.assign(Object.create(null), defaultOptions);
+
+ // test input variable
+ if (input && "object" === typeof input) {
+ // if value is not buffer we accept it to be object with options
+ if (!(input instanceof Uint8Array)) {
+ Object.assign(opts, input);
+ input = opts.input ? opts.input : undefined;
+ if (opts.input) delete opts.input;
+ }
+
+ // if input is buffer
+ if (Buffer.isBuffer(input)) {
+ inBuffer = input;
+ opts.method = Utils.Constants.BUFFER;
+ input = undefined;
+ }
+ }
+
+ // assign options
+ Object.assign(opts, options);
+
+ // instanciate utils filesystem
+ const filetools = new Utils(opts);
+
+ // if input is file name we retrieve its content
+ if (input && "string" === typeof input) {
+ // load zip file
+ if (filetools.fs.existsSync(input)) {
+ opts.method = Utils.Constants.FILE;
+ opts.filename = input;
+ inBuffer = filetools.fs.readFileSync(input);
+ } else {
+ throw new Error(Utils.Errors.INVALID_FILENAME);
+ }
+ }
+
+ // create variable
+ const _zip = new ZipFile(inBuffer, opts);
+
+ const { canonical, sanitize } = Utils;
+
+ function getEntry(/**Object*/ entry) {
+ if (entry && _zip) {
+ var item;
+ // If entry was given as a file name
+ if (typeof entry === "string") item = _zip.getEntry(entry);
+ // if entry was given as a ZipEntry object
+ if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName);
+
+ if (item) {
+ return item;
+ }
+ }
+ return null;
+ }
+
+ function fixPath(zipPath) {
+ const { join, normalize, sep } = pth.posix;
+ // convert windows file separators and normalize
+ return join(".", normalize(sep + zipPath.split("\\").join(sep) + sep));
+ }
+
+ return {
+ /**
+ * Extracts the given entry from the archive and returns the content as a Buffer object
+ * @param entry ZipEntry object or String with the full path of the entry
+ *
+ * @return Buffer or Null in case of error
+ */
+ readFile: function (/**Object*/ entry, /*String, Buffer*/ pass) {
+ var item = getEntry(entry);
+ return (item && item.getData(pass)) || null;
+ },
+
+ /**
+ * Asynchronous readFile
+ * @param entry ZipEntry object or String with the full path of the entry
+ * @param callback
+ *
+ * @return Buffer or Null in case of error
+ */
+ readFileAsync: function (/**Object*/ entry, /**Function*/ callback) {
+ var item = getEntry(entry);
+ if (item) {
+ item.getDataAsync(callback);
+ } else {
+ callback(null, "getEntry failed for:" + entry);
+ }
+ },
+
+ /**
+ * Extracts the given entry from the archive and returns the content as plain text in the given encoding
+ * @param entry ZipEntry object or String with the full path of the entry
+ * @param encoding Optional. If no encoding is specified utf8 is used
+ *
+ * @return String
+ */
+ readAsText: function (/**Object*/ entry, /**String=*/ encoding) {
+ var item = getEntry(entry);
+ if (item) {
+ var data = item.getData();
+ if (data && data.length) {
+ return data.toString(encoding || "utf8");
+ }
+ }
+ return "";
+ },
+
+ /**
+ * Asynchronous readAsText
+ * @param entry ZipEntry object or String with the full path of the entry
+ * @param callback
+ * @param encoding Optional. If no encoding is specified utf8 is used
+ *
+ * @return String
+ */
+ readAsTextAsync: function (/**Object*/ entry, /**Function*/ callback, /**String=*/ encoding) {
+ var item = getEntry(entry);
+ if (item) {
+ item.getDataAsync(function (data, err) {
+ if (err) {
+ callback(data, err);
+ return;
+ }
+
+ if (data && data.length) {
+ callback(data.toString(encoding || "utf8"));
+ } else {
+ callback("");
+ }
+ });
+ } else {
+ callback("");
+ }
+ },
+
+ /**
+ * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
+ *
+ * @param entry
+ */
+ deleteFile: function (/**Object*/ entry) {
+ // @TODO: test deleteFile
+ var item = getEntry(entry);
+ if (item) {
+ _zip.deleteEntry(item.entryName);
+ }
+ },
+
+ /**
+ * Adds a comment to the zip. The zip must be rewritten after adding the comment.
+ *
+ * @param comment
+ */
+ addZipComment: function (/**String*/ comment) {
+ // @TODO: test addZipComment
+ _zip.comment = comment;
+ },
+
+ /**
+ * Returns the zip comment
+ *
+ * @return String
+ */
+ getZipComment: function () {
+ return _zip.comment || "";
+ },
+
+ /**
+ * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
+ * The comment cannot exceed 65535 characters in length
+ *
+ * @param entry
+ * @param comment
+ */
+ addZipEntryComment: function (/**Object*/ entry, /**String*/ comment) {
+ var item = getEntry(entry);
+ if (item) {
+ item.comment = comment;
+ }
+ },
+
+ /**
+ * Returns the comment of the specified entry
+ *
+ * @param entry
+ * @return String
+ */
+ getZipEntryComment: function (/**Object*/ entry) {
+ var item = getEntry(entry);
+ if (item) {
+ return item.comment || "";
+ }
+ return "";
+ },
+
+ /**
+ * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
+ *
+ * @param entry
+ * @param content
+ */
+ updateFile: function (/**Object*/ entry, /**Buffer*/ content) {
+ var item = getEntry(entry);
+ if (item) {
+ item.setData(content);
+ }
+ },
+
+ /**
+ * Adds a file from the disk to the archive
+ *
+ * @param localPath File to add to zip
+ * @param zipPath Optional path inside the zip
+ * @param zipName Optional name for the file
+ */
+ addLocalFile: function (/**String*/ localPath, /**String=*/ zipPath, /**String=*/ zipName, /**String*/ comment) {
+ if (filetools.fs.existsSync(localPath)) {
+ // fix ZipPath
+ zipPath = zipPath ? fixPath(zipPath) : "";
+
+ // p - local file name
+ var p = localPath.split("\\").join("/").split("/").pop();
+
+ // add file name into zippath
+ zipPath += zipName ? zipName : p;
+
+ // read file attributes
+ const _attr = filetools.fs.statSync(localPath);
+
+ // add file into zip file
+ this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);
+ } else {
+ throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
+ }
+ },
+
+ /**
+ * Adds a local directory and all its nested files and directories to the archive
+ *
+ * @param localPath
+ * @param zipPath optional path inside zip
+ * @param filter optional RegExp or Function if files match will
+ * be included.
+ * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object
+ */
+ addLocalFolder: function (/**String*/ localPath, /**String=*/ zipPath, /**=RegExp|Function*/ filter, /**=number|object*/ attr) {
+ // Prepare filter
+ if (filter instanceof RegExp) {
+ // if filter is RegExp wrap it
+ filter = (function (rx) {
+ return function (filename) {
+ return rx.test(filename);
+ };
+ })(filter);
+ } else if ("function" !== typeof filter) {
+ // if filter is not function we will replace it
+ filter = function () {
+ return true;
+ };
+ }
+
+ // fix ZipPath
+ zipPath = zipPath ? fixPath(zipPath) : "";
+
+ // normalize the path first
+ localPath = pth.normalize(localPath);
+
+ if (filetools.fs.existsSync(localPath)) {
+ const items = filetools.findFiles(localPath);
+ const self = this;
+
+ if (items.length) {
+ items.forEach(function (filepath) {
+ var p = pth.relative(localPath, filepath).split("\\").join("/"); //windows fix
+ if (filter(p)) {
+ var stats = filetools.fs.statSync(filepath);
+ if (stats.isFile()) {
+ self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), "", attr ? attr : stats);
+ } else {
+ self.addFile(zipPath + p + "/", Buffer.alloc(0), "", attr ? attr : stats);
+ }
+ }
+ });
+ }
+ } else {
+ throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
+ }
+ },
+
+ /**
+ * Asynchronous addLocalFile
+ * @param localPath
+ * @param callback
+ * @param zipPath optional path inside zip
+ * @param filter optional RegExp or Function if files match will
+ * be included.
+ */
+ addLocalFolderAsync: function (/*String*/ localPath, /*Function*/ callback, /*String*/ zipPath, /*RegExp|Function*/ filter) {
+ if (filter instanceof RegExp) {
+ filter = (function (rx) {
+ return function (filename) {
+ return rx.test(filename);
+ };
+ })(filter);
+ } else if ("function" !== typeof filter) {
+ filter = function () {
+ return true;
+ };
+ }
+
+ // fix ZipPath
+ zipPath = zipPath ? fixPath(zipPath) : "";
+
+ // normalize the path first
+ localPath = pth.normalize(localPath);
+
+ var self = this;
+ filetools.fs.open(localPath, "r", function (err) {
+ if (err && err.code === "ENOENT") {
+ callback(undefined, Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
+ } else if (err) {
+ callback(undefined, err);
+ } else {
+ var items = filetools.findFiles(localPath);
+ var i = -1;
+
+ var next = function () {
+ i += 1;
+ if (i < items.length) {
+ var filepath = items[i];
+ var p = pth.relative(localPath, filepath).split("\\").join("/"); //windows fix
+ p = p
+ .normalize("NFD")
+ .replace(/[\u0300-\u036f]/g, "")
+ .replace(/[^\x20-\x7E]/g, ""); // accent fix
+ if (filter(p)) {
+ filetools.fs.stat(filepath, function (er0, stats) {
+ if (er0) callback(undefined, er0);
+ if (stats.isFile()) {
+ filetools.fs.readFile(filepath, function (er1, data) {
+ if (er1) {
+ callback(undefined, er1);
+ } else {
+ self.addFile(zipPath + p, data, "", stats);
+ next();
+ }
+ });
+ } else {
+ self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
+ next();
+ }
+ });
+ } else {
+ process.nextTick(() => {
+ next();
+ });
+ }
+ } else {
+ callback(true, undefined);
+ }
+ };
+
+ next();
+ }
+ });
+ },
+
+ /**
+ *
+ * @param {string} localPath - path where files will be extracted
+ * @param {object} props - optional properties
+ * @param {string} props.zipPath - optional path inside zip
+ * @param {regexp, function} props.filter - RegExp or Function if files match will be included.
+ */
+ addLocalFolderPromise: function (/*String*/ localPath, /* object */ props) {
+ return new Promise((resolve, reject) => {
+ const { filter, zipPath } = Object.assign({}, props);
+ this.addLocalFolderAsync(
+ localPath,
+ (done, err) => {
+ if (err) reject(err);
+ if (done) resolve(this);
+ },
+ zipPath,
+ filter
+ );
+ });
+ },
+
+ /**
+ * Allows you to create a entry (file or directory) in the zip file.
+ * If you want to create a directory the entryName must end in / and a null buffer should be provided.
+ * Comment and attributes are optional
+ *
+ * @param {string} entryName
+ * @param {Buffer | string} content - file content as buffer or utf8 coded string
+ * @param {string} comment - file comment
+ * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object
+ */
+ addFile: function (/**String*/ entryName, /**Buffer*/ content, /**String*/ comment, /**Number*/ attr) {
+ let entry = getEntry(entryName);
+ const update = entry != null;
+
+ // prepare new entry
+ if (!update) {
+ entry = new ZipEntry();
+ entry.entryName = entryName;
+ }
+ entry.comment = comment || "";
+
+ const isStat = "object" === typeof attr && attr instanceof filetools.fs.Stats;
+
+ // last modification time from file stats
+ if (isStat) {
+ entry.header.time = attr.mtime;
+ }
+
+ // Set file attribute
+ var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)
+
+ // extended attributes field for Unix
+ // set file type either S_IFDIR / S_IFREG
+ let unix = entry.isDirectory ? 0x4000 : 0x8000;
+
+ if (isStat) {
+ // File attributes from file stats
+ unix |= 0xfff & attr.mode;
+ } else if ("number" === typeof attr) {
+ // attr from given attr values
+ unix |= 0xfff & attr;
+ } else {
+ // Default values:
+ unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)
+ }
+
+ fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes
+
+ entry.attr = fileattr;
+
+ entry.setData(content);
+ if (!update) _zip.setEntry(entry);
+ },
+
+ /**
+ * Returns an array of ZipEntry objects representing the files and folders inside the archive
+ *
+ * @return Array
+ */
+ getEntries: function () {
+ return _zip ? _zip.entries : [];
+ },
+
+ /**
+ * Returns a ZipEntry object representing the file or folder specified by ``name``.
+ *
+ * @param name
+ * @return ZipEntry
+ */
+ getEntry: function (/**String*/ name) {
+ return getEntry(name);
+ },
+
+ getEntryCount: function () {
+ return _zip.getEntryCount();
+ },
+
+ forEach: function (callback) {
+ return _zip.forEach(callback);
+ },
+
+ /**
+ * Extracts the given entry to the given targetPath
+ * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
+ *
+ * @param entry ZipEntry object or String with the full path of the entry
+ * @param targetPath Target folder where to write the file
+ * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder
+ * will be created in targetPath as well. Default is TRUE
+ * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+ * Default is FALSE
+ * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
+ * Default is FALSE
+ * @param outFileName String If set will override the filename of the extracted file (Only works if the entry is a file)
+ *
+ * @return Boolean
+ */
+ extractEntryTo: function (
+ /**Object*/ entry,
+ /**String*/ targetPath,
+ /**Boolean*/ maintainEntryPath,
+ /**Boolean*/ overwrite,
+ /**Boolean*/ keepOriginalPermission,
+ /**String**/ outFileName
+ ) {
+ overwrite = get_Bool(overwrite, false);
+ keepOriginalPermission = get_Bool(keepOriginalPermission, false);
+ maintainEntryPath = get_Bool(maintainEntryPath, true);
+ outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, undefined));
+
+ var item = getEntry(entry);
+ if (!item) {
+ throw new Error(Utils.Errors.NO_ENTRY);
+ }
+
+ var entryName = canonical(item.entryName);
+
+ var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));
+
+ if (item.isDirectory) {
+ var children = _zip.getEntryChildren(item);
+ children.forEach(function (child) {
+ if (child.isDirectory) return;
+ var content = child.getData();
+ if (!content) {
+ throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
+ }
+ var name = canonical(child.entryName);
+ var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));
+ // The reverse operation for attr depend on method addFile()
+ const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;
+ filetools.writeFileTo(childName, content, overwrite, fileAttr);
+ });
+ return true;
+ }
+
+ var content = item.getData();
+ if (!content) throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
+
+ if (filetools.fs.existsSync(target) && !overwrite) {
+ throw new Error(Utils.Errors.CANT_OVERRIDE);
+ }
+ // The reverse operation for attr depend on method addFile()
+ const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
+ filetools.writeFileTo(target, content, overwrite, fileAttr);
+
+ return true;
+ },
+
+ /**
+ * Test the archive
+ *
+ */
+ test: function (pass) {
+ if (!_zip) {
+ return false;
+ }
+
+ for (var entry in _zip.entries) {
+ try {
+ if (entry.isDirectory) {
+ continue;
+ }
+ var content = _zip.entries[entry].getData(pass);
+ if (!content) {
+ return false;
+ }
+ } catch (err) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ /**
+ * Extracts the entire archive to the given location
+ *
+ * @param targetPath Target location
+ * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+ * Default is FALSE
+ * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
+ * Default is FALSE
+ */
+ extractAllTo: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /*String, Buffer*/ pass) {
+ overwrite = get_Bool(overwrite, false);
+ pass = get_Str(keepOriginalPermission, pass);
+ keepOriginalPermission = get_Bool(keepOriginalPermission, false);
+ if (!_zip) {
+ throw new Error(Utils.Errors.NO_ZIP);
+ }
+ _zip.entries.forEach(function (entry) {
+ var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));
+ if (entry.isDirectory) {
+ filetools.makeDir(entryName);
+ return;
+ }
+ var content = entry.getData(pass);
+ if (!content) {
+ throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
+ }
+ // The reverse operation for attr depend on method addFile()
+ const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
+ filetools.writeFileTo(entryName, content, overwrite, fileAttr);
+ try {
+ filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);
+ } catch (err) {
+ throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
+ }
+ });
+ },
+
+ /**
+ * Asynchronous extractAllTo
+ *
+ * @param targetPath Target location
+ * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+ * Default is FALSE
+ * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
+ * Default is FALSE
+ * @param callback The callback will be executed when all entries are extracted successfully or any error is thrown.
+ */
+ extractAllToAsync: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /**Function*/ callback) {
+ overwrite = get_Bool(overwrite, false);
+ if (typeof keepOriginalPermission === "function" && !callback) callback = keepOriginalPermission;
+ keepOriginalPermission = get_Bool(keepOriginalPermission, false);
+ if (!callback) {
+ callback = function (err) {
+ throw new Error(err);
+ };
+ }
+ if (!_zip) {
+ callback(new Error(Utils.Errors.NO_ZIP));
+ return;
+ }
+
+ targetPath = pth.resolve(targetPath);
+ // convert entryName to
+ const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));
+ const getError = (msg, file) => new Error(msg + ': "' + file + '"');
+
+ // separate directories from files
+ const dirEntries = [];
+ const fileEntries = new Set();
+ _zip.entries.forEach((e) => {
+ if (e.isDirectory) {
+ dirEntries.push(e);
+ } else {
+ fileEntries.add(e);
+ }
+ });
+
+ // Create directory entries first synchronously
+ // this prevents race condition and assures folders are there before writing files
+ for (const entry of dirEntries) {
+ const dirPath = getPath(entry);
+ // The reverse operation for attr depend on method addFile()
+ const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
+ try {
+ filetools.makeDir(dirPath);
+ if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);
+ // in unix timestamp will change if files are later added to folder, but still
+ filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);
+ } catch (er) {
+ callback(getError("Unable to create folder", dirPath));
+ }
+ }
+
+ // callback wrapper, for some house keeping
+ const done = () => {
+ if (fileEntries.size === 0) {
+ callback();
+ }
+ };
+
+ // Extract file entries asynchronously
+ for (const entry of fileEntries.values()) {
+ const entryName = pth.normalize(canonical(entry.entryName.toString()));
+ const filePath = sanitize(targetPath, entryName);
+ entry.getDataAsync(function (content, err_1) {
+ if (err_1) {
+ callback(new Error(err_1));
+ return;
+ }
+ if (!content) {
+ callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));
+ } else {
+ // The reverse operation for attr depend on method addFile()
+ const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
+ filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {
+ if (!succ) {
+ callback(getError("Unable to write file", filePath));
+ return;
+ }
+ filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {
+ if (err_2) {
+ callback(getError("Unable to set times", filePath));
+ return;
+ }
+ fileEntries.delete(entry);
+ // call the callback if it was last entry
+ done();
+ });
+ });
+ }
+ });
+ }
+ // call the callback if fileEntries was empty
+ done();
+ },
+
+ /**
+ * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
+ *
+ * @param targetFileName
+ * @param callback
+ */
+ writeZip: function (/**String*/ targetFileName, /**Function*/ callback) {
+ if (arguments.length === 1) {
+ if (typeof targetFileName === "function") {
+ callback = targetFileName;
+ targetFileName = "";
+ }
+ }
+
+ if (!targetFileName && opts.filename) {
+ targetFileName = opts.filename;
+ }
+ if (!targetFileName) return;
+
+ var zipData = _zip.compressToBuffer();
+ if (zipData) {
+ var ok = filetools.writeFileTo(targetFileName, zipData, true);
+ if (typeof callback === "function") callback(!ok ? new Error("failed") : null, "");
+ }
+ },
+
+ writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {
+ const { overwrite, perm } = Object.assign({ overwrite: true }, props);
+
+ return new Promise((resolve, reject) => {
+ // find file name
+ if (!targetFileName && opts.filename) targetFileName = opts.filename;
+ if (!targetFileName) reject("ADM-ZIP: ZIP File Name Missing");
+
+ this.toBufferPromise().then((zipData) => {
+ const ret = (done) => (done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file"));
+ filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);
+ }, reject);
+ });
+ },
+
+ toBufferPromise: function () {
+ return new Promise((resolve, reject) => {
+ _zip.toAsyncBuffer(resolve, reject);
+ });
+ },
+
+ /**
+ * Returns the content of the entire zip file as a Buffer object
+ *
+ * @return Buffer
+ */
+ toBuffer: function (/**Function=*/ onSuccess, /**Function=*/ onFail, /**Function=*/ onItemStart, /**Function=*/ onItemEnd) {
+ this.valueOf = 2;
+ if (typeof onSuccess === "function") {
+ _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
+ return null;
+ }
+ return _zip.compressToBuffer();
+ }
+ };
+};
diff --git a/node_modules/adm-zip/headers/entryHeader.js b/node_modules/adm-zip/headers/entryHeader.js
new file mode 100644
index 00000000..572b9a74
--- /dev/null
+++ b/node_modules/adm-zip/headers/entryHeader.js
@@ -0,0 +1,338 @@
+var Utils = require("../util"),
+ Constants = Utils.Constants;
+
+/* The central directory file header */
+module.exports = function () {
+ var _verMade = 20, // v2.0
+ _version = 10, // v1.0
+ _flags = 0,
+ _method = 0,
+ _time = 0,
+ _crc = 0,
+ _compressedSize = 0,
+ _size = 0,
+ _fnameLen = 0,
+ _extraLen = 0,
+ _comLen = 0,
+ _diskStart = 0,
+ _inattr = 0,
+ _attr = 0,
+ _offset = 0;
+
+ _verMade |= Utils.isWin ? 0x0a00 : 0x0300;
+
+ // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.
+ // Without it file names may be corrupted for other apps when file names use unicode chars
+ _flags |= Constants.FLG_EFS;
+
+ var _dataHeader = {};
+
+ function setTime(val) {
+ val = new Date(val);
+ _time =
+ (((val.getFullYear() - 1980) & 0x7f) << 25) | // b09-16 years from 1980
+ ((val.getMonth() + 1) << 21) | // b05-08 month
+ (val.getDate() << 16) | // b00-04 hour
+ // 2 bytes time
+ (val.getHours() << 11) | // b11-15 hour
+ (val.getMinutes() << 5) | // b05-10 minute
+ (val.getSeconds() >> 1); // b00-04 seconds divided by 2
+ }
+
+ setTime(+new Date());
+
+ return {
+ get made() {
+ return _verMade;
+ },
+ set made(val) {
+ _verMade = val;
+ },
+
+ get version() {
+ return _version;
+ },
+ set version(val) {
+ _version = val;
+ },
+
+ get flags() {
+ return _flags;
+ },
+ set flags(val) {
+ _flags = val;
+ },
+
+ get method() {
+ return _method;
+ },
+ set method(val) {
+ switch (val) {
+ case Constants.STORED:
+ this.version = 10;
+ case Constants.DEFLATED:
+ default:
+ this.version = 20;
+ }
+ _method = val;
+ },
+
+ get time() {
+ return new Date(((_time >> 25) & 0x7f) + 1980, ((_time >> 21) & 0x0f) - 1, (_time >> 16) & 0x1f, (_time >> 11) & 0x1f, (_time >> 5) & 0x3f, (_time & 0x1f) << 1);
+ },
+ set time(val) {
+ setTime(val);
+ },
+
+ get crc() {
+ return _crc;
+ },
+ set crc(val) {
+ _crc = Math.max(0, val) >>> 0;
+ },
+
+ get compressedSize() {
+ return _compressedSize;
+ },
+ set compressedSize(val) {
+ _compressedSize = Math.max(0, val) >>> 0;
+ },
+
+ get size() {
+ return _size;
+ },
+ set size(val) {
+ _size = Math.max(0, val) >>> 0;
+ },
+
+ get fileNameLength() {
+ return _fnameLen;
+ },
+ set fileNameLength(val) {
+ _fnameLen = val;
+ },
+
+ get extraLength() {
+ return _extraLen;
+ },
+ set extraLength(val) {
+ _extraLen = val;
+ },
+
+ get commentLength() {
+ return _comLen;
+ },
+ set commentLength(val) {
+ _comLen = val;
+ },
+
+ get diskNumStart() {
+ return _diskStart;
+ },
+ set diskNumStart(val) {
+ _diskStart = Math.max(0, val) >>> 0;
+ },
+
+ get inAttr() {
+ return _inattr;
+ },
+ set inAttr(val) {
+ _inattr = Math.max(0, val) >>> 0;
+ },
+
+ get attr() {
+ return _attr;
+ },
+ set attr(val) {
+ _attr = Math.max(0, val) >>> 0;
+ },
+
+ // get Unix file permissions
+ get fileAttr() {
+ return _attr ? (((_attr >>> 0) | 0) >> 16) & 0xfff : 0;
+ },
+
+ get offset() {
+ return _offset;
+ },
+ set offset(val) {
+ _offset = Math.max(0, val) >>> 0;
+ },
+
+ get encripted() {
+ return (_flags & 1) === 1;
+ },
+
+ get entryHeaderSize() {
+ return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
+ },
+
+ get realDataOffset() {
+ return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;
+ },
+
+ get dataHeader() {
+ return _dataHeader;
+ },
+
+ loadDataHeaderFromBinary: function (/*Buffer*/ input) {
+ var data = input.slice(_offset, _offset + Constants.LOCHDR);
+ // 30 bytes and should start with "PK\003\004"
+ if (data.readUInt32LE(0) !== Constants.LOCSIG) {
+ throw new Error(Utils.Errors.INVALID_LOC);
+ }
+ _dataHeader = {
+ // version needed to extract
+ version: data.readUInt16LE(Constants.LOCVER),
+ // general purpose bit flag
+ flags: data.readUInt16LE(Constants.LOCFLG),
+ // compression method
+ method: data.readUInt16LE(Constants.LOCHOW),
+ // modification time (2 bytes time, 2 bytes date)
+ time: data.readUInt32LE(Constants.LOCTIM),
+ // uncompressed file crc-32 value
+ crc: data.readUInt32LE(Constants.LOCCRC),
+ // compressed size
+ compressedSize: data.readUInt32LE(Constants.LOCSIZ),
+ // uncompressed size
+ size: data.readUInt32LE(Constants.LOCLEN),
+ // filename length
+ fnameLen: data.readUInt16LE(Constants.LOCNAM),
+ // extra field length
+ extraLen: data.readUInt16LE(Constants.LOCEXT)
+ };
+ },
+
+ loadFromBinary: function (/*Buffer*/ data) {
+ // data should be 46 bytes and start with "PK 01 02"
+ if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
+ throw new Error(Utils.Errors.INVALID_CEN);
+ }
+ // version made by
+ _verMade = data.readUInt16LE(Constants.CENVEM);
+ // version needed to extract
+ _version = data.readUInt16LE(Constants.CENVER);
+ // encrypt, decrypt flags
+ _flags = data.readUInt16LE(Constants.CENFLG);
+ // compression method
+ _method = data.readUInt16LE(Constants.CENHOW);
+ // modification time (2 bytes time, 2 bytes date)
+ _time = data.readUInt32LE(Constants.CENTIM);
+ // uncompressed file crc-32 value
+ _crc = data.readUInt32LE(Constants.CENCRC);
+ // compressed size
+ _compressedSize = data.readUInt32LE(Constants.CENSIZ);
+ // uncompressed size
+ _size = data.readUInt32LE(Constants.CENLEN);
+ // filename length
+ _fnameLen = data.readUInt16LE(Constants.CENNAM);
+ // extra field length
+ _extraLen = data.readUInt16LE(Constants.CENEXT);
+ // file comment length
+ _comLen = data.readUInt16LE(Constants.CENCOM);
+ // volume number start
+ _diskStart = data.readUInt16LE(Constants.CENDSK);
+ // internal file attributes
+ _inattr = data.readUInt16LE(Constants.CENATT);
+ // external file attributes
+ _attr = data.readUInt32LE(Constants.CENATX);
+ // LOC header offset
+ _offset = data.readUInt32LE(Constants.CENOFF);
+ },
+
+ dataHeaderToBinary: function () {
+ // LOC header size (30 bytes)
+ var data = Buffer.alloc(Constants.LOCHDR);
+ // "PK\003\004"
+ data.writeUInt32LE(Constants.LOCSIG, 0);
+ // version needed to extract
+ data.writeUInt16LE(_version, Constants.LOCVER);
+ // general purpose bit flag
+ data.writeUInt16LE(_flags, Constants.LOCFLG);
+ // compression method
+ data.writeUInt16LE(_method, Constants.LOCHOW);
+ // modification time (2 bytes time, 2 bytes date)
+ data.writeUInt32LE(_time, Constants.LOCTIM);
+ // uncompressed file crc-32 value
+ data.writeUInt32LE(_crc, Constants.LOCCRC);
+ // compressed size
+ data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);
+ // uncompressed size
+ data.writeUInt32LE(_size, Constants.LOCLEN);
+ // filename length
+ data.writeUInt16LE(_fnameLen, Constants.LOCNAM);
+ // extra field length
+ data.writeUInt16LE(_extraLen, Constants.LOCEXT);
+ return data;
+ },
+
+ entryHeaderToBinary: function () {
+ // CEN header size (46 bytes)
+ var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);
+ // "PK\001\002"
+ data.writeUInt32LE(Constants.CENSIG, 0);
+ // version made by
+ data.writeUInt16LE(_verMade, Constants.CENVEM);
+ // version needed to extract
+ data.writeUInt16LE(_version, Constants.CENVER);
+ // encrypt, decrypt flags
+ data.writeUInt16LE(_flags, Constants.CENFLG);
+ // compression method
+ data.writeUInt16LE(_method, Constants.CENHOW);
+ // modification time (2 bytes time, 2 bytes date)
+ data.writeUInt32LE(_time, Constants.CENTIM);
+ // uncompressed file crc-32 value
+ data.writeUInt32LE(_crc, Constants.CENCRC);
+ // compressed size
+ data.writeUInt32LE(_compressedSize, Constants.CENSIZ);
+ // uncompressed size
+ data.writeUInt32LE(_size, Constants.CENLEN);
+ // filename length
+ data.writeUInt16LE(_fnameLen, Constants.CENNAM);
+ // extra field length
+ data.writeUInt16LE(_extraLen, Constants.CENEXT);
+ // file comment length
+ data.writeUInt16LE(_comLen, Constants.CENCOM);
+ // volume number start
+ data.writeUInt16LE(_diskStart, Constants.CENDSK);
+ // internal file attributes
+ data.writeUInt16LE(_inattr, Constants.CENATT);
+ // external file attributes
+ data.writeUInt32LE(_attr, Constants.CENATX);
+ // LOC header offset
+ data.writeUInt32LE(_offset, Constants.CENOFF);
+ // fill all with
+ data.fill(0x00, Constants.CENHDR);
+ return data;
+ },
+
+ toJSON: function () {
+ const bytes = function (nr) {
+ return nr + " bytes";
+ };
+
+ return {
+ made: _verMade,
+ version: _version,
+ flags: _flags,
+ method: Utils.methodToString(_method),
+ time: this.time,
+ crc: "0x" + _crc.toString(16).toUpperCase(),
+ compressedSize: bytes(_compressedSize),
+ size: bytes(_size),
+ fileNameLength: bytes(_fnameLen),
+ extraLength: bytes(_extraLen),
+ commentLength: bytes(_comLen),
+ diskNumStart: _diskStart,
+ inAttr: _inattr,
+ attr: _attr,
+ offset: _offset,
+ entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)
+ };
+ },
+
+ toString: function () {
+ return JSON.stringify(this.toJSON(), null, "\t");
+ }
+ };
+};
diff --git a/node_modules/adm-zip/headers/index.js b/node_modules/adm-zip/headers/index.js
new file mode 100644
index 00000000..b54a7222
--- /dev/null
+++ b/node_modules/adm-zip/headers/index.js
@@ -0,0 +1,2 @@
+exports.EntryHeader = require("./entryHeader");
+exports.MainHeader = require("./mainHeader");
diff --git a/node_modules/adm-zip/headers/mainHeader.js b/node_modules/adm-zip/headers/mainHeader.js
new file mode 100644
index 00000000..dcea01dc
--- /dev/null
+++ b/node_modules/adm-zip/headers/mainHeader.js
@@ -0,0 +1,130 @@
+var Utils = require("../util"),
+ Constants = Utils.Constants;
+
+/* The entries in the end of central directory */
+module.exports = function () {
+ var _volumeEntries = 0,
+ _totalEntries = 0,
+ _size = 0,
+ _offset = 0,
+ _commentLength = 0;
+
+ return {
+ get diskEntries() {
+ return _volumeEntries;
+ },
+ set diskEntries(/*Number*/ val) {
+ _volumeEntries = _totalEntries = val;
+ },
+
+ get totalEntries() {
+ return _totalEntries;
+ },
+ set totalEntries(/*Number*/ val) {
+ _totalEntries = _volumeEntries = val;
+ },
+
+ get size() {
+ return _size;
+ },
+ set size(/*Number*/ val) {
+ _size = val;
+ },
+
+ get offset() {
+ return _offset;
+ },
+ set offset(/*Number*/ val) {
+ _offset = val;
+ },
+
+ get commentLength() {
+ return _commentLength;
+ },
+ set commentLength(/*Number*/ val) {
+ _commentLength = val;
+ },
+
+ get mainHeaderSize() {
+ return Constants.ENDHDR + _commentLength;
+ },
+
+ loadFromBinary: function (/*Buffer*/ data) {
+ // data should be 22 bytes and start with "PK 05 06"
+ // or be 56+ bytes and start with "PK 06 06" for Zip64
+ if (
+ (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&
+ (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)
+ ) {
+ throw new Error(Utils.Errors.INVALID_END);
+ }
+
+ if (data.readUInt32LE(0) === Constants.ENDSIG) {
+ // number of entries on this volume
+ _volumeEntries = data.readUInt16LE(Constants.ENDSUB);
+ // total number of entries
+ _totalEntries = data.readUInt16LE(Constants.ENDTOT);
+ // central directory size in bytes
+ _size = data.readUInt32LE(Constants.ENDSIZ);
+ // offset of first CEN header
+ _offset = data.readUInt32LE(Constants.ENDOFF);
+ // zip file comment length
+ _commentLength = data.readUInt16LE(Constants.ENDCOM);
+ } else {
+ // number of entries on this volume
+ _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);
+ // total number of entries
+ _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);
+ // central directory size in bytes
+ _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZE);
+ // offset of first CEN header
+ _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);
+
+ _commentLength = 0;
+ }
+ },
+
+ toBinary: function () {
+ var b = Buffer.alloc(Constants.ENDHDR + _commentLength);
+ // "PK 05 06" signature
+ b.writeUInt32LE(Constants.ENDSIG, 0);
+ b.writeUInt32LE(0, 4);
+ // number of entries on this volume
+ b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);
+ // total number of entries
+ b.writeUInt16LE(_totalEntries, Constants.ENDTOT);
+ // central directory size in bytes
+ b.writeUInt32LE(_size, Constants.ENDSIZ);
+ // offset of first CEN header
+ b.writeUInt32LE(_offset, Constants.ENDOFF);
+ // zip file comment length
+ b.writeUInt16LE(_commentLength, Constants.ENDCOM);
+ // fill comment memory with spaces so no garbage is left there
+ b.fill(" ", Constants.ENDHDR);
+
+ return b;
+ },
+
+ toJSON: function () {
+ // creates 0x0000 style output
+ const offset = function (nr, len) {
+ let offs = nr.toString(16).toUpperCase();
+ while (offs.length < len) offs = "0" + offs;
+ return "0x" + offs;
+ };
+
+ return {
+ diskEntries: _volumeEntries,
+ totalEntries: _totalEntries,
+ size: _size + " bytes",
+ offset: offset(_offset, 4),
+ commentLength: _commentLength
+ };
+ },
+
+ toString: function () {
+ return JSON.stringify(this.toJSON(), null, "\t");
+ }
+ };
+};
+ // Misspelled
\ No newline at end of file
diff --git a/node_modules/adm-zip/methods/deflater.js b/node_modules/adm-zip/methods/deflater.js
new file mode 100644
index 00000000..992de8f1
--- /dev/null
+++ b/node_modules/adm-zip/methods/deflater.js
@@ -0,0 +1,33 @@
+module.exports = function (/*Buffer*/ inbuf) {
+ var zlib = require("zlib");
+
+ var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };
+
+ return {
+ deflate: function () {
+ return zlib.deflateRawSync(inbuf, opts);
+ },
+
+ deflateAsync: function (/*Function*/ callback) {
+ var tmp = zlib.createDeflateRaw(opts),
+ parts = [],
+ total = 0;
+ tmp.on("data", function (data) {
+ parts.push(data);
+ total += data.length;
+ });
+ tmp.on("end", function () {
+ var buf = Buffer.alloc(total),
+ written = 0;
+ buf.fill(0);
+ for (var i = 0; i < parts.length; i++) {
+ var part = parts[i];
+ part.copy(buf, written);
+ written += part.length;
+ }
+ callback && callback(buf);
+ });
+ tmp.end(inbuf);
+ }
+ };
+};
diff --git a/node_modules/adm-zip/methods/index.js b/node_modules/adm-zip/methods/index.js
new file mode 100644
index 00000000..5285677f
--- /dev/null
+++ b/node_modules/adm-zip/methods/index.js
@@ -0,0 +1,3 @@
+exports.Deflater = require("./deflater");
+exports.Inflater = require("./inflater");
+exports.ZipCrypto = require("./zipcrypto");
diff --git a/node_modules/adm-zip/methods/inflater.js b/node_modules/adm-zip/methods/inflater.js
new file mode 100644
index 00000000..3ed0d589
--- /dev/null
+++ b/node_modules/adm-zip/methods/inflater.js
@@ -0,0 +1,31 @@
+module.exports = function (/*Buffer*/ inbuf) {
+ var zlib = require("zlib");
+
+ return {
+ inflate: function () {
+ return zlib.inflateRawSync(inbuf);
+ },
+
+ inflateAsync: function (/*Function*/ callback) {
+ var tmp = zlib.createInflateRaw(),
+ parts = [],
+ total = 0;
+ tmp.on("data", function (data) {
+ parts.push(data);
+ total += data.length;
+ });
+ tmp.on("end", function () {
+ var buf = Buffer.alloc(total),
+ written = 0;
+ buf.fill(0);
+ for (var i = 0; i < parts.length; i++) {
+ var part = parts[i];
+ part.copy(buf, written);
+ written += part.length;
+ }
+ callback && callback(buf);
+ });
+ tmp.end(inbuf);
+ }
+ };
+};
diff --git a/node_modules/adm-zip/methods/zipcrypto.js b/node_modules/adm-zip/methods/zipcrypto.js
new file mode 100644
index 00000000..701b5ce4
--- /dev/null
+++ b/node_modules/adm-zip/methods/zipcrypto.js
@@ -0,0 +1,170 @@
+"use strict";
+
+// node crypt, we use it for generate salt
+// eslint-disable-next-line node/no-unsupported-features/node-builtins
+const { randomFillSync } = require("crypto");
+
+// generate CRC32 lookup table
+const crctable = new Uint32Array(256).map((t, crc) => {
+ for (let j = 0; j < 8; j++) {
+ if (0 !== (crc & 1)) {
+ crc = (crc >>> 1) ^ 0xedb88320;
+ } else {
+ crc >>>= 1;
+ }
+ }
+ return crc >>> 0;
+});
+
+// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)
+const uMul = (a, b) => Math.imul(a, b) >>> 0;
+
+// crc32 byte single update (actually same function is part of utils.crc32 function :) )
+const crc32update = (pCrc32, bval) => {
+ return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);
+};
+
+// function for generating salt for encrytion header
+const genSalt = () => {
+ if ("function" === typeof randomFillSync) {
+ return randomFillSync(Buffer.alloc(12));
+ } else {
+ // fallback if function is not defined
+ return genSalt.node();
+ }
+};
+
+// salt generation with node random function (mainly as fallback)
+genSalt.node = () => {
+ const salt = Buffer.alloc(12);
+ const len = salt.length;
+ for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;
+ return salt;
+};
+
+// general config
+const config = {
+ genSalt
+};
+
+// Class Initkeys handles same basic ops with keys
+function Initkeys(pw) {
+ const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);
+ this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);
+ for (let i = 0; i < pass.length; i++) {
+ this.updateKeys(pass[i]);
+ }
+}
+
+Initkeys.prototype.updateKeys = function (byteValue) {
+ const keys = this.keys;
+ keys[0] = crc32update(keys[0], byteValue);
+ keys[1] += keys[0] & 0xff;
+ keys[1] = uMul(keys[1], 134775813) + 1;
+ keys[2] = crc32update(keys[2], keys[1] >>> 24);
+ return byteValue;
+};
+
+Initkeys.prototype.next = function () {
+ const k = (this.keys[2] | 2) >>> 0; // key
+ return (uMul(k, k ^ 1) >> 8) & 0xff; // decode
+};
+
+function make_decrypter(/*Buffer*/ pwd) {
+ // 1. Stage initialize key
+ const keys = new Initkeys(pwd);
+
+ // return decrypter function
+ return function (/*Buffer*/ data) {
+ // result - we create new Buffer for results
+ const result = Buffer.alloc(data.length);
+ let pos = 0;
+ // process input data
+ for (let c of data) {
+ //c ^= keys.next();
+ //result[pos++] = c; // decode & Save Value
+ result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte
+ }
+ return result;
+ };
+}
+
+function make_encrypter(/*Buffer*/ pwd) {
+ // 1. Stage initialize key
+ const keys = new Initkeys(pwd);
+
+ // return encrypting function, result and pos is here so we dont have to merge buffers later
+ return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {
+ // result - we create new Buffer for results
+ if (!result) result = Buffer.alloc(data.length);
+ // process input data
+ for (let c of data) {
+ const k = keys.next(); // save key byte
+ result[pos++] = c ^ k; // save val
+ keys.updateKeys(c); // update keys with decoded byte
+ }
+ return result;
+ };
+}
+
+function decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {
+ if (!data || !Buffer.isBuffer(data) || data.length < 12) {
+ return Buffer.alloc(0);
+ }
+
+ // 1. We Initialize and generate decrypting function
+ const decrypter = make_decrypter(pwd);
+
+ // 2. decrypt salt what is always 12 bytes and is a part of file content
+ const salt = decrypter(data.slice(0, 12));
+
+ // 3. does password meet expectations
+ if (salt[11] !== header.crc >>> 24) {
+ throw "ADM-ZIP: Wrong Password";
+ }
+
+ // 4. decode content
+ return decrypter(data.slice(12));
+}
+
+// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality
+function _salter(data) {
+ if (Buffer.isBuffer(data) && data.length >= 12) {
+ // be aware - currently salting buffer data is modified
+ config.genSalt = function () {
+ return data.slice(0, 12);
+ };
+ } else if (data === "node") {
+ // test salt generation with node random function
+ config.genSalt = genSalt.node;
+ } else {
+ // if value is not acceptable config gets reset.
+ config.genSalt = genSalt;
+ }
+}
+
+function encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {
+ // 1. test data if data is not Buffer we make buffer from it
+ if (data == null) data = Buffer.alloc(0);
+ // if data is not buffer be make buffer from it
+ if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());
+
+ // 2. We Initialize and generate encrypting function
+ const encrypter = make_encrypter(pwd);
+
+ // 3. generate salt (12-bytes of random data)
+ const salt = config.genSalt();
+ salt[11] = (header.crc >>> 24) & 0xff;
+
+ // old implementations (before PKZip 2.04g) used two byte check
+ if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;
+
+ // 4. create output
+ const result = Buffer.alloc(data.length + 12);
+ encrypter(salt, result);
+
+ // finally encode content
+ return encrypter(data, result, 12);
+}
+
+module.exports = { decrypt, encrypt, _salter };
diff --git a/node_modules/adm-zip/package.json b/node_modules/adm-zip/package.json
new file mode 100644
index 00000000..ebc59ea6
--- /dev/null
+++ b/node_modules/adm-zip/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "adm-zip",
+ "version": "0.5.10",
+ "description": "Javascript implementation of zip for nodejs with support for electron original-fs. Allows user to create or extract zip files both in memory or to/from disk",
+ "scripts": {
+ "test": "mocha -R spec",
+ "test:format": "npm run format:prettier:raw -- --check",
+ "format": "npm run format:prettier",
+ "format:prettier": "npm run format:prettier:raw -- --write",
+ "format:prettier:raw": "prettier \"**/*.{js,yml,json}\""
+ },
+ "keywords": [
+ "zip",
+ "methods",
+ "archive",
+ "unzip"
+ ],
+ "homepage": "https://github.com/cthackers/adm-zip",
+ "author": "Nasca Iacob (https://github.com/cthackers)",
+ "bugs": {
+ "email": "sy@another-d-mention.ro",
+ "url": "https://github.com/cthackers/adm-zip/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "adm-zip.js",
+ "headers",
+ "methods",
+ "util",
+ "zipEntry.js",
+ "zipFile.js",
+ "LICENSE"
+ ],
+ "main": "adm-zip.js",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/cthackers/adm-zip.git"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "devDependencies": {
+ "chai": "^4.3.4",
+ "mocha": "^10.2.0",
+ "prettier": "^2.2.1",
+ "rimraf": "^3.0.2"
+ }
+}
diff --git a/node_modules/adm-zip/util/constants.js b/node_modules/adm-zip/util/constants.js
new file mode 100644
index 00000000..119954ba
--- /dev/null
+++ b/node_modules/adm-zip/util/constants.js
@@ -0,0 +1,142 @@
+module.exports = {
+ /* The local file header */
+ LOCHDR : 30, // LOC header size
+ LOCSIG : 0x04034b50, // "PK\003\004"
+ LOCVER : 4, // version needed to extract
+ LOCFLG : 6, // general purpose bit flag
+ LOCHOW : 8, // compression method
+ LOCTIM : 10, // modification time (2 bytes time, 2 bytes date)
+ LOCCRC : 14, // uncompressed file crc-32 value
+ LOCSIZ : 18, // compressed size
+ LOCLEN : 22, // uncompressed size
+ LOCNAM : 26, // filename length
+ LOCEXT : 28, // extra field length
+
+ /* The Data descriptor */
+ EXTSIG : 0x08074b50, // "PK\007\008"
+ EXTHDR : 16, // EXT header size
+ EXTCRC : 4, // uncompressed file crc-32 value
+ EXTSIZ : 8, // compressed size
+ EXTLEN : 12, // uncompressed size
+
+ /* The central directory file header */
+ CENHDR : 46, // CEN header size
+ CENSIG : 0x02014b50, // "PK\001\002"
+ CENVEM : 4, // version made by
+ CENVER : 6, // version needed to extract
+ CENFLG : 8, // encrypt, decrypt flags
+ CENHOW : 10, // compression method
+ CENTIM : 12, // modification time (2 bytes time, 2 bytes date)
+ CENCRC : 16, // uncompressed file crc-32 value
+ CENSIZ : 20, // compressed size
+ CENLEN : 24, // uncompressed size
+ CENNAM : 28, // filename length
+ CENEXT : 30, // extra field length
+ CENCOM : 32, // file comment length
+ CENDSK : 34, // volume number start
+ CENATT : 36, // internal file attributes
+ CENATX : 38, // external file attributes (host system dependent)
+ CENOFF : 42, // LOC header offset
+
+ /* The entries in the end of central directory */
+ ENDHDR : 22, // END header size
+ ENDSIG : 0x06054b50, // "PK\005\006"
+ ENDSUB : 8, // number of entries on this disk
+ ENDTOT : 10, // total number of entries
+ ENDSIZ : 12, // central directory size in bytes
+ ENDOFF : 16, // offset of first CEN header
+ ENDCOM : 20, // zip file comment length
+
+ END64HDR : 20, // zip64 END header size
+ END64SIG : 0x07064b50, // zip64 Locator signature, "PK\006\007"
+ END64START : 4, // number of the disk with the start of the zip64
+ END64OFF : 8, // relative offset of the zip64 end of central directory
+ END64NUMDISKS : 16, // total number of disks
+
+ ZIP64SIG : 0x06064b50, // zip64 signature, "PK\006\006"
+ ZIP64HDR : 56, // zip64 record minimum size
+ ZIP64LEAD : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE
+ ZIP64SIZE : 4, // zip64 size of the central directory record
+ ZIP64VEM : 12, // zip64 version made by
+ ZIP64VER : 14, // zip64 version needed to extract
+ ZIP64DSK : 16, // zip64 number of this disk
+ ZIP64DSKDIR : 20, // number of the disk with the start of the record directory
+ ZIP64SUB : 24, // number of entries on this disk
+ ZIP64TOT : 32, // total number of entries
+ ZIP64SIZB : 40, // zip64 central directory size in bytes
+ ZIP64OFF : 48, // offset of start of central directory with respect to the starting disk number
+ ZIP64EXTRA : 56, // extensible data sector
+
+ /* Compression methods */
+ STORED : 0, // no compression
+ SHRUNK : 1, // shrunk
+ REDUCED1 : 2, // reduced with compression factor 1
+ REDUCED2 : 3, // reduced with compression factor 2
+ REDUCED3 : 4, // reduced with compression factor 3
+ REDUCED4 : 5, // reduced with compression factor 4
+ IMPLODED : 6, // imploded
+ // 7 reserved for Tokenizing compression algorithm
+ DEFLATED : 8, // deflated
+ ENHANCED_DEFLATED: 9, // enhanced deflated
+ PKWARE : 10,// PKWare DCL imploded
+ // 11 reserved by PKWARE
+ BZIP2 : 12, // compressed using BZIP2
+ // 13 reserved by PKWARE
+ LZMA : 14, // LZMA
+ // 15-17 reserved by PKWARE
+ IBM_TERSE : 18, // compressed using IBM TERSE
+ IBM_LZ77 : 19, // IBM LZ77 z
+ AES_ENCRYPT : 99, // WinZIP AES encryption method
+
+ /* General purpose bit flag */
+ // values can obtained with expression 2**bitnr
+ FLG_ENC : 1, // Bit 0: encrypted file
+ FLG_COMP1 : 2, // Bit 1, compression option
+ FLG_COMP2 : 4, // Bit 2, compression option
+ FLG_DESC : 8, // Bit 3, data descriptor
+ FLG_ENH : 16, // Bit 4, enhanced deflating
+ FLG_PATCH : 32, // Bit 5, indicates that the file is compressed patched data.
+ FLG_STR : 64, // Bit 6, strong encryption (patented)
+ // Bits 7-10: Currently unused.
+ FLG_EFS : 2048, // Bit 11: Language encoding flag (EFS)
+ // Bit 12: Reserved by PKWARE for enhanced compression.
+ // Bit 13: encrypted the Central Directory (patented).
+ // Bits 14-15: Reserved by PKWARE.
+ FLG_MSK : 4096, // mask header values
+
+ /* Load type */
+ FILE : 2,
+ BUFFER : 1,
+ NONE : 0,
+
+ /* 4.5 Extensible data fields */
+ EF_ID : 0,
+ EF_SIZE : 2,
+
+ /* Header IDs */
+ ID_ZIP64 : 0x0001,
+ ID_AVINFO : 0x0007,
+ ID_PFS : 0x0008,
+ ID_OS2 : 0x0009,
+ ID_NTFS : 0x000a,
+ ID_OPENVMS : 0x000c,
+ ID_UNIX : 0x000d,
+ ID_FORK : 0x000e,
+ ID_PATCH : 0x000f,
+ ID_X509_PKCS7 : 0x0014,
+ ID_X509_CERTID_F : 0x0015,
+ ID_X509_CERTID_C : 0x0016,
+ ID_STRONGENC : 0x0017,
+ ID_RECORD_MGT : 0x0018,
+ ID_X509_PKCS7_RL : 0x0019,
+ ID_IBM1 : 0x0065,
+ ID_IBM2 : 0x0066,
+ ID_POSZIP : 0x4690,
+
+ EF_ZIP64_OR_32 : 0xffffffff,
+ EF_ZIP64_OR_16 : 0xffff,
+ EF_ZIP64_SUNCOMP : 0,
+ EF_ZIP64_SCOMP : 8,
+ EF_ZIP64_RHO : 16,
+ EF_ZIP64_DSN : 24
+};
diff --git a/node_modules/adm-zip/util/errors.js b/node_modules/adm-zip/util/errors.js
new file mode 100644
index 00000000..dde469bc
--- /dev/null
+++ b/node_modules/adm-zip/util/errors.js
@@ -0,0 +1,35 @@
+module.exports = {
+ /* Header error messages */
+ INVALID_LOC: "Invalid LOC header (bad signature)",
+ INVALID_CEN: "Invalid CEN header (bad signature)",
+ INVALID_END: "Invalid END header (bad signature)",
+
+ /* ZipEntry error messages*/
+ NO_DATA: "Nothing to decompress",
+ BAD_CRC: "CRC32 checksum failed",
+ FILE_IN_THE_WAY: "There is a file in the way: %s",
+ UNKNOWN_METHOD: "Invalid/unsupported compression method",
+
+ /* Inflater error messages */
+ AVAIL_DATA: "inflate::Available inflate data did not terminate",
+ INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block",
+ TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes",
+ INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths",
+ INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length",
+ INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete",
+ INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths",
+ INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths",
+ INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement",
+ INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)",
+
+ /* ADM-ZIP error messages */
+ CANT_EXTRACT_FILE: "Could not extract the file",
+ CANT_OVERRIDE: "Target file already exists",
+ NO_ZIP: "No zip file was loaded",
+ NO_ENTRY: "Entry doesn't exist",
+ DIRECTORY_CONTENT_ERROR: "A directory cannot have content",
+ FILE_NOT_FOUND: "File not found: %s",
+ NOT_IMPLEMENTED: "Not implemented",
+ INVALID_FILENAME: "Invalid filename",
+ INVALID_FORMAT: "Invalid or unsupported zip format. No END header found"
+};
diff --git a/node_modules/adm-zip/util/fattr.js b/node_modules/adm-zip/util/fattr.js
new file mode 100644
index 00000000..163e2e52
--- /dev/null
+++ b/node_modules/adm-zip/util/fattr.js
@@ -0,0 +1,79 @@
+const fs = require("./fileSystem").require();
+const pth = require("path");
+
+fs.existsSync = fs.existsSync || pth.existsSync;
+
+module.exports = function (/*String*/ path) {
+ var _path = path || "",
+ _obj = newAttr(),
+ _stat = null;
+
+ function newAttr() {
+ return {
+ directory: false,
+ readonly: false,
+ hidden: false,
+ executable: false,
+ mtime: 0,
+ atime: 0
+ };
+ }
+
+ if (_path && fs.existsSync(_path)) {
+ _stat = fs.statSync(_path);
+ _obj.directory = _stat.isDirectory();
+ _obj.mtime = _stat.mtime;
+ _obj.atime = _stat.atime;
+ _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner
+ _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right
+ _obj.hidden = pth.basename(_path)[0] === ".";
+ } else {
+ console.warn("Invalid path: " + _path);
+ }
+
+ return {
+ get directory() {
+ return _obj.directory;
+ },
+
+ get readOnly() {
+ return _obj.readonly;
+ },
+
+ get hidden() {
+ return _obj.hidden;
+ },
+
+ get mtime() {
+ return _obj.mtime;
+ },
+
+ get atime() {
+ return _obj.atime;
+ },
+
+ get executable() {
+ return _obj.executable;
+ },
+
+ decodeAttributes: function () {},
+
+ encodeAttributes: function () {},
+
+ toJSON: function () {
+ return {
+ path: _path,
+ isDirectory: _obj.directory,
+ isReadOnly: _obj.readonly,
+ isHidden: _obj.hidden,
+ isExecutable: _obj.executable,
+ mTime: _obj.mtime,
+ aTime: _obj.atime
+ };
+ },
+
+ toString: function () {
+ return JSON.stringify(this.toJSON(), null, "\t");
+ }
+ };
+};
diff --git a/node_modules/adm-zip/util/fileSystem.js b/node_modules/adm-zip/util/fileSystem.js
new file mode 100644
index 00000000..dee5c2af
--- /dev/null
+++ b/node_modules/adm-zip/util/fileSystem.js
@@ -0,0 +1,11 @@
+exports.require = function () {
+ if (typeof process === "object" && process.versions && process.versions["electron"]) {
+ try {
+ const originalFs = require("original-fs");
+ if (Object.keys(originalFs).length > 0) {
+ return originalFs;
+ }
+ } catch (e) {}
+ }
+ return require("fs");
+};
diff --git a/node_modules/adm-zip/util/index.js b/node_modules/adm-zip/util/index.js
new file mode 100644
index 00000000..6790df40
--- /dev/null
+++ b/node_modules/adm-zip/util/index.js
@@ -0,0 +1,4 @@
+module.exports = require("./utils");
+module.exports.Constants = require("./constants");
+module.exports.Errors = require("./errors");
+module.exports.FileAttr = require("./fattr");
diff --git a/node_modules/adm-zip/util/utils.js b/node_modules/adm-zip/util/utils.js
new file mode 100644
index 00000000..9d732ba6
--- /dev/null
+++ b/node_modules/adm-zip/util/utils.js
@@ -0,0 +1,247 @@
+const fsystem = require("./fileSystem").require();
+const pth = require("path");
+const Constants = require("./constants");
+const Errors = require("./errors");
+const isWin = typeof process === "object" && "win32" === process.platform;
+
+const is_Obj = (obj) => obj && typeof obj === "object";
+
+// generate CRC32 lookup table
+const crcTable = new Uint32Array(256).map((t, c) => {
+ for (let k = 0; k < 8; k++) {
+ if ((c & 1) !== 0) {
+ c = 0xedb88320 ^ (c >>> 1);
+ } else {
+ c >>>= 1;
+ }
+ }
+ return c >>> 0;
+});
+
+// UTILS functions
+
+function Utils(opts) {
+ this.sep = pth.sep;
+ this.fs = fsystem;
+
+ if (is_Obj(opts)) {
+ // custom filesystem
+ if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") {
+ this.fs = opts.fs;
+ }
+ }
+}
+
+module.exports = Utils;
+
+// INSTANCED functions
+
+Utils.prototype.makeDir = function (/*String*/ folder) {
+ const self = this;
+
+ // Sync - make directories tree
+ function mkdirSync(/*String*/ fpath) {
+ let resolvedPath = fpath.split(self.sep)[0];
+ fpath.split(self.sep).forEach(function (name) {
+ if (!name || name.substr(-1, 1) === ":") return;
+ resolvedPath += self.sep + name;
+ var stat;
+ try {
+ stat = self.fs.statSync(resolvedPath);
+ } catch (e) {
+ self.fs.mkdirSync(resolvedPath);
+ }
+ if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath);
+ });
+ }
+
+ mkdirSync(folder);
+};
+
+Utils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {
+ const self = this;
+ if (self.fs.existsSync(path)) {
+ if (!overwrite) return false; // cannot overwrite
+
+ var stat = self.fs.statSync(path);
+ if (stat.isDirectory()) {
+ return false;
+ }
+ }
+ var folder = pth.dirname(path);
+ if (!self.fs.existsSync(folder)) {
+ self.makeDir(folder);
+ }
+
+ var fd;
+ try {
+ fd = self.fs.openSync(path, "w", 438); // 0666
+ } catch (e) {
+ self.fs.chmodSync(path, 438);
+ fd = self.fs.openSync(path, "w", 438);
+ }
+ if (fd) {
+ try {
+ self.fs.writeSync(fd, content, 0, content.length, 0);
+ } finally {
+ self.fs.closeSync(fd);
+ }
+ }
+ self.fs.chmodSync(path, attr || 438);
+ return true;
+};
+
+Utils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {
+ if (typeof attr === "function") {
+ callback = attr;
+ attr = undefined;
+ }
+
+ const self = this;
+
+ self.fs.exists(path, function (exist) {
+ if (exist && !overwrite) return callback(false);
+
+ self.fs.stat(path, function (err, stat) {
+ if (exist && stat.isDirectory()) {
+ return callback(false);
+ }
+
+ var folder = pth.dirname(path);
+ self.fs.exists(folder, function (exists) {
+ if (!exists) self.makeDir(folder);
+
+ self.fs.open(path, "w", 438, function (err, fd) {
+ if (err) {
+ self.fs.chmod(path, 438, function () {
+ self.fs.open(path, "w", 438, function (err, fd) {
+ self.fs.write(fd, content, 0, content.length, 0, function () {
+ self.fs.close(fd, function () {
+ self.fs.chmod(path, attr || 438, function () {
+ callback(true);
+ });
+ });
+ });
+ });
+ });
+ } else if (fd) {
+ self.fs.write(fd, content, 0, content.length, 0, function () {
+ self.fs.close(fd, function () {
+ self.fs.chmod(path, attr || 438, function () {
+ callback(true);
+ });
+ });
+ });
+ } else {
+ self.fs.chmod(path, attr || 438, function () {
+ callback(true);
+ });
+ }
+ });
+ });
+ });
+ });
+};
+
+Utils.prototype.findFiles = function (/*String*/ path) {
+ const self = this;
+
+ function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive) {
+ if (typeof pattern === "boolean") {
+ recursive = pattern;
+ pattern = undefined;
+ }
+ let files = [];
+ self.fs.readdirSync(dir).forEach(function (file) {
+ var path = pth.join(dir, file);
+
+ if (self.fs.statSync(path).isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));
+
+ if (!pattern || pattern.test(path)) {
+ files.push(pth.normalize(path) + (self.fs.statSync(path).isDirectory() ? self.sep : ""));
+ }
+ });
+ return files;
+ }
+
+ return findSync(path, undefined, true);
+};
+
+Utils.prototype.getAttributes = function () {};
+
+Utils.prototype.setAttributes = function () {};
+
+// STATIC functions
+
+// crc32 single update (it is part of crc32)
+Utils.crc32update = function (crc, byte) {
+ return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);
+};
+
+Utils.crc32 = function (buf) {
+ if (typeof buf === "string") {
+ buf = Buffer.from(buf, "utf8");
+ }
+ // Generate crcTable
+ if (!crcTable.length) genCRCTable();
+
+ let len = buf.length;
+ let crc = ~0;
+ for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);
+ // xor and cast as uint32 number
+ return ~crc >>> 0;
+};
+
+Utils.methodToString = function (/*Number*/ method) {
+ switch (method) {
+ case Constants.STORED:
+ return "STORED (" + method + ")";
+ case Constants.DEFLATED:
+ return "DEFLATED (" + method + ")";
+ default:
+ return "UNSUPPORTED (" + method + ")";
+ }
+};
+
+// removes ".." style path elements
+Utils.canonical = function (/*string*/ path) {
+ if (!path) return "";
+ // trick normalize think path is absolute
+ var safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/"));
+ return pth.join(".", safeSuffix);
+};
+
+// make abolute paths taking prefix as root folder
+Utils.sanitize = function (/*string*/ prefix, /*string*/ name) {
+ prefix = pth.resolve(pth.normalize(prefix));
+ var parts = name.split("/");
+ for (var i = 0, l = parts.length; i < l; i++) {
+ var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
+ if (path.indexOf(prefix) === 0) {
+ return path;
+ }
+ }
+ return pth.normalize(pth.join(prefix, pth.basename(name)));
+};
+
+// converts buffer, Uint8Array, string types to buffer
+Utils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input) {
+ if (Buffer.isBuffer(input)) {
+ return input;
+ } else if (input instanceof Uint8Array) {
+ return Buffer.from(input);
+ } else {
+ // expect string all other values are invalid and return empty buffer
+ return typeof input === "string" ? Buffer.from(input, "utf8") : Buffer.alloc(0);
+ }
+};
+
+Utils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {
+ var slice = Buffer.from(buffer.slice(index, index + 8));
+ slice.swap64();
+
+ return parseInt(`0x${slice.toString("hex")}`);
+};
+
+Utils.isWin = isWin; // Do we have windows system
+Utils.crcTable = crcTable;
diff --git a/node_modules/adm-zip/zipEntry.js b/node_modules/adm-zip/zipEntry.js
new file mode 100644
index 00000000..8c3053b5
--- /dev/null
+++ b/node_modules/adm-zip/zipEntry.js
@@ -0,0 +1,333 @@
+var Utils = require("./util"),
+ Headers = require("./headers"),
+ Constants = Utils.Constants,
+ Methods = require("./methods");
+
+module.exports = function (/*Buffer*/ input) {
+ var _entryHeader = new Headers.EntryHeader(),
+ _entryName = Buffer.alloc(0),
+ _comment = Buffer.alloc(0),
+ _isDirectory = false,
+ uncompressedData = null,
+ _extra = Buffer.alloc(0);
+
+ function getCompressedDataFromZip() {
+ if (!input || !Buffer.isBuffer(input)) {
+ return Buffer.alloc(0);
+ }
+ _entryHeader.loadDataHeaderFromBinary(input);
+ return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);
+ }
+
+ function crc32OK(data) {
+ // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written
+ if ((_entryHeader.flags & 0x8) !== 0x8) {
+ if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {
+ return false;
+ }
+ } else {
+ // @TODO: load and check data descriptor header
+ // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure
+ // (optionally preceded by a 4-byte signature) immediately after the compressed data:
+ }
+ return true;
+ }
+
+ function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {
+ if (typeof callback === "undefined" && typeof async === "string") {
+ pass = async;
+ async = void 0;
+ }
+ if (_isDirectory) {
+ if (async && callback) {
+ callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.
+ }
+ return Buffer.alloc(0);
+ }
+
+ var compressedData = getCompressedDataFromZip();
+
+ if (compressedData.length === 0) {
+ // File is empty, nothing to decompress.
+ if (async && callback) callback(compressedData);
+ return compressedData;
+ }
+
+ if (_entryHeader.encripted) {
+ if ("string" !== typeof pass && !Buffer.isBuffer(pass)) {
+ throw new Error("ADM-ZIP: Incompatible password parameter");
+ }
+ compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);
+ }
+
+ var data = Buffer.alloc(_entryHeader.size);
+
+ switch (_entryHeader.method) {
+ case Utils.Constants.STORED:
+ compressedData.copy(data);
+ if (!crc32OK(data)) {
+ if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error
+ throw new Error(Utils.Errors.BAD_CRC);
+ } else {
+ //si added otherwise did not seem to return data.
+ if (async && callback) callback(data);
+ return data;
+ }
+ case Utils.Constants.DEFLATED:
+ var inflater = new Methods.Inflater(compressedData);
+ if (!async) {
+ const result = inflater.inflate(data);
+ result.copy(data, 0);
+ if (!crc32OK(data)) {
+ throw new Error(Utils.Errors.BAD_CRC + " " + _entryName.toString());
+ }
+ return data;
+ } else {
+ inflater.inflateAsync(function (result) {
+ result.copy(result, 0);
+ if (callback) {
+ if (!crc32OK(result)) {
+ callback(result, Utils.Errors.BAD_CRC); //si added error
+ } else {
+ callback(result);
+ }
+ }
+ });
+ }
+ break;
+ default:
+ if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);
+ throw new Error(Utils.Errors.UNKNOWN_METHOD);
+ }
+ }
+
+ function compress(/*Boolean*/ async, /*Function*/ callback) {
+ if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
+ // no data set or the data wasn't changed to require recompression
+ if (async && callback) callback(getCompressedDataFromZip());
+ return getCompressedDataFromZip();
+ }
+
+ if (uncompressedData.length && !_isDirectory) {
+ var compressedData;
+ // Local file header
+ switch (_entryHeader.method) {
+ case Utils.Constants.STORED:
+ _entryHeader.compressedSize = _entryHeader.size;
+
+ compressedData = Buffer.alloc(uncompressedData.length);
+ uncompressedData.copy(compressedData);
+
+ if (async && callback) callback(compressedData);
+ return compressedData;
+ default:
+ case Utils.Constants.DEFLATED:
+ var deflater = new Methods.Deflater(uncompressedData);
+ if (!async) {
+ var deflated = deflater.deflate();
+ _entryHeader.compressedSize = deflated.length;
+ return deflated;
+ } else {
+ deflater.deflateAsync(function (data) {
+ compressedData = Buffer.alloc(data.length);
+ _entryHeader.compressedSize = data.length;
+ data.copy(compressedData);
+ callback && callback(compressedData);
+ });
+ }
+ deflater = null;
+ break;
+ }
+ } else if (async && callback) {
+ callback(Buffer.alloc(0));
+ } else {
+ return Buffer.alloc(0);
+ }
+ }
+
+ function readUInt64LE(buffer, offset) {
+ return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
+ }
+
+ function parseExtra(data) {
+ var offset = 0;
+ var signature, size, part;
+ while (offset < data.length) {
+ signature = data.readUInt16LE(offset);
+ offset += 2;
+ size = data.readUInt16LE(offset);
+ offset += 2;
+ part = data.slice(offset, offset + size);
+ offset += size;
+ if (Constants.ID_ZIP64 === signature) {
+ parseZip64ExtendedInformation(part);
+ }
+ }
+ }
+
+ //Override header field values with values from the ZIP64 extra field
+ function parseZip64ExtendedInformation(data) {
+ var size, compressedSize, offset, diskNumStart;
+
+ if (data.length >= Constants.EF_ZIP64_SCOMP) {
+ size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
+ if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {
+ _entryHeader.size = size;
+ }
+ }
+ if (data.length >= Constants.EF_ZIP64_RHO) {
+ compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
+ if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
+ _entryHeader.compressedSize = compressedSize;
+ }
+ }
+ if (data.length >= Constants.EF_ZIP64_DSN) {
+ offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
+ if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
+ _entryHeader.offset = offset;
+ }
+ }
+ if (data.length >= Constants.EF_ZIP64_DSN + 4) {
+ diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
+ if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
+ _entryHeader.diskNumStart = diskNumStart;
+ }
+ }
+ }
+
+ return {
+ get entryName() {
+ return _entryName.toString();
+ },
+ get rawEntryName() {
+ return _entryName;
+ },
+ set entryName(val) {
+ _entryName = Utils.toBuffer(val);
+ var lastChar = _entryName[_entryName.length - 1];
+ _isDirectory = lastChar === 47 || lastChar === 92;
+ _entryHeader.fileNameLength = _entryName.length;
+ },
+
+ get extra() {
+ return _extra;
+ },
+ set extra(val) {
+ _extra = val;
+ _entryHeader.extraLength = val.length;
+ parseExtra(val);
+ },
+
+ get comment() {
+ return _comment.toString();
+ },
+ set comment(val) {
+ _comment = Utils.toBuffer(val);
+ _entryHeader.commentLength = _comment.length;
+ },
+
+ get name() {
+ var n = _entryName.toString();
+ return _isDirectory
+ ? n
+ .substr(n.length - 1)
+ .split("/")
+ .pop()
+ : n.split("/").pop();
+ },
+ get isDirectory() {
+ return _isDirectory;
+ },
+
+ getCompressedData: function () {
+ return compress(false, null);
+ },
+
+ getCompressedDataAsync: function (/*Function*/ callback) {
+ compress(true, callback);
+ },
+
+ setData: function (value) {
+ uncompressedData = Utils.toBuffer(value);
+ if (!_isDirectory && uncompressedData.length) {
+ _entryHeader.size = uncompressedData.length;
+ _entryHeader.method = Utils.Constants.DEFLATED;
+ _entryHeader.crc = Utils.crc32(value);
+ _entryHeader.changed = true;
+ } else {
+ // folders and blank files should be stored
+ _entryHeader.method = Utils.Constants.STORED;
+ }
+ },
+
+ getData: function (pass) {
+ if (_entryHeader.changed) {
+ return uncompressedData;
+ } else {
+ return decompress(false, null, pass);
+ }
+ },
+
+ getDataAsync: function (/*Function*/ callback, pass) {
+ if (_entryHeader.changed) {
+ callback(uncompressedData);
+ } else {
+ decompress(true, callback, pass);
+ }
+ },
+
+ set attr(attr) {
+ _entryHeader.attr = attr;
+ },
+ get attr() {
+ return _entryHeader.attr;
+ },
+
+ set header(/*Buffer*/ data) {
+ _entryHeader.loadFromBinary(data);
+ },
+
+ get header() {
+ return _entryHeader;
+ },
+
+ packHeader: function () {
+ // 1. create header (buffer)
+ var header = _entryHeader.entryHeaderToBinary();
+ var addpos = Utils.Constants.CENHDR;
+ // 2. add file name
+ _entryName.copy(header, addpos);
+ addpos += _entryName.length;
+ // 3. add extra data
+ if (_entryHeader.extraLength) {
+ _extra.copy(header, addpos);
+ addpos += _entryHeader.extraLength;
+ }
+ // 4. add file comment
+ if (_entryHeader.commentLength) {
+ _comment.copy(header, addpos);
+ }
+ return header;
+ },
+
+ toJSON: function () {
+ const bytes = function (nr) {
+ return "<" + ((nr && nr.length + " bytes buffer") || "null") + ">";
+ };
+
+ return {
+ entryName: this.entryName,
+ name: this.name,
+ comment: this.comment,
+ isDirectory: this.isDirectory,
+ header: _entryHeader.toJSON(),
+ compressedData: bytes(input),
+ data: bytes(uncompressedData)
+ };
+ },
+
+ toString: function () {
+ return JSON.stringify(this.toJSON(), null, "\t");
+ }
+ };
+};
diff --git a/node_modules/adm-zip/zipFile.js b/node_modules/adm-zip/zipFile.js
new file mode 100644
index 00000000..997226a2
--- /dev/null
+++ b/node_modules/adm-zip/zipFile.js
@@ -0,0 +1,384 @@
+const ZipEntry = require("./zipEntry");
+const Headers = require("./headers");
+const Utils = require("./util");
+
+module.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {
+ var entryList = [],
+ entryTable = {},
+ _comment = Buffer.alloc(0),
+ mainHeader = new Headers.MainHeader(),
+ loadedEntries = false;
+
+ // assign options
+ const opts = Object.assign(Object.create(null), options);
+
+ const { noSort } = opts;
+
+ if (inBuffer) {
+ // is a memory buffer
+ readMainHeader(opts.readEntries);
+ } else {
+ // none. is a new file
+ loadedEntries = true;
+ }
+
+ function iterateEntries(callback) {
+ const totalEntries = mainHeader.diskEntries; // total number of entries
+ let index = mainHeader.offset; // offset of first CEN header
+
+ for (let i = 0; i < totalEntries; i++) {
+ let tmp = index;
+ const entry = new ZipEntry(inBuffer);
+
+ entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));
+ entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));
+
+ index += entry.header.entryHeaderSize;
+
+ callback(entry);
+ }
+ }
+
+ function readEntries() {
+ loadedEntries = true;
+ entryTable = {};
+ entryList = new Array(mainHeader.diskEntries); // total number of entries
+ var index = mainHeader.offset; // offset of first CEN header
+ for (var i = 0; i < entryList.length; i++) {
+ var tmp = index,
+ entry = new ZipEntry(inBuffer);
+ entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));
+
+ entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));
+
+ if (entry.header.extraLength) {
+ entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));
+ }
+
+ if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
+
+ index += entry.header.entryHeaderSize;
+
+ entryList[i] = entry;
+ entryTable[entry.entryName] = entry;
+ }
+ }
+
+ function readMainHeader(/*Boolean*/ readNow) {
+ var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size
+ max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length
+ n = max,
+ endStart = inBuffer.length,
+ endOffset = -1, // Start offset of the END header
+ commentEnd = 0;
+
+ for (i; i >= n; i--) {
+ if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'
+ if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
+ // "PK\005\006"
+ endOffset = i;
+ commentEnd = i;
+ endStart = i + Utils.Constants.ENDHDR;
+ // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature
+ n = i - Utils.Constants.END64HDR;
+ continue;
+ }
+
+ if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {
+ // Found a zip64 signature, let's continue reading the whole zip64 record
+ n = max;
+ continue;
+ }
+
+ if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {
+ // Found the zip64 record, let's determine it's size
+ endOffset = i;
+ endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;
+ break;
+ }
+ }
+
+ if (!~endOffset) throw new Error(Utils.Errors.INVALID_FORMAT);
+
+ mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));
+ if (mainHeader.commentLength) {
+ _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);
+ }
+ if (readNow) readEntries();
+ }
+
+ function sortEntries() {
+ if (entryList.length > 1 && !noSort) {
+ entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));
+ }
+ }
+
+ return {
+ /**
+ * Returns an array of ZipEntry objects existent in the current opened archive
+ * @return Array
+ */
+ get entries() {
+ if (!loadedEntries) {
+ readEntries();
+ }
+ return entryList;
+ },
+
+ /**
+ * Archive comment
+ * @return {String}
+ */
+ get comment() {
+ return _comment.toString();
+ },
+ set comment(val) {
+ _comment = Utils.toBuffer(val);
+ mainHeader.commentLength = _comment.length;
+ },
+
+ getEntryCount: function () {
+ if (!loadedEntries) {
+ return mainHeader.diskEntries;
+ }
+
+ return entryList.length;
+ },
+
+ forEach: function (callback) {
+ if (!loadedEntries) {
+ iterateEntries(callback);
+ return;
+ }
+
+ entryList.forEach(callback);
+ },
+
+ /**
+ * Returns a reference to the entry with the given name or null if entry is inexistent
+ *
+ * @param entryName
+ * @return ZipEntry
+ */
+ getEntry: function (/*String*/ entryName) {
+ if (!loadedEntries) {
+ readEntries();
+ }
+ return entryTable[entryName] || null;
+ },
+
+ /**
+ * Adds the given entry to the entry list
+ *
+ * @param entry
+ */
+ setEntry: function (/*ZipEntry*/ entry) {
+ if (!loadedEntries) {
+ readEntries();
+ }
+ entryList.push(entry);
+ entryTable[entry.entryName] = entry;
+ mainHeader.totalEntries = entryList.length;
+ },
+
+ /**
+ * Removes the entry with the given name from the entry list.
+ *
+ * If the entry is a directory, then all nested files and directories will be removed
+ * @param entryName
+ */
+ deleteEntry: function (/*String*/ entryName) {
+ if (!loadedEntries) {
+ readEntries();
+ }
+ var entry = entryTable[entryName];
+ if (entry && entry.isDirectory) {
+ var _self = this;
+ this.getEntryChildren(entry).forEach(function (child) {
+ if (child.entryName !== entryName) {
+ _self.deleteEntry(child.entryName);
+ }
+ });
+ }
+ entryList.splice(entryList.indexOf(entry), 1);
+ delete entryTable[entryName];
+ mainHeader.totalEntries = entryList.length;
+ },
+
+ /**
+ * Iterates and returns all nested files and directories of the given entry
+ *
+ * @param entry
+ * @return Array
+ */
+ getEntryChildren: function (/*ZipEntry*/ entry) {
+ if (!loadedEntries) {
+ readEntries();
+ }
+ if (entry && entry.isDirectory) {
+ const list = [];
+ const name = entry.entryName;
+ const len = name.length;
+
+ entryList.forEach(function (zipEntry) {
+ if (zipEntry.entryName.substr(0, len) === name) {
+ list.push(zipEntry);
+ }
+ });
+ return list;
+ }
+ return [];
+ },
+
+ /**
+ * Returns the zip file
+ *
+ * @return Buffer
+ */
+ compressToBuffer: function () {
+ if (!loadedEntries) {
+ readEntries();
+ }
+ sortEntries();
+
+ const dataBlock = [];
+ const entryHeaders = [];
+ let totalSize = 0;
+ let dindex = 0;
+
+ mainHeader.size = 0;
+ mainHeader.offset = 0;
+
+ for (const entry of entryList) {
+ // compress data and set local and entry header accordingly. Reason why is called first
+ const compressedData = entry.getCompressedData();
+ // 1. construct data header
+ entry.header.offset = dindex;
+ const dataHeader = entry.header.dataHeaderToBinary();
+ const entryNameLen = entry.rawEntryName.length;
+ // 1.2. postheader - data after data header
+ const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);
+ entry.rawEntryName.copy(postHeader, 0);
+ postHeader.copy(entry.extra, entryNameLen);
+
+ // 2. offsets
+ const dataLength = dataHeader.length + postHeader.length + compressedData.length;
+ dindex += dataLength;
+
+ // 3. store values in sequence
+ dataBlock.push(dataHeader);
+ dataBlock.push(postHeader);
+ dataBlock.push(compressedData);
+
+ // 4. construct entry header
+ const entryHeader = entry.packHeader();
+ entryHeaders.push(entryHeader);
+ // 5. update main header
+ mainHeader.size += entryHeader.length;
+ totalSize += dataLength + entryHeader.length;
+ }
+
+ totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
+ // point to end of data and beginning of central directory first record
+ mainHeader.offset = dindex;
+
+ dindex = 0;
+ const outBuffer = Buffer.alloc(totalSize);
+ // write data blocks
+ for (const content of dataBlock) {
+ content.copy(outBuffer, dindex);
+ dindex += content.length;
+ }
+
+ // write central directory entries
+ for (const content of entryHeaders) {
+ content.copy(outBuffer, dindex);
+ dindex += content.length;
+ }
+
+ // write main header
+ const mh = mainHeader.toBinary();
+ if (_comment) {
+ _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
+ }
+ mh.copy(outBuffer, dindex);
+
+ return outBuffer;
+ },
+
+ toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {
+ try {
+ if (!loadedEntries) {
+ readEntries();
+ }
+ sortEntries();
+
+ const dataBlock = [];
+ const entryHeaders = [];
+ let totalSize = 0;
+ let dindex = 0;
+
+ mainHeader.size = 0;
+ mainHeader.offset = 0;
+
+ const compress2Buffer = function (entryLists) {
+ if (entryLists.length) {
+ const entry = entryLists.pop();
+ const name = entry.entryName + entry.extra.toString();
+ if (onItemStart) onItemStart(name);
+ entry.getCompressedDataAsync(function (compressedData) {
+ if (onItemEnd) onItemEnd(name);
+
+ entry.header.offset = dindex;
+ // data header
+ const dataHeader = entry.header.dataHeaderToBinary();
+ const postHeader = Buffer.alloc(name.length, name);
+ const dataLength = dataHeader.length + postHeader.length + compressedData.length;
+
+ dindex += dataLength;
+
+ dataBlock.push(dataHeader);
+ dataBlock.push(postHeader);
+ dataBlock.push(compressedData);
+
+ const entryHeader = entry.packHeader();
+ entryHeaders.push(entryHeader);
+ mainHeader.size += entryHeader.length;
+ totalSize += dataLength + entryHeader.length;
+
+ compress2Buffer(entryLists);
+ });
+ } else {
+ totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
+ // point to end of data and beginning of central directory first record
+ mainHeader.offset = dindex;
+
+ dindex = 0;
+ const outBuffer = Buffer.alloc(totalSize);
+ dataBlock.forEach(function (content) {
+ content.copy(outBuffer, dindex); // write data blocks
+ dindex += content.length;
+ });
+ entryHeaders.forEach(function (content) {
+ content.copy(outBuffer, dindex); // write central directory entries
+ dindex += content.length;
+ });
+
+ const mh = mainHeader.toBinary();
+ if (_comment) {
+ _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
+ }
+
+ mh.copy(outBuffer, dindex); // write main header
+
+ onSuccess(outBuffer);
+ }
+ };
+
+ compress2Buffer(entryList);
+ } catch (e) {
+ onFail(e);
+ }
+ }
+ };
+};
diff --git a/node_modules/decompress-response/index.d.ts b/node_modules/decompress-response/index.d.ts
new file mode 100644
index 00000000..cd3e0459
--- /dev/null
+++ b/node_modules/decompress-response/index.d.ts
@@ -0,0 +1,27 @@
+import {IncomingMessage, IncomingHttpHeaders} from 'node:http';
+
+export interface UncompressedIncomingHttpHeaders extends IncomingHttpHeaders {
+ 'content-encoding'?: never;
+}
+
+export interface UncompressedIncomingMessage extends IncomingMessage {
+ headers: UncompressedIncomingHttpHeaders;
+}
+
+/**
+Decompress a HTTP response if needed.
+
+@param response - The HTTP incoming stream with compressed data.
+@returns The decompressed HTTP response stream.
+
+@example
+```
+import http from 'node:http';
+import decompressResponse from 'decompress-response';
+
+http.get('https://sindresorhus.com', response => {
+ response = decompressResponse(response);
+});
+```
+*/
+export default function decompressResponse(response: IncomingMessage): UncompressedIncomingMessage;
diff --git a/node_modules/decompress-response/index.js b/node_modules/decompress-response/index.js
new file mode 100644
index 00000000..bc57fd8a
--- /dev/null
+++ b/node_modules/decompress-response/index.js
@@ -0,0 +1,67 @@
+import {Transform as TransformStream, PassThrough as PassThroughStream} from 'node:stream';
+import zlib from 'node:zlib';
+import mimicResponse from 'mimic-response';
+
+export default function decompressResponse(response) {
+ const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();
+
+ if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {
+ return response;
+ }
+
+ delete response.headers['content-encoding'];
+
+ let isEmpty = true;
+
+ function handleContentEncoding(data) {
+ const decompressStream = contentEncoding === 'br'
+ ? zlib.createBrotliDecompress()
+ : ((contentEncoding === 'deflate' && data.length > 0 && (data[0] & 0x08) === 0) // eslint-disable-line no-bitwise
+ ? zlib.createInflateRaw()
+ : zlib.createUnzip());
+
+ decompressStream.once('error', error => {
+ if (isEmpty && !response.readable) {
+ finalStream.end();
+ return;
+ }
+
+ finalStream.destroy(error);
+ });
+
+ checker.pipe(decompressStream).pipe(finalStream);
+ }
+
+ const checker = new TransformStream({
+ transform(data, _encoding, callback) {
+ if (isEmpty === false) {
+ callback(null, data);
+ return;
+ }
+
+ isEmpty = false;
+
+ handleContentEncoding(data);
+
+ callback(null, data);
+ },
+
+ flush(callback) {
+ callback();
+ },
+ });
+
+ const finalStream = new PassThroughStream({
+ autoDestroy: false,
+ destroy(error, callback) {
+ response.destroy();
+
+ callback(error);
+ },
+ });
+
+ mimicResponse(response, finalStream);
+ response.pipe(checker);
+
+ return finalStream;
+}
diff --git a/node_modules/decompress-response/license b/node_modules/decompress-response/license
new file mode 100644
index 00000000..fa7ceba3
--- /dev/null
+++ b/node_modules/decompress-response/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+
+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.
diff --git a/node_modules/decompress-response/package.json b/node_modules/decompress-response/package.json
new file mode 100644
index 00000000..e7157a7e
--- /dev/null
+++ b/node_modules/decompress-response/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "decompress-response",
+ "version": "8.1.0",
+ "description": "Decompress a HTTP response if needed",
+ "license": "MIT",
+ "repository": "sindresorhus/decompress-response",
+ "funding": "https://github.com/sponsors/sindresorhus",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "decompress",
+ "response",
+ "http",
+ "https",
+ "zlib",
+ "gzip",
+ "zip",
+ "deflate",
+ "unzip",
+ "ungzip",
+ "incoming",
+ "message",
+ "stream",
+ "compressed",
+ "brotli"
+ ],
+ "dependencies": {
+ "mimic-response": "^4.0.0"
+ },
+ "devDependencies": {
+ "@types/node": "^16.11.6",
+ "ava": "^3.15.0",
+ "get-stream": "^6.0.1",
+ "pify": "^5.0.0",
+ "tsd": "^0.18.0",
+ "typescript": "^4.4.4",
+ "xo": "^0.45.0"
+ }
+}
diff --git a/node_modules/decompress-response/readme.md b/node_modules/decompress-response/readme.md
new file mode 100644
index 00000000..033538ac
--- /dev/null
+++ b/node_modules/decompress-response/readme.md
@@ -0,0 +1,48 @@
+# decompress-response
+
+> Decompress a HTTP response if needed
+
+Decompresses the [response](https://nodejs.org/api/http.html#http_class_http_incomingmessage) from [`http.request`](https://nodejs.org/api/http.html#http_http_request_options_callback) if it's gzipped, deflated or compressed with Brotli, otherwise just passes it through.
+
+Used by [`got`](https://github.com/sindresorhus/got).
+
+## Install
+
+```sh
+npm install decompress-response
+```
+
+## Usage
+
+```js
+import http from 'node:http';
+import decompressResponse from 'decompress-response';
+
+http.get('https://sindresorhus.com', response => {
+ response = decompressResponse(response);
+});
+```
+
+## API
+
+### decompressResponse(response)
+
+Returns the decompressed HTTP response stream.
+
+#### response
+
+Type: [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage)
+
+The HTTP incoming stream with compressed data.
+
+---
+
+
diff --git a/node_modules/microsoft-security-devops-actions-toolkit/msdo-client.js b/node_modules/microsoft-security-devops-actions-toolkit/msdo-client.js
deleted file mode 100644
index dccbcb56..00000000
--- a/node_modules/microsoft-security-devops-actions-toolkit/msdo-client.js
+++ /dev/null
@@ -1,125 +0,0 @@
-"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.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.MsdoClient = void 0;
-const path = __importStar(require("path"));
-const process = __importStar(require("process"));
-const core = __importStar(require("@actions/core"));
-const exec = __importStar(require("@actions/exec"));
-const msdo_installer_1 = require("./msdo-installer");
-class MsdoClient {
- constructor() {
- this.cliVersion = '0.*';
- }
- setupEnvironment() {
- return __awaiter(this, void 0, void 0, function* () {
- process.env.DOTNET_NOLOGO = 'true';
- console.log('------------------------------------------------------------------------------');
- if (!process.env.MSDO_FILEPATH) {
- let cliVersion = this.resolveCliVersion();
- let msdoInstaller = new msdo_installer_1.MsdoInstaller();
- yield msdoInstaller.install(cliVersion);
- }
- process.env.GDN_SETTINGS_FOLDERS = `Install=${process.env.MSDO_PACKAGES_DIRECTORY}`;
- console.log('------------------------------------------------------------------------------');
- });
- }
- resolveCliVersion() {
- let cliVersion = this.cliVersion;
- if (process.env.MSDO_VERSION) {
- cliVersion = process.env.MSDO_VERSION;
- }
- return cliVersion;
- }
- isNullOrWhiteSpace(value) {
- return !value || !value.trim();
- }
- getCliFilePath() {
- let cliFilePath = process.env.MSDO_FILEPATH;
- core.debug(`cliFilePath = ${cliFilePath}`);
- return cliFilePath;
- }
- init() {
- return __awaiter(this, void 0, void 0, function* () {
- try {
- let cliFilePath = this.getCliFilePath();
- yield exec.exec(cliFilePath, ['init', '--force']);
- }
- catch (error) {
- core.debug(error);
- }
- });
- }
- run(inputArgs, telemetryEnvironment = 'github') {
- return __awaiter(this, void 0, void 0, function* () {
- let cliFilePath = null;
- let args = [];
- try {
- yield this.setupEnvironment();
- yield this.init();
- cliFilePath = process.env.MSDO_FILEPATH;
- core.debug(`cliFilePath = ${cliFilePath}`);
- if (inputArgs != null) {
- for (let i = 0; i < inputArgs.length; i++) {
- args.push(inputArgs[i]);
- }
- }
- args.push('--not-break-on-detections');
- if (core.isDebug()) {
- args.push('--logger-level');
- args.push('trace');
- }
- let sarifFile = path.join(process.env.GITHUB_WORKSPACE, '.gdn', 'msdo.sarif');
- core.debug(`sarifFile = ${sarifFile}`);
- core.exportVariable('MSDO_SARIF_FILE', sarifFile);
- core.setOutput('sarifFile', sarifFile);
- args.push('--export-breaking-results-to-file');
- args.push(`${sarifFile}`);
- args.push('--telemetry-environment');
- args.push(telemetryEnvironment);
- }
- catch (error) {
- core.error('Exception occurred while initializing MSDO:');
- core.error(error);
- core.setFailed(error);
- return;
- }
- try {
- core.debug('Running Microsoft Security DevOps...');
- yield exec.exec(cliFilePath, args);
- }
- catch (error) {
- core.setFailed(error);
- return;
- }
- });
- }
-}
-exports.MsdoClient = MsdoClient;
diff --git a/node_modules/microsoft-security-devops-actions-toolkit/msdo-installer.js b/node_modules/microsoft-security-devops-actions-toolkit/msdo-installer.js
deleted file mode 100644
index 31131541..00000000
--- a/node_modules/microsoft-security-devops-actions-toolkit/msdo-installer.js
+++ /dev/null
@@ -1,232 +0,0 @@
-"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.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.MsdoInstaller = void 0;
-const fs = __importStar(require("fs"));
-const path = __importStar(require("path"));
-const process = __importStar(require("process"));
-const core = __importStar(require("@actions/core"));
-const exec = __importStar(require("@actions/exec"));
-class MsdoInstaller {
- install(cliVersion) {
- return __awaiter(this, void 0, void 0, function* () {
- console.log('Installing Microsoft Security DevOps Cli...');
- if (process.env.MSDO_FILEPATH) {
- console.log(`MSDO CLI File Path overriden by %MSDO_FILEPATH%: ${process.env.MSDO_FILEPATH}`);
- return;
- }
- if (process.env.MSDO_DIRECTORY) {
- console.log(`MSDO CLI Directory overriden by %MSDO_DIRECTORY%: ${process.env.MSDO_DIRECTORY}`);
- let msdoFilePath = path.join(process.env.MSDO_DIRECTORY, 'guardian');
- core.debug(`msdoFilePath = ${msdoFilePath}`);
- process.env.MSDO_FILEPATH = msdoFilePath;
- return;
- }
- let agentDirectory = path.resolve(path.join(process.env.GITHUB_WORKSPACE, '../../_msdo'));
- core.debug(`agentDirectory = ${agentDirectory}`);
- this.ensureDirectory(agentDirectory);
- let agentPackagesDirectory = process.env.MSDO_PACKAGES_DIRECTORY;
- if (!agentPackagesDirectory) {
- agentPackagesDirectory = path.join(agentDirectory, 'packages');
- core.debug(`agentPackagesDirectory = ${agentPackagesDirectory}`);
- this.ensureDirectory(agentPackagesDirectory);
- process.env.MSDO_PACKAGES_DIRECTORY = agentPackagesDirectory;
- }
- let agentVersionsDirectory = path.join(agentDirectory, 'versions');
- core.debug(`agentVersionsDirectory = ${agentVersionsDirectory}`);
- this.ensureDirectory(agentVersionsDirectory);
- let msdoVersionsDirectory = path.join(agentVersionsDirectory, 'microsoft.security.devops.cli');
- core.debug(`msdoVersionsDirectory = ${msdoVersionsDirectory}`);
- if (this.isInstalled(msdoVersionsDirectory, cliVersion)) {
- return;
- }
- let failed = false;
- let attempts = 0;
- let maxAttempts = 2;
- do {
- failed = false;
- const msdoToolkitDirectory = path.resolve(__dirname);
- core.debug(`msdoToolkitDirectory = ${msdoToolkitDirectory}`);
- const msdoProjectFile = path.join(msdoToolkitDirectory, 'msdo-toolkit.proj');
- core.debug(`msdoProjectFile = ${msdoProjectFile}`);
- let args = [
- 'restore',
- msdoProjectFile,
- `/p:MsdoPackageVersion=${cliVersion}`,
- '--packages',
- agentVersionsDirectory,
- '--source',
- 'https://api.nuget.org/v3/index.json'
- ];
- try {
- yield exec.exec('dotnet', args);
- }
- catch (error) {
- core.debug(error);
- failed = true;
- attempts += 1;
- if (attempts > maxAttempts) {
- break;
- }
- }
- } while (failed);
- this.resolvePackageDirectory(msdoVersionsDirectory, cliVersion);
- });
- }
- ensureDirectory(directory) {
- if (!fs.existsSync(directory)) {
- fs.mkdirSync(directory);
- }
- }
- isInstalled(versionsDirectory, cliVersion) {
- let installed = false;
- if (cliVersion.includes("*")) {
- core.debug(`MSDO CLI version contains a latest quantifier: ${cliVersion}. Continuing with install...`);
- return installed;
- }
- this.setVariablesWithVersion(versionsDirectory, cliVersion);
- if (fs.existsSync(process.env.MSDO_DIRECTORY)) {
- console.log(`MSDO CLI v${cliVersion} already installed.`);
- installed = true;
- }
- return installed;
- }
- resolvePackageDirectory(versionDirectory, cliVersion) {
- if (cliVersion.includes("*")) {
- let packageDirectory = this.findLatestVersionDirectory(versionDirectory);
- this.setVariables(packageDirectory);
- }
- else {
- this.setVariablesWithVersion(versionDirectory, cliVersion);
- }
- if (!fs.existsSync(process.env.MSDO_DIRECTORY)) {
- throw `MSDO CLI v${cliVersion} was not found after installation.`;
- }
- }
- findLatestVersionDirectory(versionsDirectory, isPreRelease = false) {
- let latestDirectory = null;
- let latestVersionParts = null;
- let latestIsPreRelease = false;
- let latestPreReleaseFlag = null;
- core.debug(`Searching for all version folders in: ${versionsDirectory}`);
- let dirs = this.getDirectories(versionsDirectory);
- for (let dirIndex = 0; dirIndex < dirs.length; dirIndex++) {
- let dir = dirs[dirIndex];
- if (dir == null || dir == "") {
- core.debug(`Skipping null or empty directory: ${dir}`);
- continue;
- }
- core.debug(`Evaluating MSDO directory: ${dir}`);
- const dirRegex = new RegExp(/^(\d+\.?){1,6}(\-\w+)?$/g);
- if (dirRegex.exec(dir) == null) {
- core.debug(`Skipping invalid version directory: ${dir}`);
- continue;
- }
- let fullVersionParts = dir.split("-");
- if (fullVersionParts == null || fullVersionParts.length < 0 || fullVersionParts.length > 2) {
- core.debug(`Skipping invalid version directory: ${dir}`);
- }
- let dirIsPreRelease = fullVersionParts.length > 1;
- if (!isPreRelease && dirIsPreRelease) {
- core.debug(`Skipping pre-release version directory: ${dir}`);
- continue;
- }
- let dirPreReleaseFlag = null;
- if (dirIsPreRelease) {
- dirPreReleaseFlag = fullVersionParts[1];
- }
- let versionNumbersString = fullVersionParts[0];
- let versionParts = dir.split(".");
- let isLatest = latestDirectory == null || latestVersionParts == null;
- if (!isLatest) {
- let maxVersionParts = versionParts.length;
- if (latestVersionParts.length > maxVersionParts) {
- maxVersionParts = latestVersionParts.length;
- }
- for (let versionPartIndex = 0; versionPartIndex < versionParts.length; versionPartIndex++) {
- let versionPart = 0;
- let latestVersionPart = 0;
- let isLastVersionPart = versionPartIndex == (maxVersionParts - 1);
- if (versionPartIndex < versionParts.length) {
- versionPart = parseInt(versionParts[versionPartIndex]);
- }
- if (versionPartIndex < latestVersionParts.length) {
- latestVersionPart = parseInt(latestVersionParts[versionPartIndex]);
- }
- if (versionPart > latestVersionPart) {
- isLatest = true;
- }
- else if (versionPart == latestVersionPart) {
- isLatest = isLastVersionPart
- &&
- ((isPreRelease && latestIsPreRelease && dirPreReleaseFlag > latestPreReleaseFlag)
- ||
- (!isPreRelease && latestIsPreRelease));
- }
- else {
- break;
- }
- if (isLatest) {
- break;
- }
- }
- }
- if (isLatest) {
- core.debug(`Setting latest version directory: ${dir}`);
- latestDirectory = path.join(versionsDirectory, dir);
- latestVersionParts = versionParts;
- latestIsPreRelease = dirIsPreRelease;
- latestPreReleaseFlag = dirPreReleaseFlag;
- }
- }
- core.debug(`latestDirectory = ${latestDirectory}`);
- return latestDirectory;
- }
- getDirectories(directory) {
- return fs.readdirSync(directory).filter(p => this.isDirectory(directory, p));
- }
- isDirectory(directory, p) {
- return fs.statSync(path.join(directory, p)).isDirectory();
- }
- setVariablesWithVersion(versionDirectory, cliVersion) {
- let packageDirectory = path.join(versionDirectory, cliVersion);
- core.debug(`packageDirectory = ${packageDirectory}`);
- this.setVariables(packageDirectory);
- }
- setVariables(packageDirectory) {
- let msdoDirectory = path.join(packageDirectory, 'tools');
- core.debug(`msdoDirectory = ${msdoDirectory}`);
- let msdoFilePath = path.join(msdoDirectory, 'guardian');
- core.debug(`msdoFilePath = ${msdoFilePath}`);
- process.env.MSDO_DIRECTORY = msdoDirectory;
- process.env.MSDO_FILEPATH = msdoFilePath;
- }
-}
-exports.MsdoInstaller = MsdoInstaller;
diff --git a/node_modules/microsoft-security-devops-actions-toolkit/msdo-toolkit.proj b/node_modules/microsoft-security-devops-actions-toolkit/msdo-toolkit.proj
deleted file mode 100644
index 88911ce2..00000000
--- a/node_modules/microsoft-security-devops-actions-toolkit/msdo-toolkit.proj
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- net6.0
- Microsoft.Security.DevOps.Cli
- 0.*
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/microsoft-security-devops-actions-toolkit/package.json b/node_modules/microsoft-security-devops-actions-toolkit/package.json
deleted file mode 100644
index 8a8b511a..00000000
--- a/node_modules/microsoft-security-devops-actions-toolkit/package.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "name": "microsoft-security-devops-actions-toolkit",
- "version": "1.5.0",
- "description": "Microsoft Security DevOps for GitHub Actions toolkit.",
- "author": "Microsoft Corporation",
- "license": "MIT",
- "homepage": "https://github.com/microsoft/security-devops-actions-toolkit",
- "dependencies": {
- "@actions/core": "1.10.0",
- "@actions/exec": "1.1.1"
- },
- "devDependencies": {
- "@types/node": "^8.0.53",
- "typescript": "^4.1.5"
- },
- "main": "msdo-client.js"
-}
diff --git a/node_modules/mimic-response/index.d.ts b/node_modules/mimic-response/index.d.ts
new file mode 100644
index 00000000..324613fb
--- /dev/null
+++ b/node_modules/mimic-response/index.d.ts
@@ -0,0 +1,29 @@
+import {IncomingMessage} from 'node:http';
+
+/**
+Mimic a [Node.js HTTP response stream](https://nodejs.org/api/http.html#http_class_http_incomingmessage)
+
+Makes `toStream` include the properties from `fromStream`.
+
+@param fromStream - The stream to copy the properties from.
+@param toStream - The stream to copy the properties to.
+@return The same object as `toStream`.
+
+@example
+```
+import {PassThrough as PassThroughStream} from 'node:stream';
+import mimicResponse from 'mimic-response';
+
+const responseStream = getHttpResponseStream();
+const myStream = new PassThroughStream();
+
+mimicResponse(responseStream, myStream);
+
+console.log(myStream.statusCode);
+//=> 200
+```
+*/
+export default function mimicResponse(
+ fromStream: IncomingMessage,
+ toStream: T,
+): T & IncomingMessage;
diff --git a/node_modules/mimic-response/index.js b/node_modules/mimic-response/index.js
new file mode 100644
index 00000000..a2e898f6
--- /dev/null
+++ b/node_modules/mimic-response/index.js
@@ -0,0 +1,75 @@
+// We define these manually to ensure they're always copied
+// even if they would move up the prototype chain
+// https://nodejs.org/api/http.html#http_class_http_incomingmessage
+const knownProperties = [
+ 'aborted',
+ 'complete',
+ 'headers',
+ 'httpVersion',
+ 'httpVersionMinor',
+ 'httpVersionMajor',
+ 'method',
+ 'rawHeaders',
+ 'rawTrailers',
+ 'setTimeout',
+ 'socket',
+ 'statusCode',
+ 'statusMessage',
+ 'trailers',
+ 'url',
+];
+
+export default function mimicResponse(fromStream, toStream) {
+ if (toStream._readableState.autoDestroy) {
+ throw new Error('The second stream must have the `autoDestroy` option set to `false`');
+ }
+
+ const fromProperties = new Set([...Object.keys(fromStream), ...knownProperties]);
+
+ const properties = {};
+
+ for (const property of fromProperties) {
+ // Don't overwrite existing properties.
+ if (property in toStream) {
+ continue;
+ }
+
+ properties[property] = {
+ get() {
+ const value = fromStream[property];
+ const isFunction = typeof value === 'function';
+
+ return isFunction ? value.bind(fromStream) : value;
+ },
+ set(value) {
+ fromStream[property] = value;
+ },
+ enumerable: true,
+ configurable: false,
+ };
+ }
+
+ Object.defineProperties(toStream, properties);
+
+ fromStream.once('aborted', () => {
+ toStream.destroy();
+
+ toStream.emit('aborted');
+ });
+
+ fromStream.once('close', () => {
+ if (fromStream.complete) {
+ if (toStream.readable) {
+ toStream.once('end', () => {
+ toStream.emit('close');
+ });
+ } else {
+ toStream.emit('close');
+ }
+ } else {
+ toStream.emit('close');
+ }
+ });
+
+ return toStream;
+}
diff --git a/node_modules/mimic-response/license b/node_modules/mimic-response/license
new file mode 100644
index 00000000..fa7ceba3
--- /dev/null
+++ b/node_modules/mimic-response/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+
+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.
diff --git a/node_modules/mimic-response/package.json b/node_modules/mimic-response/package.json
new file mode 100644
index 00000000..bf5e8ca5
--- /dev/null
+++ b/node_modules/mimic-response/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "mimic-response",
+ "version": "4.0.0",
+ "description": "Mimic a Node.js HTTP response stream",
+ "license": "MIT",
+ "repository": "sindresorhus/mimic-response",
+ "funding": "https://github.com/sponsors/sindresorhus",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.d.ts",
+ "index.js"
+ ],
+ "keywords": [
+ "mimic",
+ "response",
+ "stream",
+ "http",
+ "https",
+ "request",
+ "get",
+ "core"
+ ],
+ "devDependencies": {
+ "@types/node": "^16.4.13",
+ "ava": "^3.15.0",
+ "create-test-server": "^3.0.1",
+ "p-event": "^4.2.0",
+ "pify": "^5.0.0",
+ "tsd": "^0.17.0",
+ "xo": "^0.44.0"
+ }
+}
diff --git a/node_modules/mimic-response/readme.md b/node_modules/mimic-response/readme.md
new file mode 100644
index 00000000..09f12995
--- /dev/null
+++ b/node_modules/mimic-response/readme.md
@@ -0,0 +1,78 @@
+# mimic-response
+
+> Mimic a [Node.js HTTP response stream](https://nodejs.org/api/http.html#http_class_http_incomingmessage)
+
+## Install
+
+```
+$ npm install mimic-response
+```
+
+## Usage
+
+```js
+import {PassThrough as PassThroughStream} from 'node:stream';
+import mimicResponse from 'mimic-response';
+
+const responseStream = getHttpResponseStream();
+const myStream = new PassThroughStream();
+
+mimicResponse(responseStream, myStream);
+
+console.log(myStream.statusCode);
+//=> 200
+```
+
+## API
+
+### mimicResponse(from, to)
+
+**Note #1:** The `from.destroy(error)` function is not proxied. You have to call it manually:
+
+```js
+import {PassThrough as PassThroughStream} from 'node:stream';
+import mimicResponse from 'mimic-response';
+
+const responseStream = getHttpResponseStream();
+
+const myStream = new PassThroughStream({
+ destroy(error, callback) {
+ responseStream.destroy();
+
+ callback(error);
+ }
+});
+
+myStream.destroy();
+```
+
+Please note that `myStream` and `responseStream` never throw. The error is passed to the request instead.
+
+#### from
+
+Type: `Stream`
+
+[Node.js HTTP response stream.](https://nodejs.org/api/http.html#http_class_http_incomingmessage)
+
+#### to
+
+Type: `Stream`
+
+Any stream.
+
+## Related
+
+- [mimic-fn](https://github.com/sindresorhus/mimic-fn) - Make a function mimic another one
+- [clone-response](https://github.com/lukechilds/clone-response) - Clone a Node.js response stream
+
+---
+
+
diff --git a/package-lock.json b/package-lock.json
index b399adf0..e5854f3b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,30 +1,35 @@
{
"name": "microsoft-security-devops-action",
- "version": "1.6.0",
+ "version": "1.12.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "microsoft-security-devops-action",
- "version": "1.6.0",
+ "version": "1.12.0",
+ "license": "MIT",
"dependencies": {
"@actions/core": "1.10.0",
"@actions/exec": "1.1.1",
- "microsoft-security-devops-actions-toolkit": "1.5.0"
+ "@microsoft/security-devops-actions-toolkit": "1.11.0"
},
"devDependencies": {
"@types/mocha": "^2.2.44",
- "@types/node": "^8.0.53",
+ "@types/node": "^20.3.1",
"@types/q": "^1.0.6",
"@types/sinon": "^4.1.2",
+ "del": "^7.0.0",
+ "gulp": "^4.0.2",
+ "gulp-cli": "^2.3.0",
+ "gulp-shell": "^0.8.0",
+ "gulp-typescript": "^6.0.0-alpha.1",
+ "mocha": "^10.2.0",
"sinon": "^4.1.3",
- "typescript": "^3.7.5"
+ "typescript": "^5.1.3"
}
},
"node_modules/@actions/core": {
"version": "1.10.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/core/-/core-1.10.0.tgz",
- "integrity": "sha1-RFUcPHEWOUmi8G6U2cohV6DPrE8=",
"license": "MIT",
"dependencies": {
"@actions/http-client": "^2.0.1",
@@ -33,8 +38,6 @@
},
"node_modules/@actions/exec": {
"version": "1.1.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/exec/-/exec-1.1.1.tgz",
- "integrity": "sha1-LkPyjFQCJTcXKBmnz4hshEIhphE=",
"license": "MIT",
"dependencies": {
"@actions/io": "^1.0.1"
@@ -42,8 +45,6 @@
},
"node_modules/@actions/http-client": {
"version": "2.0.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/http-client/-/http-client-2.0.1.tgz",
- "integrity": "sha1-hz9MqY/jL2g5RipvBGMyZ3Mi+Zw=",
"license": "MIT",
"dependencies": {
"tunnel": "^0.0.6"
@@ -51,14 +52,54 @@
},
"node_modules/@actions/io": {
"version": "1.0.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@actions/io/-/io-1.0.2.tgz",
- "integrity": "sha1-L2FLbmnOFNGRGARR6zjmV2puayc=",
"license": "MIT"
},
+ "node_modules/@microsoft/security-devops-actions-toolkit": {
+ "version": "1.11.0",
+ "resolved": "https://npm.pkg.github.com/download/@microsoft/security-devops-actions-toolkit/1.11.0/04fef883382f5a7c9b9ac2015dcc419009e2a858",
+ "integrity": "sha512-dcuMhkEa8uqVpsT05E/nSMfBRtKzEhiQ/KFqEbTd5sAs7ChVP+Ke+ZMEgw4gP4LdA2cO7mH7VTfJ8xxlmwEwUw==",
+ "license": "MIT",
+ "dependencies": {
+ "@actions/core": "1.10.0",
+ "@actions/exec": "1.1.1",
+ "adm-zip": "0.5.10",
+ "decompress-response": "^8.1.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/@sinonjs/commons": {
- "version": "1.8.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/commons/-/commons-1.8.2.tgz",
- "integrity": "sha1-hY9cS0jYB3j95LnVQfJ+3A1WSIs=",
+ "version": "1.8.6",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -67,8 +108,6 @@
},
"node_modules/@sinonjs/formatio": {
"version": "2.0.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/formatio/-/formatio-2.0.0.tgz",
- "integrity": "sha1-hNt+nrVTHfGKjF4L+25EnlXmVLI=",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -77,8 +116,6 @@
},
"node_modules/@sinonjs/samsam": {
"version": "3.3.3",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/samsam/-/samsam-3.3.3.tgz",
- "integrity": "sha1-Rmgu/Zlnslm4ETa58SD9VFhf60o=",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -88,478 +125,9021 @@
}
},
"node_modules/@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha1-jaXGUwkVZT86Hzj9XxAdjD+AecU=",
+ "version": "0.7.2",
"dev": true,
"license": "(Unlicense OR Apache-2.0)"
},
"node_modules/@types/mocha": {
"version": "2.2.48",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@types/mocha/-/mocha-2.2.48.tgz",
- "integrity": "sha1-NSOxJqCwSUguHDwRh3Rg92Yi/6s=",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "8.10.66",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@types/node/-/node-8.10.66.tgz",
- "integrity": "sha1-3QNdQJ3zIqzIPf9ipgLxKleDu7M=",
+ "version": "20.8.0",
"dev": true,
"license": "MIT"
},
"node_modules/@types/q": {
- "version": "1.5.4",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@types/q/-/q-1.5.4.tgz",
- "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=",
+ "version": "1.5.6",
"dev": true,
"license": "MIT"
},
"node_modules/@types/sinon": {
"version": "4.3.3",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@types/sinon/-/sinon-4.3.3.tgz",
- "integrity": "sha1-l8u/3cMoK1/UDHq/gLmdtCb9Qjc=",
"dev": true,
"license": "MIT"
},
- "node_modules/array-from": {
- "version": "2.1.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/array-from/-/array-from-2.1.1.tgz",
- "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
+ "node_modules/adm-zip": {
+ "version": "0.5.10",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "4.0.1",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "clean-stack": "^4.0.0",
+ "indent-string": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "node_modules/diff": {
- "version": "3.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/diff/-/diff-3.5.0.tgz",
- "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=",
+ "node_modules/ansi-colors": {
+ "version": "1.1.0",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-wrap": "^0.1.0"
+ },
"engines": {
- "node": ">=0.3.1"
+ "node": ">=0.10.0"
}
},
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "node_modules/ansi-gray": {
+ "version": "0.1.1",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "ansi-wrap": "0.1.0"
+ },
"engines": {
- "node": ">=4"
+ "node": ">=0.10.0"
}
},
- "node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "node_modules/ansi-regex": {
+ "version": "2.1.1",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "node_modules/just-extend": {
- "version": "4.1.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/just-extend/-/just-extend-4.1.1.tgz",
- "integrity": "sha1-FY8f2wHxKMQR3IsoantIN7NUUoI=",
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=",
+ "node_modules/ansi-wrap": {
+ "version": "0.1.0",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "node_modules/anymatch": {
+ "version": "2.0.0",
"dev": true,
- "license": "MIT"
+ "license": "ISC",
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
},
- "node_modules/lolex": {
- "version": "2.7.5",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/lolex/-/lolex-2.7.5.tgz",
- "integrity": "sha1-ETAB1Wv8fgLVbjYpHMXEE9GqBzM=",
+ "node_modules/anymatch/node_modules/define-property": {
+ "version": "2.0.2",
"dev": true,
- "license": "BSD-3-Clause"
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "node_modules/microsoft-security-devops-actions-toolkit": {
- "version": "1.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/microsoft-security-devops-actions-toolkit/-/microsoft-security-devops-actions-toolkit-1.5.0.tgz",
- "integrity": "sha1-MDmBhJ2uivxSrrUN+K7Yucd0XiY=",
+ "node_modules/anymatch/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@actions/core": "1.10.0",
- "@actions/exec": "1.1.1"
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/nise": {
- "version": "1.5.3",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/nise/-/nise-1.5.3.tgz",
- "integrity": "sha1-nSz+N9RPVzF3ZsbpQIo1nF06wfc=",
+ "node_modules/anymatch/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "MIT",
"dependencies": {
- "@sinonjs/formatio": "^3.2.1",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "lolex": "^5.0.1",
- "path-to-regexp": "^1.7.0"
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/nise/node_modules/@sinonjs/formatio": {
- "version": "3.2.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/formatio/-/formatio-3.2.2.tgz",
- "integrity": "sha1-dxxg36dep/LWjjuUx+iIp4eBNyw=",
+ "node_modules/anymatch/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "MIT",
"dependencies": {
- "@sinonjs/commons": "^1",
- "@sinonjs/samsam": "^3.1.0"
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/nise/node_modules/lolex": {
- "version": "5.1.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/lolex/-/lolex-5.1.2.tgz",
- "integrity": "sha1-lTaU0JjOfAe8XtbQ5CvGwMbVo2c=",
+ "node_modules/anymatch/node_modules/is-descriptor": {
+ "version": "1.0.2",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "MIT",
"dependencies": {
- "@sinonjs/commons": "^1.7.0"
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=",
+ "node_modules/anymatch/node_modules/is-extendable": {
+ "version": "1.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
- "isarray": "0.0.1"
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/samsam": {
- "version": "1.3.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/samsam/-/samsam-1.3.0.tgz",
- "integrity": "sha1-jR2TUOJWItow3j5EumkrUiGrfFA=",
+ "node_modules/anymatch/node_modules/is-plain-object": {
+ "version": "2.0.4",
"dev": true,
- "license": "BSD-3-Clause"
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "node_modules/sinon": {
- "version": "4.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/sinon/-/sinon-4.5.0.tgz",
- "integrity": "sha1-QnrjEqM308UWgEzidU6MDVAoywQ=",
+ "node_modules/anymatch/node_modules/kind-of": {
+ "version": "6.0.3",
"dev": true,
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@sinonjs/formatio": "^2.0.0",
- "diff": "^3.1.0",
- "lodash.get": "^4.4.2",
- "lolex": "^2.2.0",
- "nise": "^1.2.0",
- "supports-color": "^5.1.0",
- "type-detect": "^4.0.5"
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "node_modules/anymatch/node_modules/normalize-path": {
+ "version": "2.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-flag": "^3.0.0"
+ "remove-trailing-separator": "^1.0.1"
},
"engines": {
- "node": ">=4"
+ "node": ">=0.10.0"
}
},
- "node_modules/tunnel": {
- "version": "0.0.6",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=",
+ "node_modules/append-buffer": {
+ "version": "1.0.2",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "buffer-equal": "^1.0.0"
+ },
"engines": {
- "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ "node": ">=0.10.0"
}
},
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=",
+ "node_modules/archy": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/arr-diff": {
+ "version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=0.10.0"
}
},
- "node_modules/typescript": {
- "version": "3.9.9",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha1-5pkFxUvAaB0FGL1NWHzG8tCxpnQ=",
+ "node_modules/arr-filter": {
+ "version": "1.1.2",
"dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
+ "license": "MIT",
+ "dependencies": {
+ "make-iterator": "^1.0.0"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=",
+ "node_modules/arr-flatten": {
+ "version": "1.1.0",
+ "dev": true,
"license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
+ "engines": {
+ "node": ">=0.10.0"
}
- }
- },
- "dependencies": {
- "@actions/core": {
- "version": "1.10.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/core/-/core-1.10.0.tgz",
- "integrity": "sha1-RFUcPHEWOUmi8G6U2cohV6DPrE8=",
- "requires": {
- "@actions/http-client": "^2.0.1",
- "uuid": "^8.3.2"
+ },
+ "node_modules/arr-map": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "@actions/exec": {
- "version": "1.1.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/exec/-/exec-1.1.1.tgz",
- "integrity": "sha1-LkPyjFQCJTcXKBmnz4hshEIhphE=",
- "requires": {
- "@actions/io": "^1.0.1"
+ "node_modules/arr-union": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "@actions/http-client": {
- "version": "2.0.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/@actions/http-client/-/http-client-2.0.1.tgz",
- "integrity": "sha1-hz9MqY/jL2g5RipvBGMyZ3Mi+Zw=",
- "requires": {
- "tunnel": "^0.0.6"
+ "node_modules/array-each": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "@actions/io": {
- "version": "1.0.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@actions/io/-/io-1.0.2.tgz",
- "integrity": "sha1-L2FLbmnOFNGRGARR6zjmV2puayc="
+ "node_modules/array-from": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT"
},
- "@sinonjs/commons": {
- "version": "1.8.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/commons/-/commons-1.8.2.tgz",
- "integrity": "sha1-hY9cS0jYB3j95LnVQfJ+3A1WSIs=",
+ "node_modules/array-initial": {
+ "version": "1.1.0",
"dev": true,
- "requires": {
- "type-detect": "4.0.8"
+ "license": "MIT",
+ "dependencies": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "@sinonjs/formatio": {
- "version": "2.0.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/formatio/-/formatio-2.0.0.tgz",
- "integrity": "sha1-hNt+nrVTHfGKjF4L+25EnlXmVLI=",
+ "node_modules/array-initial/node_modules/is-number": {
+ "version": "4.0.0",
"dev": true,
- "requires": {
- "samsam": "1.3.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "@sinonjs/samsam": {
- "version": "3.3.3",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/samsam/-/samsam-3.3.3.tgz",
- "integrity": "sha1-Rmgu/Zlnslm4ETa58SD9VFhf60o=",
+ "node_modules/array-last": {
+ "version": "1.3.0",
"dev": true,
- "requires": {
- "@sinonjs/commons": "^1.3.0",
- "array-from": "^2.1.1",
- "lodash": "^4.17.15"
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha1-jaXGUwkVZT86Hzj9XxAdjD+AecU=",
- "dev": true
+ "node_modules/array-last/node_modules/is-number": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "@types/mocha": {
- "version": "2.2.48",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@types/mocha/-/mocha-2.2.48.tgz",
- "integrity": "sha1-NSOxJqCwSUguHDwRh3Rg92Yi/6s=",
- "dev": true
+ "node_modules/array-slice": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-sort": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-unique": {
+ "version": "0.3.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/assign-symbols": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/async-done": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/async-each": {
+ "version": "1.0.6",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/async-settle": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async-done": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/atob": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "(MIT OR Apache-2.0)",
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/bach": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-filter": "^1.1.1",
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "array-each": "^1.0.0",
+ "array-initial": "^1.0.0",
+ "array-last": "^1.1.1",
+ "async-done": "^1.2.2",
+ "async-settle": "^1.0.0",
+ "now-and-later": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/base": {
+ "version": "0.11.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "1.13.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "2.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/buffer-equal": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cache-base": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "2.1.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ },
+ "optionalDependencies": {
+ "fsevents": "^1.2.7"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils": {
+ "version": "0.3.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clone-buffer": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/clone-stats": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cloneable-readable": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ }
+ },
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/collection-map": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-map": "^2.0.2",
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/collection-visit": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/copy-descriptor": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/copy-props": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "each-props": "^1.3.2",
+ "is-plain-object": "^5.0.0"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "8.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-response": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-compare": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^5.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/default-resolution": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-property": {
+ "version": "0.2.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/del": {
+ "version": "7.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "globby": "^13.1.2",
+ "graceful-fs": "^4.2.10",
+ "is-glob": "^4.0.3",
+ "is-path-cwd": "^3.0.0",
+ "is-path-inside": "^4.0.0",
+ "p-map": "^5.5.0",
+ "rimraf": "^3.0.2",
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/detect-file": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/diff": {
+ "version": "3.5.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/duplexify": {
+ "version": "3.7.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/each-props": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
+ }
+ },
+ "node_modules/each-props/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es5-ext": {
+ "version": "0.10.62",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "ISC",
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "node_modules/es6-weak-map": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/expand-brackets": {
+ "version": "2.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-tilde": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "type": "^2.7.2"
+ }
+ },
+ "node_modules/ext/node_modules/type": {
+ "version": "2.7.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fancy-log": {
+ "version": "1.3.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.1",
+ "dev": true,
+ "license": "MIT",
+ "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-levenshtein": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/findup-sync/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fined": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fined/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/flagged-respawn": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flush-write-stream": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/for-own": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "for-in": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fragment-cache": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "map-cache": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fs-mkdirp-stream": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fs-mkdirp-stream/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/get-caller-file": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-value": {
+ "version": "2.0.6",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "dev": true,
+ "license": "ISC",
+ "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/glob-parent": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob-stream": {
+ "version": "6.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/glob-stream/node_modules/glob-parent": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "node_modules/glob-stream/node_modules/is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob-watcher": {
+ "version": "5.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-done": "^1.2.0",
+ "chokidar": "^2.0.0",
+ "is-negated-glob": "^1.0.0",
+ "just-debounce": "^1.0.0",
+ "normalize-path": "^3.0.0",
+ "object.defaults": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/globby": {
+ "version": "13.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.3.0",
+ "ignore": "^5.2.4",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glogg": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sparkles": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/gulp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
+ "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
+ "vinyl-fs": "^3.0.0"
+ },
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulp-cli": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "color-support": "^1.1.3",
+ "concat-stream": "^1.6.0",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.4.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.2.0",
+ "yargs": "^7.1.0"
+ },
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulp-shell": {
+ "version": "0.8.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^3.0.0",
+ "fancy-log": "^1.3.3",
+ "lodash.template": "^4.5.0",
+ "plugin-error": "^1.0.1",
+ "through2": "^3.0.1",
+ "tslib": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/gulp-typescript": {
+ "version": "6.0.0-alpha.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "plugin-error": "^1.0.1",
+ "source-map": "^0.7.3",
+ "through2": "^3.0.1",
+ "vinyl": "^2.2.0",
+ "vinyl-fs": "^3.0.3"
+ },
+ "engines": {
+ "node": ">= 8"
+ },
+ "peerDependencies": {
+ "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev "
+ }
+ },
+ "node_modules/gulp-typescript/node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/gulplog": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glogg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-value": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/kind-of": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/homedir-polyfill": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parse-passwd": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/invert-kv": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-absolute": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-binary-path": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-negated-glob": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-path-cwd": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-relative": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-unc-path": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-unc-path": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "unc-path-regex": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-valid-glob": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-windows": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/just-debounce": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/just-extend": {
+ "version": "4.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/kind-of": {
+ "version": "5.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/last-run": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "default-resolution": "^2.0.0",
+ "es6-weak-map": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lcid": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "invert-kv": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lead": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flush-write-stream": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/liftoff": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "findup-sync": "^3.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/liftoff/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/load-json-file": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash._reinterpolate": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.template": {
+ "version": "4.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "node_modules/lodash.templatesettings": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "dev": true,
+ "license": "MIT",
+ "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/lolex": {
+ "version": "2.7.5",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/make-iterator": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/make-iterator/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-cache": {
+ "version": "0.2.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-visit": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/findup-sync": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/braces": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/micromatch/node_modules/fill-range": {
+ "version": "7.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/micromatch/node_modules/is-number": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/micromatch/node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "4.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mixin-deep": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mocha": {
+ "version": "10.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mochajs"
+ }
+ },
+ "node_modules/mocha/node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/anymatch": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/mocha/node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/braces": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/chokidar": {
+ "version": "3.5.3",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "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/mocha/node_modules/cliui": {
+ "version": "7.0.4",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/debug": {
+ "version": "4.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/mocha/node_modules/debug/node_modules/ms": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mocha/node_modules/diff": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/mocha/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/fill-range": {
+ "version": "7.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/find-up": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "7.2.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/is-number": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/ms": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mocha/node_modules/path-exists": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/readdirp": {
+ "version": "3.6.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/mocha/node_modules/string-width": {
+ "version": "4.2.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "8.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/mocha/node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/mocha/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "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/mocha/node_modules/y18n": {
+ "version": "5.0.8",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs": {
+ "version": "16.2.0",
+ "dev": true,
+ "license": "MIT",
+ "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/mocha/node_modules/yargs-parser": {
+ "version": "20.2.4",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mute-stdout": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.3",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/nanomatch": {
+ "version": "1.2.13",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/nise": {
+ "version": "1.5.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "lolex": "^5.0.1",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
+ "node_modules/nise/node_modules/@sinonjs/formatio": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+ "node_modules/nise/node_modules/lolex": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/now-and-later": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.3.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object-visit": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.defaults": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.map": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.reduce": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/ordered-read-streams": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "node_modules/os-locale": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lcid": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-filepath": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-node-version": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/parse-passwd": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pascalcase": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-dirname": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-exists": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-root": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-root-regex": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-root-regex": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/path-to-regexp/node_modules/isarray": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/plugin-error/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/posix-character-classes": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pretty-hrtime": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/pumpify": {
+ "version": "1.5.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "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"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg/node_modules/path-type": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/readdirp/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.6.2",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/regex-not": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/remove-bom-buffer": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/remove-bom-stream": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/remove-bom-stream/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/repeat-element": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/replace-ext": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/replace-homedir": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1",
+ "is-absolute": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/resolve": {
+ "version": "1.22.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-dir": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-options": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "value-or-function": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/resolve-url": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ret": {
+ "version": "0.1.15",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "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"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safe-regex": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ret": "~0.1.10"
+ }
+ },
+ "node_modules/samsam": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/semver": {
+ "version": "5.7.2",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/semver-greatest-satisfied-range": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sver-compat": "^1.5.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/set-value": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/set-value/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sinon": {
+ "version": "4.5.0",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/formatio": "^2.0.0",
+ "diff": "^3.1.0",
+ "lodash.get": "^4.4.2",
+ "lolex": "^2.2.0",
+ "nise": "^1.2.0",
+ "supports-color": "^5.1.0",
+ "type-detect": "^4.0.5"
+ }
+ },
+ "node_modules/sinon/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/sinon/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/slash": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/snapdragon": {
+ "version": "0.8.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/source-map": {
+ "version": "0.5.7",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.7.4",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/source-map-resolve": {
+ "version": "0.5.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "node_modules/source-map-url": {
+ "version": "0.4.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sparkles": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.15",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/split-string": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stack-trace": {
+ "version": "0.0.10",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/static-extend": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stream-exhaust": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stream-shift": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-utf8": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sver-compat": {
+ "version": "1.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/through2": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "2 || 3"
+ }
+ },
+ "node_modules/through2-filter": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "through2": "~2.0.0",
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/through2-filter/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/time-stamp": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-absolute-glob": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path": {
+ "version": "0.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path/node_modules/kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/kind-of": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-through": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/to-through/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
+ "node_modules/type": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/typescript": {
+ "version": "5.2.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unc-path-regex": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/undertaker": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "bach": "^1.0.0",
+ "collection-map": "^1.0.0",
+ "es6-weak-map": "^2.0.1",
+ "fast-levenshtein": "^1.0.0",
+ "last-run": "^1.1.0",
+ "object.defaults": "^1.0.0",
+ "object.reduce": "^1.0.0",
+ "undertaker-registry": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/undertaker-registry": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/union-value": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unique-stream": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "through2-filter": "^3.0.0"
+ }
+ },
+ "node_modules/unset-value": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value": {
+ "version": "0.3.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-values": {
+ "version": "0.1.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/upath": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4",
+ "yarn": "*"
+ }
+ },
+ "node_modules/urix": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/use": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/v8flags": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/value-or-function": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-fs": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fs-mkdirp-stream": "^1.0.0",
+ "glob-stream": "^6.1.0",
+ "graceful-fs": "^4.0.0",
+ "is-valid-glob": "^1.0.0",
+ "lazystream": "^1.0.0",
+ "lead": "^1.0.0",
+ "object.assign": "^4.0.4",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.3.3",
+ "remove-bom-buffer": "^3.0.0",
+ "remove-bom-stream": "^1.2.0",
+ "resolve-options": "^1.1.0",
+ "through2": "^2.0.0",
+ "to-through": "^2.0.0",
+ "value-or-function": "^3.0.0",
+ "vinyl": "^2.0.0",
+ "vinyl-sourcemap": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-fs/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/vinyl-sourcemap": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "append-buffer": "^1.0.2",
+ "convert-source-map": "^1.5.0",
+ "graceful-fs": "^4.1.6",
+ "normalize-path": "^2.1.1",
+ "now-and-later": "^2.0.0",
+ "remove-bom-buffer": "^3.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-sourcemap/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/workerpool": {
+ "version": "6.2.1",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yargs": {
+ "version": "7.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.1"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/camelcase": {
+ "version": "6.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/decamelize": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@actions/core": {
+ "version": "1.10.0",
+ "requires": {
+ "@actions/http-client": "^2.0.1",
+ "uuid": "^8.3.2"
+ }
+ },
+ "@actions/exec": {
+ "version": "1.1.1",
+ "requires": {
+ "@actions/io": "^1.0.1"
+ }
+ },
+ "@actions/http-client": {
+ "version": "2.0.1",
+ "requires": {
+ "tunnel": "^0.0.6"
+ }
+ },
+ "@actions/io": {
+ "version": "1.0.2"
+ },
+ "@microsoft/security-devops-actions-toolkit": {
+ "version": "1.11.0",
+ "resolved": "https://npm.pkg.github.com/download/@microsoft/security-devops-actions-toolkit/1.11.0/04fef883382f5a7c9b9ac2015dcc419009e2a858",
+ "integrity": "sha512-dcuMhkEa8uqVpsT05E/nSMfBRtKzEhiQ/KFqEbTd5sAs7ChVP+Ke+ZMEgw4gP4LdA2cO7mH7VTfJ8xxlmwEwUw==",
+ "requires": {
+ "@actions/core": "1.10.0",
+ "@actions/exec": "1.1.1",
+ "adm-zip": "0.5.10",
+ "decompress-response": "^8.1.0"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@sinonjs/commons": {
+ "version": "1.8.6",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/formatio": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "samsam": "1.3.0"
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.3.0",
+ "array-from": "^2.1.1",
+ "lodash": "^4.17.15"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "dev": true
+ },
+ "@types/mocha": {
+ "version": "2.2.48",
+ "dev": true
},
"@types/node": {
- "version": "8.10.66",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@types/node/-/node-8.10.66.tgz",
- "integrity": "sha1-3QNdQJ3zIqzIPf9ipgLxKleDu7M=",
+ "version": "20.8.0",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "dev": true
+ },
+ "@types/sinon": {
+ "version": "4.3.3",
+ "dev": true
+ },
+ "adm-zip": {
+ "version": "0.5.10"
+ },
+ "aggregate-error": {
+ "version": "4.0.1",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^4.0.0",
+ "indent-string": "^5.0.0"
+ }
+ },
+ "ansi-colors": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "^0.1.0"
+ }
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "append-buffer": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "buffer-equal": "^1.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "arr-filter": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "arr-map": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "array-from": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "array-initial": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "array-last": {
+ "version": "1.3.0",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "array-sort": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "async-done": {
+ "version": "1.3.2",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ }
+ },
+ "async-each": {
+ "version": "1.0.6",
+ "dev": true
+ },
+ "async-settle": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "async-done": "^1.2.2"
+ }
+ },
+ "atob": {
+ "version": "2.1.2",
+ "dev": true
+ },
+ "bach": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "arr-filter": "^1.1.1",
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "array-each": "^1.0.0",
+ "array-initial": "^1.0.0",
+ "array-last": "^1.1.1",
+ "async-done": "^1.2.2",
+ "async-settle": "^1.0.0",
+ "now-and-later": "^2.0.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "dev": true
+ },
+ "buffer-equal": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "camelcase": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ }
+ },
+ "clean-stack": {
+ "version": "4.2.0",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "5.0.0"
+ }
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.1.3",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "collection-map": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "arr-map": "^2.0.2",
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "dev": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.9.0",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "copy-props": {
+ "version": "2.0.5",
+ "dev": true,
+ "requires": {
+ "each-props": "^1.3.2",
+ "is-plain-object": "^5.0.0"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "d": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.2",
+ "dev": true
+ },
+ "decompress-response": {
+ "version": "8.1.0",
+ "requires": {
+ "mimic-response": "^4.0.0"
+ }
+ },
+ "default-compare": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^5.0.2"
+ }
+ },
+ "default-resolution": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "define-data-property": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.2.1",
+ "dev": true,
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "del": {
+ "version": "7.1.0",
+ "dev": true,
+ "requires": {
+ "globby": "^13.1.2",
+ "graceful-fs": "^4.2.10",
+ "is-glob": "^4.0.3",
+ "is-path-cwd": "^3.0.0",
+ "is-path-inside": "^4.0.0",
+ "p-map": "^5.5.0",
+ "rimraf": "^3.0.2",
+ "slash": "^4.0.0"
+ }
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.5.0",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "each-props": {
+ "version": "1.3.2",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
+ },
+ "dependencies": {
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.62",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.3",
+ "dev": true,
+ "requires": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.3",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "5.0.0",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "ext": {
+ "version": "1.7.0",
+ "dev": true,
+ "requires": {
+ "type": "^2.7.2"
+ },
+ "dependencies": {
+ "type": {
+ "version": "2.7.2",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ }
+ }
+ },
+ "fancy-log": {
+ "version": "1.3.3",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ }
+ },
+ "fast-glob": {
+ "version": "3.3.1",
+ "dev": true,
+ "requires": {
+ "@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"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "1.1.4",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "dependencies": {
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "flat": {
+ "version": "5.0.2",
+ "dev": true
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fs-mkdirp-stream": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.3",
+ "dev": true,
+ "requires": {
+ "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"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "glob-stream": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "5.0.5",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-done": "^1.2.0",
+ "chokidar": "^2.0.0",
+ "is-negated-glob": "^1.0.0",
+ "just-debounce": "^1.0.0",
+ "normalize-path": "^3.0.0",
+ "object.defaults": "^1.1.0"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "globby": {
+ "version": "13.2.2",
+ "dev": true,
+ "requires": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.3.0",
+ "ignore": "^5.2.4",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ }
+ },
+ "glogg": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "gopd": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.11",
+ "dev": true
+ },
+ "gulp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
+ "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
+ "dev": true,
+ "requires": {
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
+ "vinyl-fs": "^3.0.0"
+ }
+ },
+ "gulp-cli": {
+ "version": "2.3.0",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "color-support": "^1.1.3",
+ "concat-stream": "^1.6.0",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.4.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.2.0",
+ "yargs": "^7.1.0"
+ }
+ },
+ "gulp-shell": {
+ "version": "0.8.0",
+ "dev": true,
+ "requires": {
+ "chalk": "^3.0.0",
+ "fancy-log": "^1.3.3",
+ "lodash.template": "^4.5.0",
+ "plugin-error": "^1.0.1",
+ "through2": "^3.0.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "gulp-typescript": {
+ "version": "6.0.0-alpha.1",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^4.1.1",
+ "plugin-error": "^1.0.1",
+ "source-map": "^0.7.3",
+ "through2": "^3.0.1",
+ "vinyl": "^2.2.0",
+ "vinyl-fs": "^3.0.3"
+ },
+ "dependencies": {
+ "ansi-colors": {
+ "version": "4.1.3",
+ "dev": true
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "glogg": "^1.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.2.4",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "5.0.0",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.8",
+ "dev": true
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-negated-glob": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-path-cwd": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "5.0.0",
+ "dev": true
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "dev": true
+ },
+ "is-valid-glob": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "just-debounce": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "just-extend": {
+ "version": "4.2.1",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "dev": true
+ },
+ "last-run": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "default-resolution": "^2.0.0",
+ "es6-weak-map": "^2.0.1"
+ }
+ },
+ "lazystream": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.5"
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "lead": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "flush-write-stream": "^1.0.2"
+ }
+ },
+ "liftoff": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.0",
+ "findup-sync": "^3.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ },
+ "dependencies": {
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "4.5.0",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.2.0",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "lolex": {
+ "version": "2.7.5",
+ "dev": true
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "matchdep": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "mimic-response": {
+ "version": "4.0.0"
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "mocha": {
+ "version": "10.2.0",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-colors": {
+ "version": "4.1.1",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "dev": true
+ },
+ "braces": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.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"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "dev": true
+ }
+ }
+ },
+ "diff": {
+ "version": "5.0.0",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.0",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "dev": true,
+ "requires": {
+ "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"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "mute-stdout": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.3",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ }
+ }
+ },
+ "next-tick": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "nise": {
+ "version": "1.5.3",
+ "dev": true,
+ "requires": {
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "lolex": "^5.0.1",
+ "path-to-regexp": "^1.7.0"
+ },
+ "dependencies": {
+ "@sinonjs/formatio": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+ "lolex": {
+ "version": "5.1.2",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ }
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "now-and-later": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.reduce": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "dev": true,
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "p-map": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^4.0.0"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-node-version": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "dev": true
+ }
+ }
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "plugin-error": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "pump": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "remove-bom-buffer": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "remove-bom-stream": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.4",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "replace-homedir": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1",
+ "is-absolute": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.6",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-options": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "value-or-function": "^3.0.0"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.7.2",
+ "dev": true
+ },
+ "semver-greatest-satisfied-range": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "sver-compat": "^1.5.0"
+ }
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "sinon": {
+ "version": "4.5.0",
+ "dev": true,
+ "requires": {
+ "@sinonjs/formatio": "^2.0.0",
+ "diff": "^3.1.0",
+ "lodash.get": "^4.4.2",
+ "lolex": "^2.2.0",
+ "nise": "^1.2.0",
+ "supports-color": "^5.1.0",
+ "type-detect": "^4.0.5"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "slash": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.7.4",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.1",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.2.0",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.15",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "stack-trace": {
+ "version": "0.0.10",
"dev": true
},
- "@types/q": {
- "version": "1.5.4",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@types/q/-/q-1.5.4.tgz",
- "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=",
+ "static-extend": {
+ "version": "0.1.2",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ }
+ },
+ "stream-exhaust": {
+ "version": "1.0.2",
"dev": true
},
- "@types/sinon": {
- "version": "4.3.3",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@types/sinon/-/sinon-4.3.3.tgz",
- "integrity": "sha1-l8u/3cMoK1/UDHq/gLmdtCb9Qjc=",
+ "stream-shift": {
+ "version": "1.0.1",
"dev": true
},
- "array-from": {
- "version": "2.1.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/array-from/-/array-from-2.1.1.tgz",
- "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
+ "string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
"dev": true
},
- "diff": {
- "version": "3.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/diff/-/diff-3.5.0.tgz",
- "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=",
+ "supports-color": {
+ "version": "7.2.0",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
"dev": true
},
- "has-flag": {
+ "sver-compat": {
+ "version": "1.5.0",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "through2": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "2 || 3"
+ }
+ },
+ "through2-filter": {
"version": "3.0.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "requires": {
+ "through2": "~2.0.0",
+ "xtend": "~4.0.0"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
"dev": true
},
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "to-absolute-glob": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ }
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "dev": true
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "to-through": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.3"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
"dev": true
},
- "just-extend": {
- "version": "4.1.1",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/just-extend/-/just-extend-4.1.1.tgz",
- "integrity": "sha1-FY8f2wHxKMQR3IsoantIN7NUUoI=",
+ "tunnel": {
+ "version": "0.0.6"
+ },
+ "type": {
+ "version": "1.2.0",
"dev": true
},
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=",
+ "type-detect": {
+ "version": "4.0.8",
"dev": true
},
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "typedarray": {
+ "version": "0.0.6",
"dev": true
},
- "lolex": {
- "version": "2.7.5",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/lolex/-/lolex-2.7.5.tgz",
- "integrity": "sha1-ETAB1Wv8fgLVbjYpHMXEE9GqBzM=",
+ "typescript": {
+ "version": "5.2.2",
"dev": true
},
- "microsoft-security-devops-actions-toolkit": {
- "version": "1.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/microsoft-security-devops-actions-toolkit/-/microsoft-security-devops-actions-toolkit-1.5.0.tgz",
- "integrity": "sha1-MDmBhJ2uivxSrrUN+K7Yucd0XiY=",
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "dev": true
+ },
+ "undertaker": {
+ "version": "1.3.0",
+ "dev": true,
"requires": {
- "@actions/core": "1.10.0",
- "@actions/exec": "1.1.1"
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "bach": "^1.0.0",
+ "collection-map": "^1.0.0",
+ "es6-weak-map": "^2.0.1",
+ "fast-levenshtein": "^1.0.0",
+ "last-run": "^1.1.0",
+ "object.defaults": "^1.0.0",
+ "object.reduce": "^1.0.0",
+ "undertaker-registry": "^1.0.0"
}
},
- "nise": {
- "version": "1.5.3",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/nise/-/nise-1.5.3.tgz",
- "integrity": "sha1-nSz+N9RPVzF3ZsbpQIo1nF06wfc=",
+ "undertaker-registry": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.1",
"dev": true,
"requires": {
- "@sinonjs/formatio": "^3.2.1",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "lolex": "^5.0.1",
- "path-to-regexp": "^1.7.0"
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unique-stream": {
+ "version": "2.3.1",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "through2-filter": "^3.0.0"
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
},
"dependencies": {
- "@sinonjs/formatio": {
- "version": "3.2.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/@sinonjs/formatio/-/formatio-3.2.2.tgz",
- "integrity": "sha1-dxxg36dep/LWjjuUx+iIp4eBNyw=",
+ "has-value": {
+ "version": "0.3.1",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1",
- "@sinonjs/samsam": "^3.1.0"
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
}
},
- "lolex": {
- "version": "5.1.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/lolex/-/lolex-5.1.2.tgz",
- "integrity": "sha1-lTaU0JjOfAe8XtbQ5CvGwMbVo2c=",
+ "has-values": {
+ "version": "0.1.4",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "uuid": {
+ "version": "8.3.2"
+ },
+ "v8flags": {
+ "version": "3.2.0",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "value-or-function": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "2.2.1",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ },
+ "vinyl-fs": {
+ "version": "3.0.3",
+ "dev": true,
+ "requires": {
+ "fs-mkdirp-stream": "^1.0.0",
+ "glob-stream": "^6.1.0",
+ "graceful-fs": "^4.0.0",
+ "is-valid-glob": "^1.0.0",
+ "lazystream": "^1.0.0",
+ "lead": "^1.0.0",
+ "object.assign": "^4.0.4",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.3.3",
+ "remove-bom-buffer": "^3.0.0",
+ "remove-bom-stream": "^1.2.0",
+ "resolve-options": "^1.1.0",
+ "through2": "^2.0.0",
+ "to-through": "^2.0.0",
+ "value-or-function": "^3.0.0",
+ "vinyl": "^2.0.0",
+ "vinyl-sourcemap": "^1.1.0"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "2.0.5",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1.7.0"
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
}
}
}
},
- "path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=",
+ "vinyl-sourcemap": {
+ "version": "1.1.0",
"dev": true,
"requires": {
- "isarray": "0.0.1"
+ "append-buffer": "^1.0.2",
+ "convert-source-map": "^1.5.0",
+ "graceful-fs": "^4.1.6",
+ "normalize-path": "^2.1.1",
+ "now-and-later": "^2.0.0",
+ "remove-bom-buffer": "^3.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
}
},
- "samsam": {
- "version": "1.3.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/samsam/-/samsam-1.3.0.tgz",
- "integrity": "sha1-jR2TUOJWItow3j5EumkrUiGrfFA=",
- "dev": true
- },
- "sinon": {
- "version": "4.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/sinon/-/sinon-4.5.0.tgz",
- "integrity": "sha1-QnrjEqM308UWgEzidU6MDVAoywQ=",
+ "which": {
+ "version": "1.3.1",
"dev": true,
"requires": {
- "@sinonjs/formatio": "^2.0.0",
- "diff": "^3.1.0",
- "lodash.get": "^4.4.2",
- "lolex": "^2.2.0",
- "nise": "^1.2.0",
- "supports-color": "^5.1.0",
- "type-detect": "^4.0.5"
+ "isexe": "^2.0.0"
}
},
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "which-module": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "workerpool": {
+ "version": "6.2.1",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
}
},
- "tunnel": {
- "version": "0.0.6",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw="
+ "wrappy": {
+ "version": "1.0.2",
+ "dev": true
},
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=",
+ "xtend": {
+ "version": "4.0.2",
"dev": true
},
- "typescript": {
- "version": "3.9.9",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/_packaging/Guardian.Pipeline.Dependencies/npm/registry/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha1-5pkFxUvAaB0FGL1NWHzG8tCxpnQ=",
+ "y18n": {
+ "version": "3.2.2",
"dev": true
},
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://pkgs.dev.azure.com/SecurityTools/SecurityIntegration/_packaging/Guardian.Build/npm/registry/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I="
+ "yargs": {
+ "version": "7.1.2",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "dev": true
}
}
}
diff --git a/package.json b/package.json
index c228d706..0de9e27a 100644
--- a/package.json
+++ b/package.json
@@ -1,23 +1,32 @@
{
"name": "microsoft-security-devops-action",
- "version": "1.6.0",
+ "version": "1.12.0",
"description": "Node dependencies for the microsoft/security-devops-action.",
"scripts": {
- "test": "mocha"
+ "build": "npx gulp",
+ "buildTests": "npx gulp buildTests",
+ "test": "npx mocha **/*.tests.js",
+ "buildAndTest": "npx gulp buildTests & npx mocha **/*.tests.js"
},
"author": "Microsoft Corporation",
- "license": "",
+ "license": "MIT",
"dependencies": {
"@actions/core": "1.10.0",
"@actions/exec": "1.1.1",
- "microsoft-security-devops-actions-toolkit": "1.5.0"
+ "@microsoft/security-devops-actions-toolkit": "1.11.0"
},
"devDependencies": {
"@types/mocha": "^2.2.44",
- "@types/node": "^8.0.53",
+ "@types/node": "^20.3.1",
"@types/q": "^1.0.6",
"@types/sinon": "^4.1.2",
+ "del": "^7.0.0",
+ "gulp": "^4.0.2",
+ "gulp-cli": "^2.3.0",
+ "gulp-shell": "^0.8.0",
+ "gulp-typescript": "^6.0.0-alpha.1",
+ "mocha": "^10.2.0",
"sinon": "^4.1.3",
- "typescript": "^3.7.5"
+ "typescript": "^5.1.3"
}
}
diff --git a/samples/IaCMapping/azure-pipelines.yml b/samples/IaCMapping/azure-pipelines.yml
new file mode 100644
index 00000000..fb662d51
--- /dev/null
+++ b/samples/IaCMapping/azure-pipelines.yml
@@ -0,0 +1,30 @@
+trigger: none
+
+pool:
+ vmImage: 'windows-latest'
+
+steps:
+- task: TerraformInstaller@0
+ inputs:
+ terraformVersion: '1.0.0'
+- checkout: self
+
+- task: AzureCLI@2
+ inputs:
+ azureSubscription: ''
+ scriptType: 'bash'
+ scriptLocation: 'inlineScript'
+ inlineScript: |
+ az account show
+ cd ./Modules-Prod
+ terraform init
+ terraform plan
+ terraform apply -auto-approve
+
+- task: MicrosoftSecurityDevOps@1
+ displayName: 'Microsoft Security DevOps'
+ task: MicrosoftSecurityDevOps@1
+ displayName: 'Microsoft Security DevOps'
+ # If you want to only run iacfilescanner, uncomment the below lines
+ # inputs:
+ # tools: 'iacfilescanner'
diff --git a/samples/IaCMapping/main.tf b/samples/IaCMapping/main.tf
new file mode 100644
index 00000000..ead97cb4
--- /dev/null
+++ b/samples/IaCMapping/main.tf
@@ -0,0 +1,29 @@
+terraform {
+ required_providers {
+ azurerm = {
+ source = "hashicorp/azurerm"
+ version = "~> 3.0" # adjust this as per your requirements
+ }
+ }
+}
+
+provider "azurerm" {
+ features {}
+}
+
+resource "azurerm_resource_group" "resourcegroup" {
+ name = "iacmappingdemo"
+ location = "Central US"
+}
+
+resource "azurerm_storage_account" "terraformaccount1" {
+ name = "iacmapping1212"
+ resource_group_name = azurerm_resource_group.resourcegroup.name
+ location = "Central US"
+ account_tier = "Standard"
+ account_replication_type = "GRS"
+
+ tags = {
+ "mapping_tag" = "6189b638-15a5-42ec-b934-0d2b8e035ce1"
+ }
+}
diff --git a/samples/IaCMapping/readme.md b/samples/IaCMapping/readme.md
new file mode 100644
index 00000000..51cd158d
--- /dev/null
+++ b/samples/IaCMapping/readme.md
@@ -0,0 +1,12 @@
+## Introduction
+
+This folder provides samples for using [Infrastructure as Code mapping](https://learn.microsoft.com/azure/defender-for-cloud/iac-template-mapping) within DevOps security in Microsoft Defender for Cloud.
+
+This sample deployment should only be performed in non-production subscriptions with **no other Terraform managed resources**.
+
+Note that we do not choose a backend location to store the state file in this demo. Terraform utilizes a state file to store information about the current state of your managed infrastructure and associated configuration. This file will need to be persisted between different runs of the workflow. The recommended approach is to store this file within an Azure Storage Account or other similar remote backend. Normally, this storage would be provisioned manually or via a separate workflow. The Terraform backend block will need to be updated with your selected storage location (see here for documentation). To learn how to incorporate this, see [here](https://developer.hashicorp.com/terraform/language/settings/backends/azurerm).
+
+## Contents
+* [main.tf](main.tf) provisions an Azure Storage account through Terraform with a unique mapping_tag. To use this template, ensure you modify the locations, names, and unique GUID. To generate a GUID, use [this website](https://guidgenerator.com/).
+* [azure-pipelines.yml](azure-pipelines.yml) is a sample Azure DevOps pipeline that can be used to provision the Terraform code in main.tf as a resource within Azure. It is important to include the MSDO task in your ADO pipeline.
+ * Requires [Azure Resource Manager service connection](https://learn.microsoft.com/troubleshoot/azure/devops/overview-of-azure-resource-manager-service-connections#create-an-azure-rm-service-connection) with permissions to an Azure subscription.
diff --git a/samples/insecure.py b/samples/insecure.py
index d43c0b3b..f9d4921e 100644
--- a/samples/insecure.py
+++ b/samples/insecure.py
@@ -1,24 +1,26 @@
-import hashlib
-print("I am very insecure. Bandit thinks so too.")
-#B110
-xs=[1,2,3,4,5,6,7,8]
-try:
- print(xs[7])
- print(xs[8])
-except: pass
+# Commented out sample to pass scanning
+#
+#import hashlib
+# print("I am very insecure. Bandit thinks so too.")
+# #B110
+# xs=[1,2,3,4,5,6,7,8]
+# try:
+# print(xs[7])
+# print(xs[8])
+# except: pass
-ys=[1, 2, None, None]
-for y in ys:
- try:
- print(str(y+3)) #TypeErrors ahead
- except: continue #not how to handle them
+# ys=[1, 2, None, None]
+# for y in ys:
+# try:
+# print(str(y+3)) #TypeErrors ahead
+# except: continue #not how to handle them
-#some imports
-import telnetlib
-import ftplib
+# #some imports
+# import telnetlib
+# import ftplib
-#B303 and B324
-s = b"I am a string"
-print("MD5: " +hashlib.md5(s).hexdigest())
-print("SHA1: " +hashlib.sha1(s).hexdigest())
-print("SHA256: " +hashlib.sha256(s).hexdigest())
+# #B303 and B324
+# s = b"I am a string"
+# print("MD5: " +hashlib.md5(s).hexdigest())
+# print("SHA1: " +hashlib.sha1(s).hexdigest())
+# print("SHA256: " +hashlib.sha256(s).hexdigest())
diff --git a/sda.sarif b/sda.sarif
new file mode 100644
index 00000000..46a3e920
--- /dev/null
+++ b/sda.sarif
@@ -0,0 +1,9259 @@
+{
+ "$schema": "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json",
+ "version": "2.1.0",
+ "runs": [
+ {
+ "tool": {
+ "driver": {
+ "name": "antimalware",
+ "rules": [
+ {
+ "id": "NoThreatsFound",
+ "name": "No threats were found by AntiMalware."
+ }
+ ],
+ "properties": {
+ "RawName": "antimalware"
+ }
+ }
+ },
+ "invocations": [
+ {
+ "commandLine": "\"C:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\4.18.24090.11-0\\MpCmdRun.exe\" -Scan -ScanType 3 -DisableRemediation -File D:\\source\\security-devops-action",
+ "executionSuccessful": true
+ }
+ ],
+ "versionControlProvenance": [
+ {
+ "repositoryUri": "https://github.com/reynoldsa/security-devops-action",
+ "revisionId": "c5bc432f9640469fd713f651b4d18af73867f27a",
+ "branch": "main",
+ "properties": {
+ "RepositoryRoot": "D:\\source\\security-devops-action"
+ }
+ }
+ ],
+ "results": [],
+ "columnKind": "utf16CodeUnits",
+ "policies": [
+ {
+ "name": "Microsoft",
+ "version": "2.0.3"
+ }
+ ],
+ "properties": {
+ "toolInfoId": "antimalware>>0>>202411062057"
+ }
+ },
+ {
+ "tool": {
+ "driver": {
+ "name": "bandit",
+ "properties": {
+ "RawName": "bandit"
+ }
+ }
+ },
+ "invocations": [
+ {
+ "endTimeUtc": "2024-11-07T04:56:49.000Z",
+ "executionSuccessful": true
+ }
+ ],
+ "versionControlProvenance": [
+ {
+ "repositoryUri": "https://github.com/reynoldsa/security-devops-action",
+ "revisionId": "c5bc432f9640469fd713f651b4d18af73867f27a",
+ "branch": "main",
+ "properties": {
+ "RepositoryRoot": "D:\\source\\security-devops-action"
+ }
+ }
+ ],
+ "results": [],
+ "columnKind": "utf16CodeUnits",
+ "policies": [
+ {
+ "name": "Microsoft",
+ "version": "2.0.3"
+ }
+ ],
+ "properties": {
+ "metrics": {"_totals":{"loc":0,"nosec":0,"SEVERITY.UNDEFINED":0.0,"CONFIDENCE.UNDEFINED":0.0,"SEVERITY.LOW":0.0,"CONFIDENCE.LOW":0.0,"SEVERITY.MEDIUM":0.0,"CONFIDENCE.MEDIUM":0.0,"SEVERITY.HIGH":0.0,"CONFIDENCE.HIGH":0.0},"D:\\source\\security-devops-action\\samples\\insecure.py":{"loc":0,"nosec":0,"SEVERITY.UNDEFINED":0.0,"SEVERITY.LOW":0.0,"SEVERITY.MEDIUM":0.0,"SEVERITY.HIGH":0.0,"CONFIDENCE.UNDEFINED":0.0,"CONFIDENCE.LOW":0.0,"CONFIDENCE.MEDIUM":0.0,"CONFIDENCE.HIGH":0.0}},
+ "toolInfoId": "bandit>>1>>202411062057"
+ }
+ },
+ {
+ "tool": {
+ "driver": {
+ "name": "credscan",
+ "organization": "Microsoft Corporation",
+ "product": "Microsoft Security Credential Scanner Client",
+ "fullName": "CredentialScanner 2.5.1.13",
+ "version": "2.5.1.13",
+ "semanticVersion": "2.5.1",
+ "rules": [
+ {
+ "id": "CSCAN-GENERAL0020",
+ "name": "X.509 Certificate Private Key",
+ "fullDescription": {
+ "text": "used as a private component in SSL certificates."
+ },
+ "shortDescription": {
+ "text": "X.509 Certificate Private Key."
+ },
+ "messageStrings": {
+ "Default": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ }
+ },
+ "helpUri": "https://aka.ms/CredScanDocs"
+ }
+ ],
+ "properties": {
+ "Comments": "CredentialScanner is an Azure security tool to scan for credentials & other sensitive data in source code and/or system files.",
+ "RawName": "credscan"
+ }
+ },
+ "properties": {
+ "IsPreview": true
+ }
+ },
+ "invocations": [
+ {
+ "startTimeUtc": "2024-11-07T04:57:07.500Z",
+ "endTimeUtc": "2024-11-07T04:57:15.725Z",
+ "executionSuccessful": true
+ }
+ ],
+ "versionControlProvenance": [
+ {
+ "repositoryUri": "https://github.com/reynoldsa/security-devops-action",
+ "revisionId": "c5bc432f9640469fd713f651b4d18af73867f27a",
+ "branch": "main",
+ "properties": {
+ "RepositoryRoot": "D:\\source\\security-devops-action"
+ }
+ }
+ ],
+ "originalUriBaseIds": {
+ "file:///D:/source/security-devops-action/": {
+ "uri": "file:///D:/source/security-devops-action/"
+ }
+ },
+ "results": [
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/allsans.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/allsans.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "ad80df55e021c410c64bbdc3c768739c9b7fd32cfe9d37e5049efe305a7cabbe",
+ "gdnAlternativeSignature0": "471e593e20b5c75c62e499b8249c85f1835dc7f99dc9553a8a66b1be2550515d"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/badcert.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/badcert.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 19,
+ "startColumn": 1,
+ "endLine": 19,
+ "endColumn": 31
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "fdZwTjfxyQHIYf+BmyPXyLEOqdG4U2NLBuFNLckqc/s=",
+ "gdnPrimarySignature": "8c4f1c7c24033f5c2d1af110b7167b907f6c213c8da0388cc94da267b3b26053",
+ "gdnAlternativeSignature0": "370b8fdda16cd6662fa9f668df5eb3d0a34e6a7df7f9a47aa8e76ca6db6d7ceb"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/idnsans.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/idnsans.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "e0143173968f10743c164db98a97f2f2ad51665ef207fc2e5ed568dadf16daa4",
+ "gdnAlternativeSignature0": "6a0059872bc6e5a9f1910e1c20b82a8c9770991596470214159c8d720884cf3c"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert.passwd.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert.passwd.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 37
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "vIPMvs25zTEA4CvYd/yXI5Q3s9TvruLN5sjPEqmD9Qo=",
+ "gdnPrimarySignature": "81cfc42c1d0b6a44b58032508492c13a1da8709259d9b955b7818b54375d7454",
+ "gdnAlternativeSignature0": "a3834b8e54bd96dedf30634b2195d9c1b45ffc9ac2d0cf9e7d72fb01ab2be4b6"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "a5673d23e7575ac45ddbdc1d2e29a20164ef7e82f569408bffe292ceb779806a",
+ "gdnAlternativeSignature0": "13b90a64372a219e131bd44c942fb99d2e0499c28a050af144f432498b71b0b7"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert2.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert2.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "0e05cea19167aed8b8ae01c841a7334ccb9c7fd7b993406580ff2832d15f7ce5",
+ "gdnAlternativeSignature0": "17f42847401af81a1d829e8aeac516090ae6c41935d0265f19c20dc5208ce44b"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert3.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert3.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "cc2c869c6af3917c188f3405a5cab29825b895ad248b5e8d5657be11a3575e97",
+ "gdnAlternativeSignature0": "77b87003353fbbbdd842e915e87ceb94a00295aaa14b394e046cfc2e3d4c70a3"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert4.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycert4.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "c778616f1b5c561f1c66d5843f0e4759cbccf82ba1868f8af267ba96077086df",
+ "gdnAlternativeSignature0": "c387065dadee4e1320aee04842ec83e45758e802066fcc8deba5055695bfe565"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycertecc.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/keycertecc.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "07fc5532f6969723a59a30bbf4679124b3408c52ad141644aefd5a5ee5ce3187",
+ "gdnAlternativeSignature0": "c3edc90bf722fd1545c98c99e988dc5405b162ce917767cb0aa7f53ac4954506"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/pycakey.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/pycakey.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "4d5d643001bdc9ca750ddc12572d03f20c6ea6b00ccec260daad81b2cbaad937",
+ "gdnAlternativeSignature0": "5940924f309382ed130dc9019b7ddc750982599de02152e9f2badb1a4def1c77"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/ssl_key.passwd.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/ssl_key.passwd.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 37
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "vIPMvs25zTEA4CvYd/yXI5Q3s9TvruLN5sjPEqmD9Qo=",
+ "gdnPrimarySignature": "78f7c576f77b65667382d3cd1f98088d2a5e607d39cc22af6729d55e1f62f28c",
+ "gdnAlternativeSignature0": "45c71b1ac1f0538e9be6aba276dcb1484749f62e1ed6c955b8d06b3a034f4295"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ },
+ {
+ "ruleId": "CSCAN-GENERAL0020",
+ "ruleIndex": 0,
+ "rule": {
+ "id": "CSCAN-GENERAL0020"
+ },
+ "level": "error",
+ "message": {
+ "text": "A potential secret was detected. Validate file contains secrets, remove, rotate credential, and use approved store. For additional information on secret remediation see the remediation section at https://aka.ms/CredScanDocs "
+ },
+ "analysisTarget": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/ssl_key.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": ".gdn/i/nuget/Microsoft.Guardian.BanditRedist_windows_amd64.1.6.3.1/tools/lib/test/ssl_key.pem",
+ "uriBaseId": "file:///D:/source/security-devops-action/"
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1,
+ "endLine": 1,
+ "endColumn": 27
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "HashCode": "K4LFfz40Tf2WjHYSwHcxzmrGBXdPbp+75ngl6MIfimE=",
+ "gdnPrimarySignature": "1f4b7943f9d0c70caa2b1022c17ac1978128ebd3cf36afb1375dbd8dade2cd89",
+ "gdnAlternativeSignature0": "47585da2145382121fadbbbe66ef8b7f20a193b4b38372d031552b996edb0fea"
+ },
+ "suppressions": [],
+ "rank": 94.0,
+ "properties": {
+ "DefectCode": "SecretInFile",
+ "MatchingScore": 94.41,
+ "EnrichmentScore": 112.5,
+ "Severity": 94.0,
+ "Validation": "NoValidationRequested",
+ "Risk": "100"
+ }
+ }
+ ],
+ "columnKind": "utf16CodeUnits",
+ "policies": [
+ {
+ "name": "Microsoft",
+ "version": "2.0.3"
+ }
+ ],
+ "properties": {
+ "toolInfoId": "credscan>>2>>202411062057"
+ }
+ },
+ {
+ "tool": {
+ "driver": {
+ "name": "eslint",
+ "version": "8.56.0",
+ "informationUri": "https://eslint.org",
+ "properties": {
+ "RawName": "eslint"
+ }
+ }
+ },
+ "invocations": [
+ {
+ "toolConfigurationNotifications": [
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/gulpfile.js",
+ "index": 0
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'const' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/lib/container-mapping.js",
+ "index": 1
+ },
+ "region": {
+ "startLine": 36,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'const' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/lib/main.js",
+ "index": 2
+ },
+ "region": {
+ "startLine": 35,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'const' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/lib/msdo-helpers.js",
+ "index": 3
+ },
+ "region": {
+ "startLine": 7,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'const' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/lib/msdo.js",
+ "index": 5
+ },
+ "region": {
+ "startLine": 36,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'const' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/lib/post.js",
+ "index": 6
+ },
+ "region": {
+ "startLine": 35,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'const' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/lib/pre.js",
+ "index": 7
+ },
+ "region": {
+ "startLine": 35,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'const' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/samples/insecure.js",
+ "index": 8
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 5
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: Unexpected token injection"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/src/container-mapping.ts",
+ "index": 9
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/src/main.ts",
+ "index": 10
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/src/msdo-helpers.ts",
+ "index": 11
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/src/msdo-interface.ts",
+ "index": 12
+ },
+ "region": {
+ "startLine": 4,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'export' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/src/msdo.ts",
+ "index": 13
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/src/post.ts",
+ "index": 14
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/src/pre.ts",
+ "index": 15
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/test/post.tests.ts",
+ "index": 16
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/test/pre.tests.ts",
+ "index": 17
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ },
+ {
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "file:///D:/source/security-devops-action/test/testCommon.ts",
+ "index": 18
+ },
+ "region": {
+ "startLine": 1,
+ "startColumn": 1
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Parsing error: The keyword 'import' is reserved"
+ },
+ "level": "error",
+ "descriptor": {
+ "id": "ESL0999"
+ }
+ }
+ ],
+ "executionSuccessful": false
+ }
+ ],
+ "versionControlProvenance": [
+ {
+ "repositoryUri": "https://github.com/reynoldsa/security-devops-action",
+ "revisionId": "c5bc432f9640469fd713f651b4d18af73867f27a",
+ "branch": "main",
+ "properties": {
+ "RepositoryRoot": "D:\\source\\security-devops-action"
+ }
+ }
+ ],
+ "artifacts": [
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/gulpfile.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/lib/container-mapping.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/lib/main.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/lib/msdo-helpers.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/lib/msdo-interface.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/lib/msdo.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/lib/post.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/lib/pre.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/samples/insecure.js"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/src/container-mapping.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/src/main.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/src/msdo-helpers.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/src/msdo-interface.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/src/msdo.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/src/post.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/src/pre.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/test/post.tests.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/test/pre.tests.ts"
+ }
+ },
+ {
+ "location": {
+ "uri": "file:///D:/source/security-devops-action/test/testCommon.ts"
+ }
+ }
+ ],
+ "results": [],
+ "columnKind": "utf16CodeUnits",
+ "policies": [
+ {
+ "name": "Microsoft",
+ "version": "2.0.3"
+ }
+ ],
+ "properties": {
+ "toolInfoId": "eslint>>3>>202411062057"
+ }
+ },
+ {
+ "tool": {
+ "driver": {
+ "name": "iacfilescanner",
+ "organization": "Microsoft",
+ "fullName": "IaC File Scanner",
+ "version": "0.1.3",
+ "rules": [
+ {
+ "id": "IFS-1",
+ "name": "TagForResource",
+ "help": {
+ "text": "An IaC tag(s) was found on this resource. If there is a supported mapping tag, it will be used for code-to-cloud mapping."
+ },
+ "shortDescription": {
+ "text": "An IaC tag(s) was found on this resource."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "An IaC tag(s) was found on this resource."
+ }
+ }
+ }
+ ],
+ "properties": {
+ "RawName": "iacfilescanner"
+ }
+ }
+ },
+ "invocations": [
+ {
+ "startTimeUtc": "2024-11-07T04:57:38.817Z",
+ "endTimeUtc": "2024-11-07T04:57:38.863Z",
+ "executionSuccessful": true
+ }
+ ],
+ "versionControlProvenance": [
+ {
+ "repositoryUri": "https://github.com/reynoldsa/security-devops-action",
+ "revisionId": "c5bc432f9640469fd713f651b4d18af73867f27a",
+ "branch": "main",
+ "properties": {
+ "RepositoryRoot": "D:\\source\\security-devops-action"
+ }
+ }
+ ],
+ "originalUriBaseIds": {
+ "ROOTPATH": {
+ "uri": "file:///D:/source/security-devops-action"
+ }
+ },
+ "artifacts": [
+ {
+ "location": {
+ "uri": "samples/IaCMapping/main.tf",
+ "uriBaseId": "ROOTPATH"
+ }
+ }
+ ],
+ "results": [
+ {
+ "ruleId": "IFS-1",
+ "ruleIndex": 0,
+ "level": "note",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 1
+ }
+ },
+ "logicalLocations": [
+ {
+ "fullyQualifiedName": "iacmapping1212",
+ "kind": "azurerm_storage_account"
+ }
+ ],
+ "properties": {
+ "mappingTagDictionary": {"mapping_tag":"6189b638-15a5-42ec-b934-0d2b8e035ce1"}
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6a2b2a71245a88c5e349c7097ea77bb21272924e2d7d7fb032670e63664912bd",
+ "gdnAlternativeSignature0": "21dbf0708629d98ff73f008fe2a43b6e0848c2e9ab665049176189097f037ace"
+ }
+ }
+ ],
+ "columnKind": "utf16CodeUnits",
+ "policies": [
+ {
+ "name": "Microsoft",
+ "version": "2.0.3"
+ }
+ ],
+ "properties": {
+ "toolInfoId": "iacfilescanner>>4>>202411062057"
+ }
+ },
+ {
+ "tool": {
+ "driver": {
+ "name": "templateanalyzer",
+ "organization": "Microsoft",
+ "fullName": "Template Analyzer",
+ "version": "0.8.0+1ba73133c28786a16b2c19e5d5eef09eb2324538",
+ "informationUri": "https://github.com/Azure/template-analyzer",
+ "rules": [
+ {
+ "id": "TA-000001",
+ "name": "AppService.EnableDiagnosticLogs",
+ "fullDescription": {
+ "text": "Enable auditing of diagnostic logs on the app. This enables you to recreate activity trails for investigation purposes if a security incident occurs or your network is compromised."
+ },
+ "help": {
+ "text": "Enable diagnostic logs in App Service."
+ },
+ "shortDescription": {
+ "text": "Diagnostic logs in App Service should be enabled."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Enable auditing of diagnostic logs on the app. This enables you to recreate activity trails for investigation purposes if a security incident occurs or your network is compromised."
+ }
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000001-diagnostic-logs-in-app-service-should-be-enabled"
+ },
+ {
+ "id": "TA-000003",
+ "name": "AppServiceAPIApp.OnlyFTPS",
+ "fullDescription": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ },
+ "help": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ },
+ "shortDescription": {
+ "text": "FTPS only should be required in your API app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000003-ftps-only-should-be-required-in-your-api-app"
+ },
+ {
+ "id": "TA-000004",
+ "name": "AppServiceAPIApp.OnlyHTTPS",
+ "fullDescription": {
+ "text": "API apps should require HTTPS to ensure connections are made to the expected server and data in transit is protected from network layer eavesdropping attacks."
+ },
+ "help": {
+ "text": "Use HTTPS to ensure server/service authentication and protect data in transit from network layer eavesdropping attacks."
+ },
+ "shortDescription": {
+ "text": "API app should only be accessible over HTTPS."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "API apps should require HTTPS to ensure connections are made to the expected server and data in transit is protected from network layer eavesdropping attacks."
+ }
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md#ta-000004-api-app-should-only-be-accessible-over-https"
+ },
+ {
+ "id": "TA-000005",
+ "name": "AppServiceAPIApp.UseLatestTLS",
+ "fullDescription": {
+ "text": "API apps should require the latest TLS version."
+ },
+ "help": {
+ "text": "Upgrade to the latest TLS version."
+ },
+ "shortDescription": {
+ "text": "Latest TLS version should be used in your API app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "API apps should require the latest TLS version."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000005-latest-tls-version-should-be-used-in-your-api-app"
+ },
+ {
+ "id": "TA-000006",
+ "name": "AppServiceAPIApp.RestrictCORSAccess",
+ "fullDescription": {
+ "text": "Cross-Origin Resource Sharing (CORS) should not allow all domains to access your API app. Allow only required domains to interact with your API app."
+ },
+ "help": {
+ "text": "Allow only required domains to interact with your API app."
+ },
+ "shortDescription": {
+ "text": "CORS should not allow every resource to access your API app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Cross-Origin Resource Sharing (CORS) should not allow all domains to access your API app. Allow only required domains to interact with your API app."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "note"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000006-cors-should-not-allow-every-resource-to-access-your-api-app"
+ },
+ {
+ "id": "TA-000007",
+ "name": "AppServiceAPIApp.UseManagedIdentity",
+ "fullDescription": {
+ "text": "For enhanced authentication security, use a managed identity. On Azure, managed identities eliminate the need for developers to have to manage credentials by providing an identity for the Azure resource in Azure AD and using it to obtain Azure Active Directory (Azure AD) tokens."
+ },
+ "help": {
+ "text": "Use a managed identity for enhanced authentication security."
+ },
+ "shortDescription": {
+ "text": "Managed identity should be used in your API app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "For enhanced authentication security, use a managed identity. On Azure, managed identities eliminate the need for developers to have to manage credentials by providing an identity for the Azure resource in Azure AD and using it to obtain Azure Active Directory (Azure AD) tokens."
+ }
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000007-managed-identity-should-be-used-in-your-api-app"
+ },
+ {
+ "id": "TA-000009",
+ "name": "AppServiceFunctionApp.OnlyFTPS",
+ "fullDescription": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ },
+ "help": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ },
+ "shortDescription": {
+ "text": "FTPS only should be required in your function app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000009-ftps-only-should-be-required-in-your-function-app"
+ },
+ {
+ "id": "TA-000010",
+ "name": "AppServiceFunctionApp.OnlyHTTPS",
+ "fullDescription": {
+ "text": "Function apps should require HTTPS to ensure connections are made to the expected server and data in transit is protected from network layer eavesdropping attacks."
+ },
+ "help": {
+ "text": "Use HTTPS to ensure server/service authentication and protect data in transit from network layer eavesdropping attacks."
+ },
+ "shortDescription": {
+ "text": "Function app should only be accessible over HTTPS."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Function apps should require HTTPS to ensure connections are made to the expected server and data in transit is protected from network layer eavesdropping attacks."
+ }
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000010-function-app-should-only-be-accessible-over-https"
+ },
+ {
+ "id": "TA-000011",
+ "name": "AppServiceFunctionApp.UseLatestTLS",
+ "fullDescription": {
+ "text": "Function apps should require the latest TLS version."
+ },
+ "help": {
+ "text": "Upgrade to the latest TLS version."
+ },
+ "shortDescription": {
+ "text": "Latest TLS version should be used in your function app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Function apps should require the latest TLS version."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000011-latest-tls-version-should-be-used-in-your-function-app"
+ },
+ {
+ "id": "TA-000012",
+ "name": "AppServiceFunctionApp.RestrictCORSAccess",
+ "fullDescription": {
+ "text": "Cross-Origin Resource Sharing (CORS) should not allow all domains to access your function app. Allow only required domains to interact with your function app."
+ },
+ "help": {
+ "text": "Allow only required domains to interact with your function app."
+ },
+ "shortDescription": {
+ "text": "CORS should not allow every resource to access your function app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Cross-Origin Resource Sharing (CORS) should not allow all domains to access your function app. Allow only required domains to interact with your function app."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "note"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000012-cors-should-not-allow-every-resource-to-access-your-function-app"
+ },
+ {
+ "id": "TA-000013",
+ "name": "AppServiceFunctionApp.UseManagedIdentity",
+ "fullDescription": {
+ "text": "For enhanced authentication security, use a managed identity. On Azure, managed identities eliminate the need for developers to have to manage credentials by providing an identity for the Azure resource in Azure AD and using it to obtain Azure Active Directory (Azure AD) tokens."
+ },
+ "help": {
+ "text": "Use a managed identity for enhanced authentication security."
+ },
+ "shortDescription": {
+ "text": "Managed identity should be used in your function app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "For enhanced authentication security, use a managed identity. On Azure, managed identities eliminate the need for developers to have to manage credentials by providing an identity for the Azure resource in Azure AD and using it to obtain Azure Active Directory (Azure AD) tokens."
+ }
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000013-managed-identity-should-be-used-in-your-function-app"
+ },
+ {
+ "id": "TA-000015",
+ "name": "AppServiceWebApp.OnlyFTPS",
+ "fullDescription": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ },
+ "help": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ },
+ "shortDescription": {
+ "text": "FTPS only should be required in your web app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Enable FTPS enforcement for enhanced security."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000015-ftps-only-should-be-required-in-your-web-app"
+ },
+ {
+ "id": "TA-000016",
+ "name": "AppServiceWebApp.OnlyHTTPS",
+ "fullDescription": {
+ "text": "Web apps should require HTTPS to ensure connections are made to the expected server and data in transit is protected from network layer eavesdropping attacks."
+ },
+ "help": {
+ "text": "Use HTTPS to ensure server/service authentication and protect data in transit from network layer eavesdropping attacks."
+ },
+ "shortDescription": {
+ "text": "Web apps should only be accessible over HTTPS."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Web apps should require HTTPS to ensure connections are made to the expected server and data in transit is protected from network layer eavesdropping attacks."
+ }
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000016-web-apps-should-only-be-accessible-over-https"
+ },
+ {
+ "id": "TA-000017",
+ "name": "AppServiceWebApp.UseLatestTLS",
+ "fullDescription": {
+ "text": "Web apps should require the latest TLS version."
+ },
+ "help": {
+ "text": "Upgrade to the latest TLS version."
+ },
+ "shortDescription": {
+ "text": "Latest TLS version should be used in your web app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Web apps should require the latest TLS version."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000017-latest-tls-version-should-be-used-in-your-web-app"
+ },
+ {
+ "id": "TA-000018",
+ "name": "AppServiceWebApp.RestrictCORSAccess",
+ "fullDescription": {
+ "text": "Cross-Origin Resource Sharing (CORS) should not allow all domains to access your web application. Allow only required domains to interact with your web app."
+ },
+ "help": {
+ "text": "Allow only required domains to interact with your web app."
+ },
+ "shortDescription": {
+ "text": "CORS should not allow every resource to access your web apps."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "Cross-Origin Resource Sharing (CORS) should not allow all domains to access your web application. Allow only required domains to interact with your web app."
+ }
+ },
+ "defaultConfiguration": {
+ "level": "note"
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000018-cors-should-not-allow-every-resource-to-access-your-web-apps"
+ },
+ {
+ "id": "TA-000019",
+ "name": "AppServiceWebApp.UseManagedIdentity",
+ "fullDescription": {
+ "text": "For enhanced authentication security, use a managed identity. On Azure, managed identities eliminate the need for developers to have to manage credentials by providing an identity for the Azure resource in Azure AD and using it to obtain Azure Active Directory (Azure AD) tokens."
+ },
+ "help": {
+ "text": "Use a managed identity for enhanced authentication security."
+ },
+ "shortDescription": {
+ "text": "Managed identity should be used in your web app."
+ },
+ "messageStrings": {
+ "default": {
+ "text": "For enhanced authentication security, use a managed identity. On Azure, managed identities eliminate the need for developers to have to manage credentials by providing an identity for the Azure resource in Azure AD and using it to obtain Azure Active Directory (Azure AD) tokens."
+ }
+ },
+ "helpUri": "https://github.com/Azure/template-analyzer/blob/main/docs/built-in-rules.md/#ta-000019-managed-identity-should-be-used-in-your-web-app"
+ }
+ ],
+ "properties": {
+ "RawName": "templateanalyzer"
+ }
+ }
+ },
+ "invocations": [
+ {
+ "startTimeUtc": "2024-11-07T04:57:57.369Z",
+ "endTimeUtc": "2024-11-07T04:58:02.943Z",
+ "toolExecutionNotifications": [
+ {
+ "message": {
+ "text": "Discovered 1 template-parameter pairs to analyze"
+ },
+ "level": "note"
+ }
+ ],
+ "executionSuccessful": true
+ }
+ ],
+ "versionControlProvenance": [
+ {
+ "repositoryUri": "https://github.com/reynoldsa/security-devops-action",
+ "revisionId": "c5bc432f9640469fd713f651b4d18af73867f27a",
+ "branch": "main",
+ "properties": {
+ "RepositoryRoot": "D:\\source\\security-devops-action"
+ }
+ }
+ ],
+ "originalUriBaseIds": {
+ "ROOTPATH": {
+ "uri": "file:///D:/source/security-devops-action"
+ }
+ },
+ "artifacts": [
+ {
+ "location": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ }
+ }
+ ],
+ "results": [
+ {
+ "ruleId": "TA-000001",
+ "ruleIndex": 0,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 264
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "be38ef4a5beacf017f220b3d98472e58b2a22f36fd9be444d705a6da0156fd74",
+ "gdnAlternativeSignature0": "ed2c5f6d187878540408f5bbb17875166e824df9cd545c2071e66b80f6c4bb01"
+ }
+ },
+ {
+ "ruleId": "TA-000001",
+ "ruleIndex": 0,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 179
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 215
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 280
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d37d8282e31133b27146eb024c2736f1d7b65bdd6a42c08607bdb2bead9b5423",
+ "gdnAlternativeSignature0": "4c40d2cc63ce679ba6157fdc72d12b40481a893ab13296c36239c7ed8622cb86"
+ }
+ },
+ {
+ "ruleId": "TA-000003",
+ "ruleIndex": 1,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 165
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 179
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 215
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "3549d0b318441c8b49bd89ca36ea85f70bf45f022ab8c0609706ff5f5a88d2d8",
+ "gdnAlternativeSignature0": "0edb0e1b59eb8e8d3fc182d647d80d92147876a0454f610aa836842fb52181e5"
+ }
+ },
+ {
+ "ruleId": "TA-000003",
+ "ruleIndex": 1,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 195
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "8dbbe99de40dee0eb3c9eb6568f8e48c5effeec820c694f77be3999efaad513b",
+ "gdnAlternativeSignature0": "f244a0d31df3eeaba0ca511703721d84fe79f8beb849b3cc4453a7f7e9ffc9c1"
+ }
+ },
+ {
+ "ruleId": "TA-000004",
+ "ruleIndex": 2,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 29
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d1a766811373af8220668a1819fa53325b88ba36dffbf2706701e95dfa1e0aed",
+ "gdnAlternativeSignature0": "f0153f08d6d8174a8d76708b6935ba0ef2b38e06ff62758758e948d72ef1be52"
+ }
+ },
+ {
+ "ruleId": "TA-000004",
+ "ruleIndex": 2,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 44
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6e9b1515330559d9ab46e4c5b6afdd2ee9a07fc5122b6c3748c3688cfeca2789",
+ "gdnAlternativeSignature0": "c0dd2c03abc529e58717d3191f4fd5e673d3316a39093ba7bd9b964920239290"
+ }
+ },
+ {
+ "ruleId": "TA-000005",
+ "ruleIndex": 3,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 165
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 179
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 215
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b7e1a7ec5ef845a37f73c0407622bd567cdd07b2dfedc75a099d29862f374762",
+ "gdnAlternativeSignature0": "1cdb3b2f11971c7558e88df98da50f7e9a361b97dd3668a26543df13716d7597"
+ }
+ },
+ {
+ "ruleId": "TA-000005",
+ "ruleIndex": 3,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 195
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4643d07151b417ee81f093352a1a712e3536febd4f9c68cb9774bc20578541ec",
+ "gdnAlternativeSignature0": "c90df3b94d648eb7354b444cbe823e580310b5eda0a5391f3f4c80b4c05317f9"
+ }
+ },
+ {
+ "ruleId": "TA-000006",
+ "ruleIndex": 4,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 218
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "65526fef72a3bd5686e08978f894f58ee0c94d6b14333616137c1197168771c2",
+ "gdnAlternativeSignature0": "6738218eca8210aa235b6a000d75d9cd8ec306669ef6783344d819eea5ad16a3"
+ }
+ },
+ {
+ "ruleId": "TA-000006",
+ "ruleIndex": 4,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 199
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "74875f7d2bcd35300850f78ef8d77d9ccba6f1f3e01f8aa8126148d78a157a60",
+ "gdnAlternativeSignature0": "02e4138fc76c7af81aa05894a92ac4d606d31021aa410b0aa62abbdd6eba5eed"
+ }
+ },
+ {
+ "ruleId": "TA-000007",
+ "ruleIndex": 5,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 187
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "be7e0b3fdbf227e31c46e9fd7b3a36bd67a5577fe93fabe7de457fb26f58dc34",
+ "gdnAlternativeSignature0": "b76e97cfdd95980416531f989be2fa221fd4f3689c9ca167b515e573bc729d04"
+ }
+ },
+ {
+ "ruleId": "TA-000009",
+ "ruleIndex": 6,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 309
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "265486bd8e28eea8810483d45dcc81f731cd9776eed60a7893943e33d9b07b6f",
+ "gdnAlternativeSignature0": "ed44340ff877ba9d68523648797c4f0f7b56c7c028d93312e55d5c4dc2cdf0a8"
+ }
+ },
+ {
+ "ruleId": "TA-000009",
+ "ruleIndex": 6,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 179
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 215
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 325
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d70937da25c2f4c4bf54334ccc495634c22918258a3b46e45fcd389fd482855f",
+ "gdnAlternativeSignature0": "34c1f242e862c9a4b1ccceb99a33b1aac0df47aadcc5e6b4cc6a9957bfa60ddb"
+ }
+ },
+ {
+ "ruleId": "TA-000010",
+ "ruleIndex": 7,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 70
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "f09e415fda3660cc86a250ca8b35c87db6d6f5d15c69693c1cee3d5a1bd841c4",
+ "gdnAlternativeSignature0": "c11ab3206f07476269883239e183c0a38d77630a64dc0a0fac178d45f7f0cb8b"
+ }
+ },
+ {
+ "ruleId": "TA-000010",
+ "ruleIndex": 7,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 85
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b3eb7244e83ec91b3b2fdcadbdd498b8f8095140b6c23b74883b5ca61878a994",
+ "gdnAlternativeSignature0": "3a37f05c16ebd9b493c603024eeb1c5f9c35a5a44d2378a11b6c33003fba815f"
+ }
+ },
+ {
+ "ruleId": "TA-000011",
+ "ruleIndex": 8,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 309
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "03a4354b8e006461fb34be109fe4601b633f817d7b237a02dbf2f1346d91e0b4",
+ "gdnAlternativeSignature0": "c490246cd2a3ee33ab981814e002c687938d33fba3eefb891fd8db2c7a92d64c"
+ }
+ },
+ {
+ "ruleId": "TA-000011",
+ "ruleIndex": 8,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 179
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 215
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 325
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "24126068b178d605ced2a12989a4fa2ebd4d15eb30c7c2c37b9d3c6cab349686",
+ "gdnAlternativeSignature0": "c5923a6a520bd145ef3957d75a6c9d8cbf1025fcd4915449e60bbb02bd10a9e8"
+ }
+ },
+ {
+ "ruleId": "TA-000012",
+ "ruleIndex": 9,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 313
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "36e23dcaac28961df21b197c601391bc76f0c90d72380a56f1fa29327bd0017c",
+ "gdnAlternativeSignature0": "3fa84bc1cc49b60bb7204fb88c7fada8faa63e5f8c9984e10e1b83d3b95bb9e7"
+ }
+ },
+ {
+ "ruleId": "TA-000012",
+ "ruleIndex": 9,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 218
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b20e23b6ed47125967e4d087e615c9d4a9aba6d7dd9e2176ed151efcebb82d02",
+ "gdnAlternativeSignature0": "2ee68544e8b6b6a54363c95df7bd3d1422cf1c193ed005dddba038439e9650d7"
+ }
+ },
+ {
+ "ruleId": "TA-000013",
+ "ruleIndex": 10,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 319
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ed0363b6f87f1d4e7c0807f68e051e1b3787bafbd2455d4528a10bf4d94b9edf",
+ "gdnAlternativeSignature0": "72d1e7c2a57d35fa08e178c56264746e48ed563a4da2d7f5dc8570438ed5d90c"
+ }
+ },
+ {
+ "ruleId": "TA-000015",
+ "ruleIndex": 11,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 264
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ec6f5ed98134d472df3077d9c883d07c25923b8e2f9f0ee4ad62438d0a72b4f4",
+ "gdnAlternativeSignature0": "5e86cd98e6560ffb14e4eb72c99c8a11042feb183a1713a37c682f8417eca214"
+ }
+ },
+ {
+ "ruleId": "TA-000015",
+ "ruleIndex": 11,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 179
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 215
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 280
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "38abf206aa092efe2a8fa6d3546f1a342e08c86f4b25be558b8afd5bcb532651",
+ "gdnAlternativeSignature0": "f53e1db90f911dfc29b77e08c01fc16a609b9720473da74edae88428a4e2bc1c"
+ }
+ },
+ {
+ "ruleId": "TA-000016",
+ "ruleIndex": 12,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 111
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "408e1546a1bb4ad4b304b67d08fe6d99943c94a173d95edb8ddaa25a03798989",
+ "gdnAlternativeSignature0": "84d16425f679ebd232bade7a449c0cdbfef3776b9b928279599f00b71fbcfb22"
+ }
+ },
+ {
+ "ruleId": "TA-000016",
+ "ruleIndex": 12,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 125
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "bce4367d8d17dfed8e0504a56bdbde591cfc253f3632a2f21142dffcac9e33a5",
+ "gdnAlternativeSignature0": "e76df0666939f84d4c4ef2f13e863a131ecb5f7e36060126730de3bd7aee8734"
+ }
+ },
+ {
+ "ruleId": "TA-000017",
+ "ruleIndex": 13,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 264
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "84b7be1aa526d0d05c2de90d3e202c9ac537835e7b3140c871e452ee53505cf7",
+ "gdnAlternativeSignature0": "059a393d058cffaa8cdbe2fad159ee89d4f04ea63fcbee3981408888a39432e8"
+ }
+ },
+ {
+ "ruleId": "TA-000017",
+ "ruleIndex": 13,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 179
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 215
+ }
+ }
+ },
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 280
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "c8faed1d99ea5b1ced01439da3370660d482769c59a7665dda694f69f336bc76",
+ "gdnAlternativeSignature0": "216e7a3be42bfa5aae23ed3abf7bccf0d48aa5ad6ae0f617088f0de77723da89"
+ }
+ },
+ {
+ "ruleId": "TA-000018",
+ "ruleIndex": 14,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 268
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b17d79fb40da84e43645bcdc62e3f720f8039e9be3454fd847cbef27623eea6f",
+ "gdnAlternativeSignature0": "4050ebca29a424898a464da3b851e5ae90c32384f653b4478a38a331c2639fa8"
+ }
+ },
+ {
+ "ruleId": "TA-000018",
+ "ruleIndex": 14,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 218
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "478c565e6f29f52f64c42e08aca4fe0c94a9ed37a629ab4529d58c764580df69",
+ "gdnAlternativeSignature0": "0a4753c9c18e6f31fb4d238774fa74f694731b7aff4566b256d7a4f2c93536cd"
+ }
+ },
+ {
+ "ruleId": "TA-000019",
+ "ruleIndex": 15,
+ "level": "error",
+ "message": {
+ "id": "default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json",
+ "uriBaseId": "ROOTPATH"
+ },
+ "region": {
+ "startLine": 274
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b7f8fadd8a0cbc8600952d828f4f4f59c163cd99350430230e976a126d8c9a89",
+ "gdnAlternativeSignature0": "1dad07739d9b4f2d7845f7a709da12b240d41c1a3536217dc80b23b104ea5362"
+ }
+ }
+ ],
+ "columnKind": "utf16CodeUnits",
+ "policies": [
+ {
+ "name": "Microsoft",
+ "version": "2.0.3"
+ }
+ ],
+ "properties": {
+ "toolInfoId": "templateanalyzer>>5>>202411062057"
+ }
+ },
+ {
+ "tool": {
+ "driver": {
+ "name": "checkov",
+ "organization": "bridgecrew",
+ "version": "3.2.199",
+ "informationUri": "https://checkov.io",
+ "rules": [
+ {
+ "id": "CKV_AZURE_59",
+ "name": "Ensure that Storage accounts disallow public access",
+ "fullDescription": {
+ "text": "Ensure that Storage accounts disallow public access"
+ },
+ "help": {
+ "text": "Ensure that Storage accounts disallow public access\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/ensure-that-storage-accounts-disallow-public-access"
+ },
+ {
+ "id": "CKV_AZURE_33",
+ "name": "Ensure Storage logging is enabled for Queue service for read, write and delete requests",
+ "fullDescription": {
+ "text": "Ensure Storage logging is enabled for Queue service for read, write and delete requests"
+ },
+ "help": {
+ "text": "Ensure Storage logging is enabled for Queue service for read, write and delete requests\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-logging-policies/enable-requests-on-storage-logging-for-queue-service"
+ },
+ {
+ "id": "CKV_AZURE_44",
+ "name": "Ensure Storage Account is using the latest version of TLS encryption",
+ "fullDescription": {
+ "text": "Ensure Storage Account is using the latest version of TLS encryption"
+ },
+ "help": {
+ "text": "Ensure Storage Account is using the latest version of TLS encryption\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-storage-policies/bc-azr-storage-2"
+ },
+ {
+ "id": "CKV_AZURE_190",
+ "name": "Ensure that Storage blobs restrict public access",
+ "fullDescription": {
+ "text": "Ensure that Storage blobs restrict public access"
+ },
+ "help": {
+ "text": "Ensure that Storage blobs restrict public access\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/azr-networking-190"
+ },
+ {
+ "id": "CKV2_AZURE_40",
+ "name": "Ensure storage account is not configured with Shared Key authorization",
+ "fullDescription": {
+ "text": "Ensure storage account is not configured with Shared Key authorization"
+ },
+ "help": {
+ "text": "Ensure storage account is not configured with Shared Key authorization\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-iam-policies/bc-azure-2-40"
+ },
+ {
+ "id": "CKV2_AZURE_47",
+ "name": "Ensure storage account is configured without blob anonymous access",
+ "fullDescription": {
+ "text": "Ensure storage account is configured without blob anonymous access"
+ },
+ "help": {
+ "text": "Ensure storage account is configured without blob anonymous access\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-iam-policies/bc-azure-2-47"
+ },
+ {
+ "id": "CKV2_AZURE_33",
+ "name": "Ensure storage account is configured with private endpoint",
+ "fullDescription": {
+ "text": "Ensure storage account is configured with private endpoint"
+ },
+ "help": {
+ "text": "Ensure storage account is configured with private endpoint\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/bc-azure-2-33"
+ },
+ {
+ "id": "CKV2_AZURE_41",
+ "name": "Ensure storage account is configured with SAS expiration policy",
+ "fullDescription": {
+ "text": "Ensure storage account is configured with SAS expiration policy"
+ },
+ "help": {
+ "text": "Ensure storage account is configured with SAS expiration policy\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-iam-policies/bc-azure-2-41"
+ },
+ {
+ "id": "CKV2_AZURE_38",
+ "name": "Ensure soft-delete is enabled on Azure storage account",
+ "fullDescription": {
+ "text": "Ensure soft-delete is enabled on Azure storage account"
+ },
+ "help": {
+ "text": "Ensure soft-delete is enabled on Azure storage account\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/bc-azure-2-38"
+ },
+ {
+ "id": "CKV2_AZURE_1",
+ "name": "Ensure storage for critical data are encrypted with Customer Managed Key",
+ "fullDescription": {
+ "text": "Ensure storage for critical data are encrypted with Customer Managed Key"
+ },
+ "help": {
+ "text": "Ensure storage for critical data are encrypted with Customer Managed Key\nResource: azurerm_storage_account.terraformaccount1"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/ensure-storage-for-critical-data-are-encrypted-with-customer-managed-key"
+ },
+ {
+ "id": "CKV_K8S_25",
+ "name": "Minimize the admission of containers with added capability",
+ "fullDescription": {
+ "text": "Minimize the admission of containers with added capability"
+ },
+ "help": {
+ "text": "Minimize the admission of containers with added capability\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-24"
+ },
+ {
+ "id": "CKV_K8S_20",
+ "name": "Containers should not run with allowPrivilegeEscalation",
+ "fullDescription": {
+ "text": "Containers should not run with allowPrivilegeEscalation"
+ },
+ "help": {
+ "text": "Containers should not run with allowPrivilegeEscalation\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-19"
+ },
+ {
+ "id": "CKV_K8S_21",
+ "name": "The default namespace should not be used",
+ "fullDescription": {
+ "text": "The default namespace should not be used"
+ },
+ "help": {
+ "text": "The default namespace should not be used\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-20"
+ },
+ {
+ "id": "CKV_K8S_28",
+ "name": "Minimize the admission of containers with the NET_RAW capability",
+ "fullDescription": {
+ "text": "Minimize the admission of containers with the NET_RAW capability"
+ },
+ "help": {
+ "text": "Minimize the admission of containers with the NET_RAW capability\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-27"
+ },
+ {
+ "id": "CKV_K8S_43",
+ "name": "Image should use digest",
+ "fullDescription": {
+ "text": "Image should use digest"
+ },
+ "help": {
+ "text": "Image should use digest\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-39"
+ },
+ {
+ "id": "CKV_K8S_8",
+ "name": "Liveness Probe Should be Configured",
+ "fullDescription": {
+ "text": "Liveness Probe Should be Configured"
+ },
+ "help": {
+ "text": "Liveness Probe Should be Configured\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-7"
+ },
+ {
+ "id": "CKV_K8S_37",
+ "name": "Minimize the admission of containers with capabilities assigned",
+ "fullDescription": {
+ "text": "Minimize the admission of containers with capabilities assigned"
+ },
+ "help": {
+ "text": "Minimize the admission of containers with capabilities assigned\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-34"
+ },
+ {
+ "id": "CKV_K8S_29",
+ "name": "Apply security context to your pods and containers",
+ "fullDescription": {
+ "text": "Apply security context to your pods and containers"
+ },
+ "help": {
+ "text": "Apply security context to your pods and containers\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/ensure-securitycontext-is-applied-to-pods-and-containers"
+ },
+ {
+ "id": "CKV_K8S_22",
+ "name": "Use read-only filesystem for containers where possible",
+ "fullDescription": {
+ "text": "Use read-only filesystem for containers where possible"
+ },
+ "help": {
+ "text": "Use read-only filesystem for containers where possible\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-21"
+ },
+ {
+ "id": "CKV_K8S_23",
+ "name": "Minimize the admission of root containers",
+ "fullDescription": {
+ "text": "Minimize the admission of root containers"
+ },
+ "help": {
+ "text": "Minimize the admission of root containers\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-22"
+ },
+ {
+ "id": "CKV_K8S_40",
+ "name": "Containers should run as a high UID to avoid host conflict",
+ "fullDescription": {
+ "text": "Containers should run as a high UID to avoid host conflict"
+ },
+ "help": {
+ "text": "Containers should run as a high UID to avoid host conflict\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-37"
+ },
+ {
+ "id": "CKV_K8S_31",
+ "name": "Ensure that the seccomp profile is set to docker/default or runtime/default",
+ "fullDescription": {
+ "text": "Ensure that the seccomp profile is set to docker/default or runtime/default"
+ },
+ "help": {
+ "text": "Ensure that the seccomp profile is set to docker/default or runtime/default\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-29"
+ },
+ {
+ "id": "CKV_K8S_38",
+ "name": "Ensure that Service Account Tokens are only mounted where necessary",
+ "fullDescription": {
+ "text": "Ensure that Service Account Tokens are only mounted where necessary"
+ },
+ "help": {
+ "text": "Ensure that Service Account Tokens are only mounted where necessary\nResource: StatefulSet.default.cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/kubernetes-policies/kubernetes-policy-index/bc-k8s-35"
+ },
+ {
+ "id": "CKV2_K8S_6",
+ "name": "Minimize the admission of pods which lack an associated NetworkPolicy",
+ "fullDescription": {
+ "text": "Minimize the admission of pods which lack an associated NetworkPolicy"
+ },
+ "help": {
+ "text": "Minimize the admission of pods which lack an associated NetworkPolicy\nResource: Pod.default.cassandra.app-cassandra"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ }
+ },
+ {
+ "id": "CKV_AZURE_225",
+ "name": "Ensure the App Service Plan is zone redundant",
+ "fullDescription": {
+ "text": "Ensure the App Service Plan is zone redundant"
+ },
+ "help": {
+ "text": "Ensure the App Service Plan is zone redundant\nResource: Microsoft.Web/serverfarms.serverFarm"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-storage-policies/bc-azure-225"
+ },
+ {
+ "id": "CKV_AZURE_17",
+ "name": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set",
+ "fullDescription": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "help": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/bc-azr-networking-7"
+ },
+ {
+ "id": "CKV_AZURE_78",
+ "name": "Ensure FTP deployments are disabled",
+ "fullDescription": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "help": {
+ "text": "Ensure FTP deployments are disabled\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/ensure-ftp-deployments-are-disabled"
+ },
+ {
+ "id": "CKV_AZURE_18",
+ "name": "Ensure that 'HTTP Version' is the latest if used to run the web app",
+ "fullDescription": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "help": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/bc-azr-networking-8"
+ },
+ {
+ "id": "CKV_AZURE_14",
+ "name": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service",
+ "fullDescription": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service"
+ },
+ "help": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/bc-azr-networking-5"
+ },
+ {
+ "id": "CKV_AZURE_16",
+ "name": "Ensure that Register with Azure Active Directory is enabled on App Service",
+ "fullDescription": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "help": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-iam-policies/bc-azr-iam-1"
+ },
+ {
+ "id": "CKV_AZURE_71",
+ "name": "Ensure that Managed identity provider is enabled for web apps",
+ "fullDescription": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "help": {
+ "text": "Ensure that Managed identity provider is enabled for web apps\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/ensure-that-managed-identity-provider-is-enabled-for-app-services"
+ },
+ {
+ "id": "CKV_AZURE_15",
+ "name": "Ensure web app is using the latest version of TLS encryption",
+ "fullDescription": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "help": {
+ "text": "Ensure web app is using the latest version of TLS encryption\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/bc-azr-networking-6"
+ },
+ {
+ "id": "CKV_AZURE_222",
+ "name": "Ensure that Azure Web App public network access is disabled",
+ "fullDescription": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "help": {
+ "text": "Ensure that Azure Web App public network access is disabled\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/azr-networking-63"
+ },
+ {
+ "id": "CKV_AZURE_153",
+ "name": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot",
+ "fullDescription": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot"
+ },
+ "help": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/ensure-azure-web-app-redirects-all-http-traffic-to-https-in-azure-app-service-slot"
+ },
+ {
+ "id": "CKV_AZURE_67",
+ "name": "Ensure that 'HTTP Version' is the latest, if used to run the Function app",
+ "fullDescription": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "help": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/ensure-that-http-version-is-the-latest-if-used-to-run-the-function-app"
+ },
+ {
+ "id": "CKV_AZURE_70",
+ "name": "Ensure that Function apps is only accessible over HTTPS",
+ "fullDescription": {
+ "text": "Ensure that Function apps is only accessible over HTTPS"
+ },
+ "help": {
+ "text": "Ensure that Function apps is only accessible over HTTPS\nResource: Microsoft.Web/sites.ApiAppNoHttps"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-networking-policies/ensure-that-function-apps-is-only-accessible-over-https"
+ },
+ {
+ "id": "CKV_AZURE_13",
+ "name": "Ensure App Service Authentication is set on Azure App Service",
+ "fullDescription": {
+ "text": "Ensure App Service Authentication is set on Azure App Service"
+ },
+ "help": {
+ "text": "Ensure App Service Authentication is set on Azure App Service\nResource: Microsoft.Web/sites/config.SitesConfig/RestrictedCORSAccess_web"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/bc-azr-general-2"
+ },
+ {
+ "id": "CKV_AZURE_65",
+ "name": "Ensure that App service enables detailed error messages",
+ "fullDescription": {
+ "text": "Ensure that App service enables detailed error messages"
+ },
+ "help": {
+ "text": "Ensure that App service enables detailed error messages\nResource: Microsoft.Web/sites/config.SitesConfig/RestrictedCORSAccess_web"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-logging-policies/tbdensure-that-app-service-enables-detailed-error-messages"
+ },
+ {
+ "id": "CKV_AZURE_80",
+ "name": "Ensure that 'Net Framework' version is the latest, if used as a part of the web app",
+ "fullDescription": {
+ "text": "Ensure that 'Net Framework' version is the latest, if used as a part of the web app"
+ },
+ "help": {
+ "text": "Ensure that 'Net Framework' version is the latest, if used as a part of the web app\nResource: Microsoft.Web/sites/config.SitesConfig/RestrictedCORSAccess_web"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/ensure-that-net-framework-version-is-the-latest-if-used-as-a-part-of-the-web-app"
+ },
+ {
+ "id": "CKV_AZURE_66",
+ "name": "Ensure that App service enables failed request tracing",
+ "fullDescription": {
+ "text": "Ensure that App service enables failed request tracing"
+ },
+ "help": {
+ "text": "Ensure that App service enables failed request tracing\nResource: Microsoft.Web/sites/config.SitesConfig/RestrictedCORSAccess_web"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-logging-policies/ensure-that-app-service-enables-failed-request-tracing"
+ },
+ {
+ "id": "CKV_AZURE_63",
+ "name": "Ensure that App service enables HTTP logging",
+ "fullDescription": {
+ "text": "Ensure that App service enables HTTP logging"
+ },
+ "help": {
+ "text": "Ensure that App service enables HTTP logging\nResource: Microsoft.Web/sites/config.SitesConfig/RestrictedCORSAccess_web"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-logging-policies/ensure-that-app-service-enables-http-logging"
+ },
+ {
+ "id": "CKV_AZURE_88",
+ "name": "Ensure that app services use Azure Files",
+ "fullDescription": {
+ "text": "Ensure that app services use Azure Files"
+ },
+ "help": {
+ "text": "Ensure that app services use Azure Files\nResource: Microsoft.Web/sites/config.SitesConfig/RestrictedCORSAccess_web"
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/azure-policies/azure-general-policies/ensure-that-app-services-use-azure-files"
+ },
+ {
+ "id": "CKV_DOCKER_2",
+ "name": "Ensure that HEALTHCHECK instructions have been added to container images",
+ "fullDescription": {
+ "text": "Ensure that HEALTHCHECK instructions have been added to container images"
+ },
+ "help": {
+ "text": "Ensure that HEALTHCHECK instructions have been added to container images\nResource: /samples\\Dockerfile."
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/docker-policies/docker-policy-index/ensure-that-healthcheck-instructions-have-been-added-to-container-images"
+ },
+ {
+ "id": "CKV_DOCKER_3",
+ "name": "Ensure that a user for the container has been created",
+ "fullDescription": {
+ "text": "Ensure that a user for the container has been created"
+ },
+ "help": {
+ "text": "Ensure that a user for the container has been created\nResource: /samples\\Dockerfile."
+ },
+ "defaultConfiguration": {
+ "level": "error"
+ },
+ "helpUri": "https://docs.prismacloud.io/en/enterprise-edition/policy-reference/docker-policies/docker-policy-index/ensure-that-a-user-for-the-container-has-been-created"
+ }
+ ],
+ "properties": {
+ "RawName": "checkov"
+ }
+ }
+ },
+ "versionControlProvenance": [
+ {
+ "repositoryUri": "https://github.com/reynoldsa/security-devops-action",
+ "revisionId": "c5bc432f9640469fd713f651b4d18af73867f27a",
+ "branch": "main",
+ "properties": {
+ "RepositoryRoot": "D:\\source\\security-devops-action"
+ }
+ }
+ ],
+ "results": [
+ {
+ "ruleId": "CKV_DOCKER_2",
+ "ruleIndex": 42,
+ "level": "note",
+ "message": {
+ "text": "Ensure that HEALTHCHECK instructions have been added to container images"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/Dockerfile"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 2,
+ "snippet": {
+ "text": "FROM alpine:3.14.0\nRUN echo \"testuser:x:10999:10999:,,,:/home/testuser:/bin/bash\" >> /etc/passwd && echo \"testuser::18761:0:99999:7:::\" >> /etc/shadow\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d575ad4cda6d50d0a5b22693f2455c3705f7c36bb4b15adc9192690133bf9374",
+ "gdnAlternativeSignature0": "b638b75acb82e58442ebe3ecff85569f7009ac136ba3db701680ba599b613c84"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_DOCKER_3",
+ "ruleIndex": 43,
+ "level": "note",
+ "message": {
+ "text": "Ensure that a user for the container has been created"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/Dockerfile"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 2,
+ "snippet": {
+ "text": "FROM alpine:3.14.0\nRUN echo \"testuser:x:10999:10999:,,,:/home/testuser:/bin/bash\" >> /etc/passwd && echo \"testuser::18761:0:99999:7:::\" >> /etc/shadow\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "1242a262a0e0dc6e681ad67a81a121ae66f0b2562d1d669a066233daaa7a615a",
+ "gdnAlternativeSignature0": "81662655dc607bf53d1554c1d9b11df48d1d564eac1529173b8d0a2e61969e63"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_225",
+ "ruleIndex": 24,
+ "message": {
+ "text": "Ensure the App Service Plan is zone redundant"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 14,
+ "endLine": 19,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/serverfarms\",\n \"name\": \"serverFarm\",\n \"location\": \"[parameters('location')]\"\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "5221a67299814f524df6a6522077373a0fd22c2d3f1748e6025a8552333f7141",
+ "gdnAlternativeSignature0": "e6aab96518196be0b417589447f9a67fea4ac7f6f0a89667d1394f61195916f6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2052f152b6d5766a7b59a9c7b4f1d29a0f7bb9060b894b7a65b9e58207a28318",
+ "gdnAlternativeSignature0": "e18fdea947ebaa5eeda8e3c09e3f041d81794a440563fc2ff6526653c22c9300"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "5f73cccef9e3e5de304868ce267f1b16ddbbad0c9c52f4c39866f9e347b7d5d2",
+ "gdnAlternativeSignature0": "7806091df62a7f1ac9e2fd4c6a8f834a76f61fa22e8e6b577272499b3e942104"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b9354cf1c73339ba30adcd102787a08181f25aaff9f6782332e185ca65fb9a6b",
+ "gdnAlternativeSignature0": "c95f4a7cc4fb4eab5c51d2885069bf453fc79e65aac23ff2d04b015fe36717d0"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_14",
+ "ruleIndex": 28,
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "be5f727a2ce11c634799422c02b8a4786d9b57ab5402571c6025b43e6b077b3d",
+ "gdnAlternativeSignature0": "30eef084050fc6c74f476b1ce8aa4c766974299647bbfbf548e37ddd1fc1ceb1"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "8ec0cf28cfe77f1886c419e78389f8a6102878cb7612535c76516fd29c664889",
+ "gdnAlternativeSignature0": "b35de61bb549b7a7050bd10b59810d2d6c10f19155d87b4bd9b1f6a92ac87ae8"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ee7a8721be19f071f11af14aaa7aca9576415f4d4d1e62346a853f58100c82e4",
+ "gdnAlternativeSignature0": "ec622e49b27f8e22a9e6f643cf8cf907eb559102eae22be4e991b94720701355"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ef9b889940362ecd85475a4717800814cf44656011817a1d3370a3bcab0f9006",
+ "gdnAlternativeSignature0": "e8b887b9e4630d128d846a53822b5d4d36f7078245f4e138644f951d5da1c04b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e1dc47b6e2369dd39565addd153d327dd0d76de16d44d15949739b4ece89857b",
+ "gdnAlternativeSignature0": "d43a14c244c9f2b15c1ba3cec391a15f1baf94ac985c7db47cad796ef60a075e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_153",
+ "ruleIndex": 33,
+ "level": "note",
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "97d7ca490bf520d069c13ebdb0d71a09b89fcd7769dde3ce13a56b628553002e",
+ "gdnAlternativeSignature0": "4900509f0378a44b7fbeba8ec8bf1dbc277cdf17e6f3726e7111c71d23884b5a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "c56f175caf69b08d44542457468251bc934009d1db105d9b7bbebcbcb3beb452",
+ "gdnAlternativeSignature0": "913aa909429d17a84df0c1e8748ff6aea024d4ef99d8904de01b8ebfebb6ef2c"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_70",
+ "ruleIndex": 35,
+ "message": {
+ "text": "Ensure that Function apps is only accessible over HTTPS"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 20,
+ "endLine": 32,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2f45d4e06de44a01421e37f361501aad833ff822c1204548527c417f387a4bfd",
+ "gdnAlternativeSignature0": "c1176515ad6f738679a0735507229cb7137334a387d241a6f6f16e99fe2c2751"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "77217b91fc3a35c94077b14d569129379554bc6c475fef0ed13e21ee3f64e356",
+ "gdnAlternativeSignature0": "a92fd4c7fd1c82fb5c7c4e2b973b97bd202817cb9be0631ec7ec94540eca12a0"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "96272a03ccdc56a5a8b96c5109daa200cb64585bf6cb129647e817d4f08a4bfd",
+ "gdnAlternativeSignature0": "3e23e70479065b8d7df9e45448b64661427e6438fbe37d04a36266ce32bee78a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "67cba71b0950ef66e3a3a355b9a91d2d202c0813fe7f8b95e741f7812d7033fc",
+ "gdnAlternativeSignature0": "fbff0c06779ae5a02c627c32a5286e16208ac4855c442d93ca1238f9c34e1d11"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_14",
+ "ruleIndex": 28,
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2f0e38a86c95c2a52024f64d67bcd131909536c1a0e5b97ad5e093d03574efea",
+ "gdnAlternativeSignature0": "5ecca9431ae6ccf7833666998b89928bef027106342ff5293dbcea4fbfd8985f"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "047e97aec3e3db452cd6494fac807837f79de6dbf49057a6af9fa720f29866cd",
+ "gdnAlternativeSignature0": "4d3bb1bfb723ab4e801290b50a7f708428b9978d60d75e9d4b421ce3261e987e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "60a28f98c4f08919941b75af5cb9983b3d6d0d4fdbdfd72f0090398ec41d78b8",
+ "gdnAlternativeSignature0": "81e9acc15fdef5820327f3e7ba5bb7d63c7bc0ff05365b47c155fc8b5bf089f7"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "661df7e8e64bd5bdd34a1d439102b29529c13c746e5feb730fac1b89383a4443",
+ "gdnAlternativeSignature0": "20930ab9036a0597b410e4bbb9a3ae46121270bb3384764cabfe9af8664ee4c2"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "eef8e08eefe99efe6383c19a6c2f6896c9ef94af166789c535a44e439faff96b",
+ "gdnAlternativeSignature0": "d9cfc31c8fd621cb84b4ac6e4aebe8fbdc58ac745ec38f3cad71e0d6516cac75"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_153",
+ "ruleIndex": 33,
+ "level": "note",
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b6eaac00912ec69927074d73bba19050e90b93d7c2863034c5f57ac14b6c3f56",
+ "gdnAlternativeSignature0": "63b91b45615d3139f0c8994573f3c9045d8602acb32fa9a2b56ff7b1e8c030d3"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "1a28305cc04bfcb6e7d6cd127478774b1bee41fc46643d7798536ede530ea751",
+ "gdnAlternativeSignature0": "0f393c4096130800e7805e4a66f1950cf2d771868201e4632b04ce44be71df65"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_70",
+ "ruleIndex": 35,
+ "message": {
+ "text": "Ensure that Function apps is only accessible over HTTPS"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 33,
+ "endLine": 46,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b7e0569871e364eb4f1ad13804f6bbac0225d2b791ccc53683c54d880a8d56ad",
+ "gdnAlternativeSignature0": "558d0b90f8a67d09495fad85b33c5877cb89b0319b670c21c57f4959cca1eaf1"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 47,
+ "endLine": 60,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "aaddab01eb68ff517e9444b2e9d93377d31950dea3e82ddb8ab944c5dfee7c1f",
+ "gdnAlternativeSignature0": "57cebe241ad3cf45ef799f306169e2b2264d43b4510f8e0752726be7131ab490"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 47,
+ "endLine": 60,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "590ff9987116abb8a3400496eddeb58c1f024d384c76051a44dc2c39e4e49283",
+ "gdnAlternativeSignature0": "61d1b562f5d44f6ddbc3c5c2814e820572971c9d99d41830d74ee6dab9e8b1b8"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 47,
+ "endLine": 60,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "db280dfff3e2790244c8b505a80423b5448fc8e75d59a62250b7a79536cf7ff1",
+ "gdnAlternativeSignature0": "ac8dbe3cffb76f8661fc62b1f0f4da58be581b4d0ef2caa7f3cd204caca2463e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 47,
+ "endLine": 60,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "aea92e244aca978f643e2e1ac665f53ebba318185bd336a66cd47a0b665060ec",
+ "gdnAlternativeSignature0": "b48782f8c3aa23c586d734684f31424229a47093f158458dc6b2d60685e3d769"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 47,
+ "endLine": 60,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "798c50dcd9acde7329ed5009c3d07a2217acf11fec1f31004c527083961c540d",
+ "gdnAlternativeSignature0": "165dd9555e9c9161445bf7503e05d3cbed8dcbb6302f42637d6b45ccaca0ff58"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 47,
+ "endLine": 60,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4c5dfc4574f7685bcd89ddc5a65c7d0c511987abf75c9de4430457d1727af8af",
+ "gdnAlternativeSignature0": "d2ce914431dc4d3c206c55b66c4b6dca1bb2031972528496dbf84c655535f145"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 47,
+ "endLine": 60,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "44c94e00b2108329c9f76c78147b2604cc20cabbf31e7f8e4299bf4d2fd94f14",
+ "gdnAlternativeSignature0": "61c01b83b4d60836ee555f3f704f36d40cb7a30c25a0d5dcd09b5f172423448a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 47,
+ "endLine": 60,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "235d3319b06d373c3b2babd6236b29e3ee46066a92409d48434ecf54474c4f3d",
+ "gdnAlternativeSignature0": "781e42feb7fc10ca262f5cce84e3a566206e0d9abfe2465ba0a1fb45a98eef9e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "3645ea9051ae5673c813896b86a7ba9dd2b3b5e32c23cafc80908b2f2524f944",
+ "gdnAlternativeSignature0": "3f5299a9cafa29f11de4de69e3fd6545bbed0d8ef6dfdc23e989ccbd39b25cdd"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ca7a9cc04d61e4c2746e08d814a13bfce97322ab3330c23ac6a3a046e1da28cb",
+ "gdnAlternativeSignature0": "7223771f7f45cc448238ef3189a578bb9838dc9dcd6954b1769a77b8828299a3"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "71dc14fcd10f9c9553a4da8ac502b6435b2ed0db62277cd987cca6d551c6d181",
+ "gdnAlternativeSignature0": "d43fc88acb8d338e40410db7c591108b80e3d46c28060e62437919f14f722dfe"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_14",
+ "ruleIndex": 28,
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "3c0093298905723cba273ae4a7665878ab158eed129e338a933ea628f12cea27",
+ "gdnAlternativeSignature0": "3e6753aa3addf5ba0305dc624bf944236f65feb3fb342a87052ac03331c29086"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d1a5aac95999bad7e7b5c9e0e255d9d2ca11a7cea6fa5dc385222d4feaf488c3",
+ "gdnAlternativeSignature0": "33369208b079f75cbe0cab69fc1bf20ac7c43ea8f2b7536e1b4f13a771190cb6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d73af49617110ba351d090184b05165dc8855332c51a8857ed25280cf9afad44",
+ "gdnAlternativeSignature0": "09a999b4a9287158b3cca86c7e300c895a1350f7ef5816c5b55efc9f3ea7ce55"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "03753151129aae06d95a6bf05714f3962691cc58c210d7d9e1834d8fd0ccfbf9",
+ "gdnAlternativeSignature0": "ee019a6f911abaec8264daa5ce7e95edb613bb130a37c20e98d07b6ce408aa71"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b8b0b37b159d4ac33da5cc0f6c8e629f574c8e2989630facb7ed998b4fbd3e2b",
+ "gdnAlternativeSignature0": "c33ac75db46382ebd17cb142c0ac1e4ad6899e74b3a7aba6452e31cff4a58b91"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_153",
+ "ruleIndex": 33,
+ "level": "note",
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e964440f1574351b358e9ad24c3716799d68e1fff901003018bb171fe1731425",
+ "gdnAlternativeSignature0": "d665f8f5eb905b17e8a1114333ea0f968495576f17e39f7aa042a5e10d58f6dd"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "46bcafa5ef7682f49218b2cdae86203af9bd2d6676b1305517ff82ed2534c8a4",
+ "gdnAlternativeSignature0": "3aa93e2f42f94795cf57ca2abb96bbaf98d85c457a25083f5dc76fd25f6c828d"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_70",
+ "ruleIndex": 35,
+ "message": {
+ "text": "Ensure that Function apps is only accessible over HTTPS"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 61,
+ "endLine": 73,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "8897f68b7d0cfd331d551cfe62263a1a37c12f1b2fa6cc72ced0fb70f1d07bea",
+ "gdnAlternativeSignature0": "1e32293b35ee682f0207bfc6b97b03f98947a3c42b123d602986180ab02349dd"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e19ab0fdf6b41c60416ec1789e435d14b225c9059e0cb0e72b85621eaa9a6a86",
+ "gdnAlternativeSignature0": "9c76d0ac3067ddae324af883867178b01d2394b6293865422cfd1c2a0d8f2322"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "9ccd2eec805423da588e0e4fb39a20af8824e7b43e64c3e4b69ef404665c32cc",
+ "gdnAlternativeSignature0": "f564ab2518131f06da69f86eb0b8f61753018f7a7779cfb057eddd15551977ee"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "9359461703908a57a96cb32c9d317be3fe28b28f0bf8392611a279a831e3c47d",
+ "gdnAlternativeSignature0": "4e87df39b2999630b9a10e9ecb92008f17baf6e351e0b208887f85e9931397af"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_14",
+ "ruleIndex": 28,
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "52979741c27ad8788e0a869cb9c45f1dd101ad482c8c5157b8812f78991baf31",
+ "gdnAlternativeSignature0": "5058e736e60a56f62767c611d9a6aa94a5845c6ee0c4aa10fb6626a2aa2a70bf"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "31f0c7f30ad4509ee75d1a179af6e021694beb27d3a38ff0b5bcf0fd5d9bfec0",
+ "gdnAlternativeSignature0": "1129123e54ead9a5143b8feca94087caf7d35b5ae8251eafbe5b7cc169c2321e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0768d45c77ded4c1385d2feae675b811f3c643696bda9156a8bfccd599aff704",
+ "gdnAlternativeSignature0": "a60f942f7a1141f3ee5bceb13b7991b3a42f1f9d9b467e82a0d3f2b9ba339d7c"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6401e6c3c7b71999c46c38b67aac9488aa986bc7b294124d85576bda8a4c0a9a",
+ "gdnAlternativeSignature0": "4dfd2fb00d7468e4b5ec7f9be6f463d7ce9654014d94abd3d367315c073cb7bb"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e32c0ff998fcef5e2c8dc7044fad00fee70e804ea115377e31bb12a7f59a2c10",
+ "gdnAlternativeSignature0": "439c05a50fad4d75ec8d278a58719987c9009948631a2f11782251d73c8f4200"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_153",
+ "ruleIndex": 33,
+ "level": "note",
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a5c04b13d6677bc41f4b3715f1e01ce95036675d6de4df8dc0439de074a03d73",
+ "gdnAlternativeSignature0": "49b98e30d0dd7ce696a9b0b481e3281fd671f0fd70de26dd6fb7510b705e0f87"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e6301a23f58d4b667b0f9399522c3093c2289a6533a91c5cdcf22d245d526fa9",
+ "gdnAlternativeSignature0": "6091c16fd0d417e61913fb8a205a0381ceb3beab6ee091ecdef880751180c796"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_70",
+ "ruleIndex": 35,
+ "message": {
+ "text": "Ensure that Function apps is only accessible over HTTPS"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 74,
+ "endLine": 87,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp,linux\",\n \"name\": \"FunctionApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0f2797770c6de1cf13dc915a59ed4540e23f915d86778fdb7e6b17a631c027fa",
+ "gdnAlternativeSignature0": "7f942a785576efce2530b9d5e5138b37b95f67caaaf4f068e03450ac35bc9b27"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 88,
+ "endLine": 101,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "8a917df4e8c678506a78db5559479538775f940b8c14aa146822e79c821a287e",
+ "gdnAlternativeSignature0": "536e095efb39b0a59bf24cda2950cc9d7a939e228a53bf159bf8cd0fb1b8da6e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 88,
+ "endLine": 101,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "012a7cc9d1337a51d3b90f52d7866f9183fa75c796a6b444a5792554db38986e",
+ "gdnAlternativeSignature0": "a0b181e8b990ea5f29718c2f802c61d0e3d160d0fea9394c335ce70582b89c12"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 88,
+ "endLine": 101,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "07162ca3946165f6599af87465895d93e3a4672e03b47519894ce51b2c5cc9bd",
+ "gdnAlternativeSignature0": "74128bc18a6b19a6678aa9cbd0384858bae0f0270c9c36bed84570fd26bfbaca"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 88,
+ "endLine": 101,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a69519b3c5b094db4ab476ddeb127f3a19304d1a0dceaaa0990a3438551fa084",
+ "gdnAlternativeSignature0": "be3bd3018a1fbfa842ccab409f12e02b083c1afa3058a47b84c9fff1d4da82b3"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 88,
+ "endLine": 101,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "736147b83648552df9d3f8b2b392ab48a9bf9ab58620fb7a3818f40f07bbfc61",
+ "gdnAlternativeSignature0": "f27f79c0de60ef21728d0f1fc1410e6a2cea4efb033b119007e4e6ab0626384a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 88,
+ "endLine": 101,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a4b11836c10056ef0cdbbdb6afefc25c31906aaa79ca3bdbc1bdb18ed2d011b7",
+ "gdnAlternativeSignature0": "07b6c44a303c8c16e35003d2412596b49a13368ed484ff649ffa144d2b5771f8"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 88,
+ "endLine": 101,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ac27e5bae66e1875d76fc175bccaf11c9f0a10e45ac8385025f5dde90c69e4fb",
+ "gdnAlternativeSignature0": "9a5fdc81a5d1e596583d75f0a2da7b28dd82d0c9155a0baf2b57fd32cf33e21d"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 88,
+ "endLine": 101,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d06586685b31f55d3be4de5084e13b421c700e4c87a7437bffe41291bf65d35b",
+ "gdnAlternativeSignature0": "dcb4c97d8e1a7a14524f2c6534312187b0272594e87ed98fe98e172b43b7dff9"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0207769333b739f934c6c2472c0f269001ca3b1e973fe1cce2d2472d8bc56399",
+ "gdnAlternativeSignature0": "c00d75f61dc4dfb1d452c9fa66da4eea57d1fd4fada176b36c66d53d5b9b1cb0"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "5d7890ffeb37cacd07b107299144f625fa773f8e8fb28a62a7c0dea16025a0ee",
+ "gdnAlternativeSignature0": "089e7957dda409a966a18b7e294c4573d4ec68ad4e24b23938e321a8e82b030d"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "c29ee62ee70b4965bc0d67ef69030f6b70e617d9fcd3ac8200b68198192b7dc1",
+ "gdnAlternativeSignature0": "b4ba90b3e3e84e928c796f1c7ebb2e6797dea862b0e44cef5199dbe9bfe5e6aa"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_14",
+ "ruleIndex": 28,
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ee8d746b0689b235f3208999ce7df1653fa45d2711d41a5d6e7ba90fd50c388c",
+ "gdnAlternativeSignature0": "ea3506129a69e11e59a2393a8e401e15c35473f82a143746cf124f0aceb0f013"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "7b591f479f9723771411f3c953ee4ab3beda88856ae3ab53a88a64d61214e01d",
+ "gdnAlternativeSignature0": "0ac09190fd50243610f0dc1cefc1f8f5bf5340c6554465ca85333d39814c3094"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "f3eef46d00d6fe15f0b4da40bda2f0ab16e3c91fcec06df3545e1c7fe7d8ff6d",
+ "gdnAlternativeSignature0": "6d2fd3507d1f39e715802fc90b4f9779fa4a250936446362dfb3a3c8675b600b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "52578dfe3657d9104db6fe82cafe200490942428064ed7a2ba755d780c8365a3",
+ "gdnAlternativeSignature0": "c54bc8f04da699379969061f974819212592deb962782dc7070937bd22ff33c6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a5c0013a8fd9f0097d45e444d88054036ed8f442fe330587d0eae9d3714ec87c",
+ "gdnAlternativeSignature0": "10e9ab48939200696e4f91afa907175cea23e4c9aea63613a7ca13160da48477"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_153",
+ "ruleIndex": 33,
+ "level": "note",
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "c8b8eb4f5fd69ed893f62f660e2df19dc69d3bb4a56c750d27505476f1cfd972",
+ "gdnAlternativeSignature0": "3bc11347887444d838588cd7d6dfcda7b36d4137a8406b9064dff980db330958"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "7a9df9fe206d31f6b88c7461cbbedd1791b9500136c048ba6c5a1a70390f97ac",
+ "gdnAlternativeSignature0": "69eb37c4e01e77eaee89dd5c5159883cb79b66d176282e18fcb6e2926e00a887"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_70",
+ "ruleIndex": 35,
+ "message": {
+ "text": "Ensure that Function apps is only accessible over HTTPS"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 102,
+ "endLine": 114,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app,linux\",\n \"name\": \"WebAppNoHttps\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "67339bfd8472664e8e86c3dc86cc304bf7b9e1d32dfd00de0e6fbaeb2beea398",
+ "gdnAlternativeSignature0": "3e179c62893671bd328f85697d3c649cb45309fb6525b65b76a9aa5a649adc58"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4f72f1e4d99a8378d05b185cebfa8825d333a71cd5ef5b0bf186468bdbefea17",
+ "gdnAlternativeSignature0": "c78d4a844035a2ce61548f8d60784616fb2403fb930f340915bc4bfcc468716f"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "cd8cdaf3f142d7a4565c43f60507169bdc01b2286039cf1255d61c596ba3101f",
+ "gdnAlternativeSignature0": "bd5c17ecc6b46d6513f8eca0a60db649dd30c9a1eb735d04fbc624a1b4b79f51"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "f7e0232cacef22c54066a9584d66a2197c9c74c0e03f83d8eb7c4e0134444dd0",
+ "gdnAlternativeSignature0": "7d8d600175945563c3b4bfe9e2c144473bb0a6ad19b8148501a70cdc8061004d"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_14",
+ "ruleIndex": 28,
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ae3081631a2091bd9163df6f1ee42da0cb7854cc3bd2d6b398ceb8157d47c295",
+ "gdnAlternativeSignature0": "89901158631e4d71235d05997a134e895b4ccc2e4ef71ec40ae5b8fe13439adb"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "255f7613ce31bf6755bb2ecceee14742ed8cff561d5a310b501ef17b7a9297d3",
+ "gdnAlternativeSignature0": "b96b4d533c88a6a70fd777af318af980187826608f3a569474d34858e2dfe22c"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0b1fb05ccebfce0be5690acbadf661f9c2c441ad9d90eadd8db28efb2a5c574a",
+ "gdnAlternativeSignature0": "8835bcf442c7e87a2f87b12a5afeea783d9963935c9e670d58841eeee02b0fe0"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2b2824300dc3a47d41fe35895bcc7cad5518ad6adbeecd51da01c157e6c984c0",
+ "gdnAlternativeSignature0": "7649a4df3f008f0807c7e8a88a1a2dc1343615f1b82341ecdf1c0191b0c59f89"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "91cfeca6c81755244c63c7c01d9c91da11cbcf416444876ee05b92c981358129",
+ "gdnAlternativeSignature0": "c4fc2fbf31a7a52d60660e3c94d040c2abb912507c60f5b084cb0d8eae09c334"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_153",
+ "ruleIndex": 33,
+ "level": "note",
+ "message": {
+ "text": "Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service Slot"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "12fdacf2d5aa3a1ee71cd5c41c350cfba3e252cd7cbe4d579fed9cb23ab77388",
+ "gdnAlternativeSignature0": "26f89be242e3ae985b8f53b8ee3c67bead4ae71123378bf3dee7dc2d8263e6d5"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "54ced1e9e7299882c21663f45e6f27de7eb21223e77344e814efcd89b8eed40a",
+ "gdnAlternativeSignature0": "33f9e2f7e0ddc2d74628ef9e4d55b535c2ddb446f42351f4ba30926022834e1a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_70",
+ "ruleIndex": 35,
+ "message": {
+ "text": "Ensure that Function apps is only accessible over HTTPS"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 115,
+ "endLine": 127,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_HttpsFalse\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": false\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "288291d4755ccee48c5333b7d63f37c8e0706cf06714117660c84507a289ebc0",
+ "gdnAlternativeSignature0": "f5a45e007c2154338b28247a0731d64cd6c700e52b86171ebfab23be42290c88"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 128,
+ "endLine": 141,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "08008df0f45ad8f64f4f9486ca9d1d20053d77608610e41a01834c68b1cc3a09",
+ "gdnAlternativeSignature0": "7f7317b8b44e4c8b52c5da46edf6e775d451d85bc442fbf7d98ac9b0ecdf9b1a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 128,
+ "endLine": 141,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a2fcaa633cbc5e8689c4c980a1b76805afde139435d0d92003f29dbc1adb25d2",
+ "gdnAlternativeSignature0": "02fc484de3908421bf498b943a3501de05c15edb775e37cb7257ad89b4e1ea9b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 128,
+ "endLine": 141,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "bf112ad4ff0c1f3dbda36d12b6d980c83e9448f3cea1fab2124874b363e2ac33",
+ "gdnAlternativeSignature0": "ddde80d77251f9ab96e8180febb6470c41bad8598a1751ecf3205201e04032d6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 128,
+ "endLine": 141,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "adf211c29e22998dc5e478d0f175052925f2426ac7b3c077d75a3d438bf01a71",
+ "gdnAlternativeSignature0": "4b079ac338cf1fa4d757290e73fb9b247e37983f28925e314c9d61debdca8a29"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 128,
+ "endLine": 141,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "12cdce98f0d5aa4daf69793f9157ef1dd1dfd49ee3ef333f6d57ae4bad06477b",
+ "gdnAlternativeSignature0": "9ddb0eff72c95cda99852373789fe69e358faf69c9dd5a9fb90d415e957f67f3"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 128,
+ "endLine": 141,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a01b7d7f752ca024104d998b10919091141c26bbd9d73412d05e9b7df9363f16",
+ "gdnAlternativeSignature0": "7df932c190b3ca666346a7f0465861d381530f106e254076b900a704cda36707"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 128,
+ "endLine": 141,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "92ce11dc062621efb46ffb9f89dfd1b9c12dded0b94b04f3b0595f9420c0511a",
+ "gdnAlternativeSignature0": "7305d34c7a68da6a3a1c357d001602242c92f53fa425b0b2b7cac8681b8720c0"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 128,
+ "endLine": 141,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_HttpsTrue\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\"\n ],\n \"properties\": {\n \"serverFarmId\": \"[resourceId('Microsoft.Web/serverfarms', 'serverFarm')]\",\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "66c95de9831d167d19805f23da1ed5e5e7187f6b898fd2c379923be413ebaed2",
+ "gdnAlternativeSignature0": "493078216959af69095559e71e4e85917a9850e8ea90fd13cae9e6e6378b602b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 142,
+ "endLine": 158,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "dae96b9aa7c9155ac642e29b28b9fd890e6e1c9fa6412927d964aa22c026cce4",
+ "gdnAlternativeSignature0": "9b8c72895461d25ee31a8c5b1b5bdda37dc3c8b032c14663c43538cf838a7484"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 142,
+ "endLine": 158,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0e15991fa47fbdff46caf4d88b4a2be08fb7309de35a5105df283f2cd3ef226f",
+ "gdnAlternativeSignature0": "b0664718fd5e7c63444d10f083239952773ba1744dbab54ba4179b90213c162b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 142,
+ "endLine": 158,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "f413c46ab964537bc7ae7dfcb7b2ffcef2f4859e417da785d2d693af373bbc72",
+ "gdnAlternativeSignature0": "90284155b27b35d9aa40959078e6e324d16c9ad43994fb20812c5b87ab3da8fe"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 142,
+ "endLine": 158,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "7720ed6c8b5f7baf81abe1e027fc660ee7213935e400dae0edcfd3446026ac34",
+ "gdnAlternativeSignature0": "19a91cb4fc78c2570287be6094778b7b3129af76dc046331d5a63c1adc857126"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 142,
+ "endLine": 158,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "31eeaa41cb930b4da2b791b254b14fe3f8abf8fb09a3f4592f23195d8b3d32ac",
+ "gdnAlternativeSignature0": "852e81a1be9daed64c584b0a57f48572b61750d22f9558ca1b3cc6dabca55ddf"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 142,
+ "endLine": 158,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d41a5fe9e3ea723beaa68eaf7d4285ce450d5356436fcf3239c57109fab2e3f3",
+ "gdnAlternativeSignature0": "2a0982291cb4f11f796e6292520001696fa061f3549a3b4b6874c119b0dc8939"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 142,
+ "endLine": 158,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0ae6105850f99ccaf95cf627c1995f3d7919bd31dc28f2945bcbf79f503fe118",
+ "gdnAlternativeSignature0": "72596372d73524682d0e517eb7a46d563f86d56830f27c9461e4d32ba4a781f2"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 142,
+ "endLine": 158,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "7681cb3edcfb2659c2d32f2e7974f467446481d6b8f2b69ebae4df96958593db",
+ "gdnAlternativeSignature0": "a0af6fe2a04fe4a682850851dd4abb0ce07f4da5c8164df732c5042397d0f297"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 159,
+ "endLine": 168,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4df01be86e5e4147c31aff5bef0d87d3e3a0fea9898be19a88df8f6060c6e582",
+ "gdnAlternativeSignature0": "a3bda844d97fdd08c544d09a457ab85e6f4f33118537eec7ee0be628841a0253"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 159,
+ "endLine": 168,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "7622258391e9aeb5136bfc53200e4631c118a10864775710c6e20c3a1c237687",
+ "gdnAlternativeSignature0": "481a7ad24af6150821e083f9d4f23bb233fc2533beddacef31c29768569b84d6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 159,
+ "endLine": 168,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ed1a58b3b54cc84e53c7bf600f8fab74e9c11af3031a3f091ec16ba9718b6009",
+ "gdnAlternativeSignature0": "15c3e8d74638416369e18b9d5385946a799c5d6e07556598bad7ffab2362586e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 159,
+ "endLine": 168,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "3182a4a340f4f50c65cd416eee5fbc9ded7a6ef32624b4c7474bc837466e224b",
+ "gdnAlternativeSignature0": "d8a84c842901bc6695e4d2872e84deb0a7baa06a702117331a93c6feadf5a546"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 159,
+ "endLine": 168,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2c00ee00a620c96918dc4b9545112008c52cc88c30ac68e0b8478f877a16c74f",
+ "gdnAlternativeSignature0": "0fe0595ae36ffe8d3f8292c1f39136832913fff70668f658520a5a08513d411e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 159,
+ "endLine": 168,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6cdcbc4da68c2815a6d3f0bd78504303b0825e880d14097332cb170407c80128",
+ "gdnAlternativeSignature0": "1fe507dd25e0339cdc76945f0b74a799aa63dcc0b23cad0285faf8848457d916"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 159,
+ "endLine": 168,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "f3ac1d65124943989cd407b1862791529fab3c4e0eedc65511c90e43edf3404b",
+ "gdnAlternativeSignature0": "298513397a838c0f2a237b8c715b3e500bcd2a54a0f1f6163bd77768da9dbcca"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 159,
+ "endLine": 168,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "bd6450c773eed311a8e88ceb126978f5c3988a64c332b8ec936cd28ea7aa295b",
+ "gdnAlternativeSignature0": "f234d72c8e49b23ce2aa32bda1a3f909baa6ad9b4fbbf65d4211d56cbf976848"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_13",
+ "ruleIndex": 36,
+ "message": {
+ "text": "Ensure App Service Authentication is set on Azure App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 169,
+ "endLine": 186,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/RestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4764b062aa2d198673df7c5f6d2c0e9c01286e83909a609e2372747b782c1ab7",
+ "gdnAlternativeSignature0": "528e2e7673c1c9c45f2e03b442261956045574d01f03c9004d1d2bef6c09bea0"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_65",
+ "ruleIndex": 37,
+ "level": "note",
+ "message": {
+ "text": "Ensure that App service enables detailed error messages"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 169,
+ "endLine": 186,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/RestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b7a5a598012ddeb8be2fd66b67a61ffcdc2b743ee4bdec4d88ff3ec3b35747b5",
+ "gdnAlternativeSignature0": "1cef927286d0a4b4ea6cf8c1b9c129beffa0889f29a77ce4d2b443c9d83d3669"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_80",
+ "ruleIndex": 38,
+ "level": "note",
+ "message": {
+ "text": "Ensure that 'Net Framework' version is the latest, if used as a part of the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 169,
+ "endLine": 186,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/RestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "3f0e499426cfa4fe5bdb96a9894cb77d781ce58b0d391af6741cbbb23829d7c9",
+ "gdnAlternativeSignature0": "e237636bdd6a09fe032da4732bf99d542b96c319747ff963d56185e4298297e4"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_66",
+ "ruleIndex": 39,
+ "level": "note",
+ "message": {
+ "text": "Ensure that App service enables failed request tracing"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 169,
+ "endLine": 186,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/RestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ecda7f10c676f4fb72429cae500da0aa6d3a253664f489dd99c37140cc4adbdd",
+ "gdnAlternativeSignature0": "456c9b0bbba231ac9f76aeb80c65a8f2e4f2395fb0cbc94b7aa38df4ba418c4f"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_63",
+ "ruleIndex": 40,
+ "level": "note",
+ "message": {
+ "text": "Ensure that App service enables HTTP logging"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 169,
+ "endLine": 186,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/RestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0debc8b4bed8e61fddb6166094e0f30c9823a2a4bc6e21990d839ce42bbe7faf",
+ "gdnAlternativeSignature0": "119c560594404bbb1f85c2a4a64be3ba7f355cd183dcc2efa31fd0bc552f5ad5"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 169,
+ "endLine": 186,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/RestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "5c6cabb001d3b83d407085e00b359528524e83c168685191c6a9258098a9d366",
+ "gdnAlternativeSignature0": "3664e4a542b0f7100774ae71190236958f7e845d9a1d5079ba8b85ebf4ecfd1d"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_88",
+ "ruleIndex": 41,
+ "level": "note",
+ "message": {
+ "text": "Ensure that app services use Azure Files"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 169,
+ "endLine": 186,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/RestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6f0de3fde830219d08c3c4083fce6ccd9966859a6cd4143ec03fe04798472dee",
+ "gdnAlternativeSignature0": "6d432a9079e10e7a68453f21043b67398f44a7095b3b4337ad2a97b879c6adc4"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 187,
+ "endLine": 204,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "dcd550d66ea4f3ffc89adf365fe7cd5bf8d63462acecd1cccb341a7335e9fbc6",
+ "gdnAlternativeSignature0": "5831a40aa6b645473d2ba22c02586e6993565e63f22aec548d3af0fa06b9fd22"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 187,
+ "endLine": 204,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6b0c6b35c56eaa234e454e964d8305e90681f1bb57225e8b47b7d84d4bd9c52f",
+ "gdnAlternativeSignature0": "25b4881300990c178e3af646a347540425e737d05e462e73ac054f3c73691340"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 187,
+ "endLine": 204,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "9fb5162913194706fc251e38d156beebe0887f9bb6ee8c03671cd6755a952833",
+ "gdnAlternativeSignature0": "99d41b0689e4d871f9d62281e26dfbfd83c98541d8a02fcc05cae59e1c6e1e61"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 187,
+ "endLine": 204,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e11b584dd233a10ac72c56c29b0abb0a46b40eec0fd60d073902939bb2fa1a7c",
+ "gdnAlternativeSignature0": "0094ff86f766a290f1f59fd99f98729982d98a5c48687076a1fef7cf652dc8c1"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 187,
+ "endLine": 204,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4750d98ad7c586d98825c46bea9511b196f12dc4264fb696186efd16ab3d94a2",
+ "gdnAlternativeSignature0": "b8e824ce01520cea292f1a7f62c7bcb8a5f77c5151b5bc056b1412295ff3497a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 187,
+ "endLine": 204,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6618f89bf0f657561f12e6f711f090337aa8f3864239d9b428ecc00ca4e734d8",
+ "gdnAlternativeSignature0": "020034ec5f28ee65e82f5e48c62ebc00c918318b37fb5530d365b705686fd720"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 187,
+ "endLine": 204,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "257663068ac706eb48e30972d5ef65ae59a81b05935937b81969fbce76b54284",
+ "gdnAlternativeSignature0": "7162b78e9cff93e85080d9d077dbd2f6d9c5a765d0da6485890b044204b68786"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 187,
+ "endLine": 204,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"api\",\n \"name\": \"ApiApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2dae51e3df9996d76d22a1ae6f75f332e4bf5bad3f4272e79c26b2b7c999ac94",
+ "gdnAlternativeSignature0": "8259e76b9c016c2688d043c19e0143fe202feb2d893e108efc9e81c9d35ce4f5"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_13",
+ "ruleIndex": 36,
+ "message": {
+ "text": "Ensure App Service Authentication is set on Azure App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 205,
+ "endLine": 222,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/UnrestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"*\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0e8af6cde44520ef4bcab2e8711c2dda5a7fd48878091674e03dc681118a266f",
+ "gdnAlternativeSignature0": "146cabdfaf6092c02eb82036132680f7b6808bdd5432312d46330c9bd3585e72"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_65",
+ "ruleIndex": 37,
+ "level": "note",
+ "message": {
+ "text": "Ensure that App service enables detailed error messages"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 205,
+ "endLine": 222,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/UnrestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"*\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ef81362c707d65d3863cae808daf52e6f7ef001be334504a099e1b9ff50e232b",
+ "gdnAlternativeSignature0": "6b075093c48fdb089dd2354278746e6a51fe721cabb128f140a431cf005127d3"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_80",
+ "ruleIndex": 38,
+ "level": "note",
+ "message": {
+ "text": "Ensure that 'Net Framework' version is the latest, if used as a part of the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 205,
+ "endLine": 222,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/UnrestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"*\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0b92428b5f8d657f24f7b113a8e844c8b9f0eb0582cb7ceea6933aa04dafd8ff",
+ "gdnAlternativeSignature0": "817496a6ee1a0d6d64bb24701e78f9cba8b3fc06268f0bade0689ce46999e311"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_66",
+ "ruleIndex": 39,
+ "level": "note",
+ "message": {
+ "text": "Ensure that App service enables failed request tracing"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 205,
+ "endLine": 222,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/UnrestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"*\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "3e9ad501881045e5d7309b74094c547164a1dab831701c7dfea6dac72f78ad39",
+ "gdnAlternativeSignature0": "8d2d4e5f2e7fb6ffe5a3d690ad5075c7a4194060994f0f063c517791e6bd4150"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_63",
+ "ruleIndex": 40,
+ "level": "note",
+ "message": {
+ "text": "Ensure that App service enables HTTP logging"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 205,
+ "endLine": 222,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/UnrestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"*\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4f45838aff932f565433ff3fd599bc9de4d7bd434bf4511cee319935dfb28950",
+ "gdnAlternativeSignature0": "d7afaaf97a739bde64c18fb27889fb4d931b2ba29561244209ab5f03659f4b71"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 205,
+ "endLine": 222,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/UnrestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"*\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b7d1e0a2597990637571695421255bca16f0c42cb2ec39b943ec7ec98dbf64e8",
+ "gdnAlternativeSignature0": "1d2b4a62840a1bb054f7389ba3c9215d640240d28ecac6c4dd75531648052b7c"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_88",
+ "ruleIndex": 41,
+ "level": "note",
+ "message": {
+ "text": "Ensure that app services use Azure Files"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 205,
+ "endLine": 222,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites/config\",\n \"name\": \"SitesConfig/UnrestrictedCORSAccess_web\",\n \"location\": \"[parameters('location')]\",\n \"dependsOn\": [\n \"ApiApp_NoSitesConfig\",\n \"WebApp_NoSitesConfig\",\n \"FunctionApp_NoSitesConfig\"\n ],\n \"properties\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"*\"\n ]\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "7ac28937c766ad8aca6f80f4c1b203c09f14c9b030a09850ddf94906052d3cff",
+ "gdnAlternativeSignature0": "86dfaece04781f7765ed78900613f50af845e94a4498b5bfe133a0567832350b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 223,
+ "endLine": 239,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b0458996e102d04b1269a39e6ad2f6d6fa741a778b7821a91a590d13708de75c",
+ "gdnAlternativeSignature0": "ba1b6ae6482744c512163ee84d83124346fdff55efcc553c93a117827b277dae"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 223,
+ "endLine": 239,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "8e375b5a9dc4728fd4ba4a21882993369de923f2eac2ed78cf8491552d8facaa",
+ "gdnAlternativeSignature0": "853de3499062ba5a2cb953cc5283596ec4b8e90b4b1b51d5d7ed7fd9ef487dd5"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 223,
+ "endLine": 239,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a127ae6cec02825e2f917c367e3db26bf8017f68b1998857a4ebb175353f6a51",
+ "gdnAlternativeSignature0": "e1bb268111081a04f49ac60c72a63ed0738145f62892adb59d43e0cdb4181ffc"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 223,
+ "endLine": 239,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d351baa7f806ab65257e43138c406148e9c81bb988521fe221f56f7e72e21818",
+ "gdnAlternativeSignature0": "5c32a35a8c57bffbbce0105bb252897bba594b8d564d6be228aa0d086db40eb6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 223,
+ "endLine": 239,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "34cf1285b6c9b01e2163c4235369bba2bd1740e57a71fa21d4945fee87438740",
+ "gdnAlternativeSignature0": "e681471f7211744f1008218a8212ef79deecebeb44aaf693cb5c6a2ff0c30fbc"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 223,
+ "endLine": 239,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e25dee6e2c2afa0f90032dee4f66872f8022716e6e1870e697e282669a0e6bea",
+ "gdnAlternativeSignature0": "44100aca6dd76613f2e92578a73695780785c3777bbba30651b6e632ad118318"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 223,
+ "endLine": 239,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "da1a3fa73f790c28a05f8d7c42c7961059009ddc9e050d309066a52dc28f2964",
+ "gdnAlternativeSignature0": "b97d0c99d154acece432cd4b25ed97cebdc3307aff68dff7034a8814c9407ae1"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 223,
+ "endLine": 239,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "c469692cea7b7ca010669e9d28957de550b80aca420639dab41c3b50acb673fd",
+ "gdnAlternativeSignature0": "0280a30c60f721964ef8f0e1f057cc3823c08e2c877a2f35ecc0bf0cba67aa73"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 240,
+ "endLine": 255,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_NoKind_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4fd9a062f86a13872b9dad7a38cfe0d953f929b117ea32a74b12949f94482d1e",
+ "gdnAlternativeSignature0": "4313f93aeba30524fe4b597801c38b1eff909f6cbc2cb6ac96c9fc11b4acd52a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 240,
+ "endLine": 255,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_NoKind_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6ee562e5d732261eee58f4880f619fded377b21bb88bcc90f9b5abad30ed6398",
+ "gdnAlternativeSignature0": "e931b536ca4eb49838ef185e4d0af6477b51badbaa93242a6c4ff1b2e1298bf8"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 240,
+ "endLine": 255,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_NoKind_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "143778d4f31ab73a5bb75054896253c16373f69b3e0441b850b0369d1bddf1c4",
+ "gdnAlternativeSignature0": "03129ed6590e6f4bf2f43e9281e29c697a95962f5878ba90589b6fe88fe04380"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 240,
+ "endLine": 255,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_NoKind_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "8e4a04fbf2e32b4f92897087315fb87884e9f2888146d04906779b927323f6c4",
+ "gdnAlternativeSignature0": "f321e049084aef0145e1b33f9c49fbfd5cdeb2ab03c824e93f910fbd3adbbd44"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 240,
+ "endLine": 255,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_NoKind_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "3c4d99dfa4a6499c4718cdbe5c7c7b5fb1667ca31c16bddbc1f0d50f201b0eec",
+ "gdnAlternativeSignature0": "fe55bb9000959302368aa07dd560c68c98caed221602cf2a2f997e85d4bdd6f6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 240,
+ "endLine": 255,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_NoKind_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "eb4bed8fbe96c4a4bda2d5714d30a37fe5af249e7983c2e529ed2555b2302577",
+ "gdnAlternativeSignature0": "e5ada8bedea49618df2290b727da8e0b3564bbc4cad4ad22aee82b8a6afd2581"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 240,
+ "endLine": 255,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_NoKind_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "c7c28aa1f6eb6c981b8dab94041a68bab23a9b72de245b2058c9280c612cac81",
+ "gdnAlternativeSignature0": "53b134cf1cec93348d12102916d6e3bd4072019df2f026de26b3ef6db3543505"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 240,
+ "endLine": 255,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"name\": \"WebApp_NoKind_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "23dc3709b4a9455bce85771532889a8fb832f85ad458d4f285fe9fb2eb7807ae",
+ "gdnAlternativeSignature0": "7fa5336cda8b5f2d8c41c95ffc7b95cd3ace43f023bd72dfbf479b585045984b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 256,
+ "endLine": 273,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4e8cc7e2a4b582670ab605572ebf449e0b91a874db1ab9ef2e8e1202651fb74b",
+ "gdnAlternativeSignature0": "7fca34e471d5ec9837849486a2e299f93b5ee49824bfbaf0059ddade380c33c5"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 256,
+ "endLine": 273,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "32f70b90c9398c6ab47faf4896ca724cc667414fbdd61f9d37ab64180039afa9",
+ "gdnAlternativeSignature0": "74ac563e5ceaa5a0e09e489b9fa579c8be0ec02947aed0617c6faddf0243f60c"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 256,
+ "endLine": 273,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "f565d488d0ee136a77ca481e53820893ff8ba50cacc9abe76f757c1a84865639",
+ "gdnAlternativeSignature0": "3fe95bf85179982d04d6323aeb899d481688025a708d5e171859bd82cc1cdd76"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 256,
+ "endLine": 273,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "88848a38797205708edddcc47234828b56efc3e522b2f791a287bd2e1362ca36",
+ "gdnAlternativeSignature0": "0c58696e023f4bb523561bf26c5c02916c2411086a669f73ace694130370fd8b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 256,
+ "endLine": 273,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "df545930bb8458e5f4d491540b41367072287dd41d4cc413670e820d053b3c59",
+ "gdnAlternativeSignature0": "b156e3e128bdada88119590b89491ba5637d828eb52a1fd7cb66709f886f4015"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 256,
+ "endLine": 273,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a4a0f2a5361ad3d1b9eae1eee98796fd4b9cb48e588e5ff7e991e03b1fd406f6",
+ "gdnAlternativeSignature0": "273d89c35b3928f35b2b753a0285d00ac263f3183a4a1488c2f7a79177415611"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 256,
+ "endLine": 273,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "9719571b68e5b3a885fa6fd8f779399b128f621f8c56f6fab08675f5bab6bad4",
+ "gdnAlternativeSignature0": "e0db6d935221b8f1a1c87a50acb333285eeab2b10c099cfc8c0e1842c3a55397"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 256,
+ "endLine": 273,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "c99607a3189b9bc5ab42ae5c2d7df75995a965340270a602883d37aeed0923d9",
+ "gdnAlternativeSignature0": "95c9c99f71bb81429ee8ccb9608f889801fd91e170be93bd519d0c4aa56ab001"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 274,
+ "endLine": 283,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ab35f47a9966e5318d1be863b2ec0f17d58d977c71e868ebff0db5b49b68af09",
+ "gdnAlternativeSignature0": "9c833adad252c499f44a089a84712b55a0a006a47a9aba6c530d01a1bc94f558"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 274,
+ "endLine": 283,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "602fdea611aaa3d22235f4e83203311f5ffe8e9e22833d6184d440e68f024bf5",
+ "gdnAlternativeSignature0": "5c17ba6738b8da7c912c45aebf73499fbce4dc65cf6407b66f5a4c274679619c"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 274,
+ "endLine": 283,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "20d3cf16494d80ca62033400936f0feb57be0a8ab23b9cc9b162b2247897388e",
+ "gdnAlternativeSignature0": "cd1e03ef8f9614165ea4d7a0973270f4bbab817cb3cc52ad0cf36cb647c3b6d9"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 274,
+ "endLine": 283,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "78cc949070f476ebc74b2dda7f5c41ae43b805ea3b7daf49d3078c058f79e5a1",
+ "gdnAlternativeSignature0": "a55b806fb31cb3bf0e6b5c3d01f6ffd490c3b886bb80a722866cc000586f0f8a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 274,
+ "endLine": 283,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "15dc91ac7c730ca245aabad00f156494d8a29ee9b357748967d76f05344eda7f",
+ "gdnAlternativeSignature0": "5847938307c50605c0610b36925ab50eefcc6634ed7e565f480bda53984af466"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 274,
+ "endLine": 283,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ea83d615bfff6cce7ff0679906857f978db31bcc20aaf8362758e87312e2d941",
+ "gdnAlternativeSignature0": "c039abcf9cf88918b4dd9167119722b1a5108ce5e38d75043c0b750fd2981ec3"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 274,
+ "endLine": 283,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b051219a1626ff89706e92b04e25fb0932c1d985ea27f8aecbf7f743c04dc659",
+ "gdnAlternativeSignature0": "cabf626aade2ee1d730330c88d2aa7d8895dd4c93938eeb77c63f03a052c7679"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 274,
+ "endLine": 283,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"app\",\n \"name\": \"WebApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "6b115656ed41348ad449cf25c954970b70b571ade5d19e1105620b4e7717e2fe",
+ "gdnAlternativeSignature0": "aa6295e81aa6a4ae09a54ac0c497bf6291b50dd88a72b6e830bd210a1a68aceb"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 284,
+ "endLine": 300,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "14fcb885307e08a2c5ada1206158c9a84bbe32823e0d5c615704e0bafa8aee79",
+ "gdnAlternativeSignature0": "fb7374d63bc8d8ab31652d206739a312b4868d345ca64543f8d31991d5b46cfa"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 284,
+ "endLine": 300,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "5ed1b342d8a0f06c5b0bb3d15388f5670cf2b409bf65da4b74e438912627892a",
+ "gdnAlternativeSignature0": "9f5a5eef4cfdb3f4462b7862dcba4b5bef7ef10e97449da469e0495432b1aa9c"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 284,
+ "endLine": 300,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "f769bd7202fd3a2674861afca95fa1cfc0664bd0b76619913a2f39f87fd2fe8a",
+ "gdnAlternativeSignature0": "5992da2c97b93015cd5ff7d85e7dca064eea8c61012c16fd094729db911f95a8"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 284,
+ "endLine": 300,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "5bcdda995b38f39e6e644a8b926bad1dda898d677c7095948d0787f601427d9b",
+ "gdnAlternativeSignature0": "13ea3d62cdfd23a6f501449536936b1c6db8485e0dff7c99196f039ded5323e3"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 284,
+ "endLine": 300,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "01e261f9a2c80b85eac147e32d3398613aacdcc9aba1ad95bed4948b25697177",
+ "gdnAlternativeSignature0": "06726daca90067656a51c927384b29c2fa63923f996cd8820a67beaac37a348a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 284,
+ "endLine": 300,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "72e5f5c502813f23c86f6954f698b653e4357d2982e8bb56333ee89c838fcfad",
+ "gdnAlternativeSignature0": "faae5ac2227e01f41f73eda05f5b00d5de49e9d7c812dc34cbea14b50d6e9f77"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 284,
+ "endLine": 300,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "64bf46cc4a2b1a39786b447ec202c2052f0686c787af51cc562ff3cb2baeadac",
+ "gdnAlternativeSignature0": "370f91c60e0d1be39570b5bc47e69e0826dd5835293145c9f61e8fcecac252b6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 284,
+ "endLine": 300,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_RestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4040613d3dfb88a05ae97881bd42b488d51f9ab73eb119fc0554a783ca548f34",
+ "gdnAlternativeSignature0": "aa1ce087240db3e7202e98fb6d5d42a12644148791a444e2923686fe70b74fc5"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 301,
+ "endLine": 318,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "7aa4dc87ad0a059efeb183e063efb6d08c9643371ef92a08431c2d59dbe6d7d8",
+ "gdnAlternativeSignature0": "efa930281f9711759aae2cbd30e4f5f6dfa8935213ef9d897b14266716dc3a50"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 301,
+ "endLine": 318,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e921d31bfff9b531e071fb26ffdf65b6ad8bbe22352067af06b35cb28e82fb8c",
+ "gdnAlternativeSignature0": "17ce881dab034d29e0a5df168f9e1c52bdd2c5c975e4fdda06fa613e032d79bf"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 301,
+ "endLine": 318,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a1c9a388790b96bca8c54d7e1af1d480c30c7478de1cdf397833aefa8611697a",
+ "gdnAlternativeSignature0": "6550ec87cae9d511c54e0c344a4cdd2c0de2f8cd89c915cdadf98545ba96361f"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 301,
+ "endLine": 318,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "5f201d5437de55fd80955e36fa892fc93cfb30c65f554f53a86a4df19d91f7a6",
+ "gdnAlternativeSignature0": "24eb4b238d28c37f127ee733bc68e96c101b7c274ec58a964bb4ef8f105a07ad"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 301,
+ "endLine": 318,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "eb2f9b348b74a7a30a2ccf85154a95c66cbbd999d7f0db1a5515dc50033cd858",
+ "gdnAlternativeSignature0": "ee26900668b5c483ff485bc262a9dda64ddedd4b96a4e5f956797fc4e31c4d1e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 301,
+ "endLine": 318,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "752975926aaa31a34fc4bb75edb0955f8b1b2b7cdd24081443961bd594ef684e",
+ "gdnAlternativeSignature0": "55cf1c6618e5e7a3be0f2feae175940eb5ec736d17afe66f0895df6997ab216e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 301,
+ "endLine": 318,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "26f0a1a83d914e1d5687c693993f2e09d71b52f756d23a5682778f4a2085ff5e",
+ "gdnAlternativeSignature0": "5a8642e916010fccd880c8c0e73e83f149b9d44c76710d50d541dbd4d3c7d72a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 301,
+ "endLine": 318,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_UnrestrictedCORSAccess_EmbeddedSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true,\n \"siteConfig\": {\n \"cors\": {\n \"allowedOrigins\": [\n \"someIP\",\n \"*\"\n ]\n }\n }\n }\n },\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "5add9273a9903c496a94184e7c5ae16aa8c53067ea2f4eecb7f6cc9876a3145b",
+ "gdnAlternativeSignature0": "a1cb801109625b1081f5c08bf8d85057df4fa338901c035a3c779845e8d973ca"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_17",
+ "ruleIndex": 25,
+ "message": {
+ "text": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 319,
+ "endLine": 328,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n }\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "3f3a80ee3024489c35085570b02f970bafaaf551396274635a00a4b79ac0eae2",
+ "gdnAlternativeSignature0": "917035e9a96adddabea41ba383c24edf46e1ec39e5e02fc8be4ddbeb01bc5b4e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_78",
+ "ruleIndex": 26,
+ "message": {
+ "text": "Ensure FTP deployments are disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 319,
+ "endLine": 328,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n }\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "8493bbcbf96e7e1068c6296f576527e894ef7245800bcd2116bc07e72079b43d",
+ "gdnAlternativeSignature0": "755512e4b82449a08f44e7eaebdb946e29314098160f8e1f39b9870f19dc43f7"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_18",
+ "ruleIndex": 27,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest if used to run the web app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 319,
+ "endLine": 328,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n }\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d15577475858e078e31e0a5a4560d3e46f04f5c0af458457d9c46525545d0add",
+ "gdnAlternativeSignature0": "34f10bce44f8b65d8306df6efd6b8a73666704ebe97281cf5bb20c27415a99c5"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_16",
+ "ruleIndex": 29,
+ "message": {
+ "text": "Ensure that Register with Azure Active Directory is enabled on App Service"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 319,
+ "endLine": 328,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n }\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "21939dfe4c3d1e60adaaab7f75ef7a0b94b4377b2a2950f7670c9afd424de80f",
+ "gdnAlternativeSignature0": "0054487d755a01b77de504fc5157faecd817a0ecae44d1e4aa91fd1a46e0be8b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_71",
+ "ruleIndex": 30,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Managed identity provider is enabled for web apps"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 319,
+ "endLine": 328,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n }\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "47829e0ae136b8b26a4176f73de53c99044bba251a284cf106812e2600802361",
+ "gdnAlternativeSignature0": "0a441e95438cb23ebbfb5ba5d34958a96417b8b4a440e329223843a090eab255"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_15",
+ "ruleIndex": 31,
+ "message": {
+ "text": "Ensure web app is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 319,
+ "endLine": 328,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n }\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0563668dc60ab562ba7553e4059ccb2600d2aee6505b99813a4d2edad7d7cab8",
+ "gdnAlternativeSignature0": "71db655b881a2f569a03dc4a80cf4f01371a09611c4f9780e1ac3eba24b4e2f8"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_222",
+ "ruleIndex": 32,
+ "message": {
+ "text": "Ensure that Azure Web App public network access is disabled"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 319,
+ "endLine": 328,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n }\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "4f0638c743b2d1843ef77d55d462748d273aee152bbb618ceaa5a51f793330fc",
+ "gdnAlternativeSignature0": "e4025758f0b783be95138fa9820d245cb4c1db229e4353bd0a20f699ee9e616a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_67",
+ "ruleIndex": 34,
+ "message": {
+ "text": "Ensure that 'HTTP Version' is the latest, if used to run the Function app"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/insecure_arm.json"
+ },
+ "region": {
+ "startLine": 319,
+ "endLine": 328,
+ "snippet": {
+ "text": " {\n \"apiVersion\": \"2019-08-01\",\n \"type\": \"Microsoft.Web/sites\",\n \"kind\": \"functionapp\",\n \"name\": \"FunctionApp_NoSitesConfig\",\n \"location\": \"[parameters('location')]\",\n \"properties\": {\n \"httpsOnly\": true\n }\n }\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "ca846feb1e4469b819a99002b3cec670caeab114d5f1c85c81ed5830745e8c77",
+ "gdnAlternativeSignature0": "962bde0a801111d2d1cefcb5d5bb60e8c031e3c31f4e4527dc4ab9fb05b23991"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_25",
+ "ruleIndex": 10,
+ "level": "note",
+ "message": {
+ "text": "Minimize the admission of containers with added capability"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a73a10ebaed1bcca5045392cd0e24ff11412eeae435f8a66bd90d64a40f09958",
+ "gdnAlternativeSignature0": "681910e9bced9366623d2dd9e93781a0f1a15f148fa6523a13e9a0058492d662"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_20",
+ "ruleIndex": 11,
+ "message": {
+ "text": "Containers should not run with allowPrivilegeEscalation"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "692c38842f145cb9c1ee25b48643b65a41b423830a016a149dc12712814602af",
+ "gdnAlternativeSignature0": "970e4c551a08367b382ed411f7ccca59e201e8e34e32717929767a568630af1e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_21",
+ "ruleIndex": 12,
+ "level": "note",
+ "message": {
+ "text": "The default namespace should not be used"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "0378eb8b121cbc93bfe8a78bc75aeb8987f5e31d530ec0adf577e7cf03ee717d",
+ "gdnAlternativeSignature0": "fffebb6a7b3891cdd01cc402002cc3f81150a080fef1ea60dfe1e2f6f69eb601"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_28",
+ "ruleIndex": 13,
+ "level": "note",
+ "message": {
+ "text": "Minimize the admission of containers with the NET_RAW capability"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "70f66e4afeb0264ac95ebee5085b90a23e7a9a54107832fb271bd1f1aa298522",
+ "gdnAlternativeSignature0": "0f11dc2ccb44a7216c78769edb10df097f8a1fc681f56dfdfa93d7c2b802f9b7"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_43",
+ "ruleIndex": 14,
+ "level": "note",
+ "message": {
+ "text": "Image should use digest"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d54de20ef46f5565573d6411cce2a3baaf5b309cdc9e73bd2e0948dd98363d46",
+ "gdnAlternativeSignature0": "4e3e18739d7eee6105acea4f65c463484b66649a68e864755fc68c7030743359"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_8",
+ "ruleIndex": 15,
+ "level": "note",
+ "message": {
+ "text": "Liveness Probe Should be Configured"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2e737794eca54186f3ad53c5fe3a9a7e34d4e9617064e5f844c785e4082877e3",
+ "gdnAlternativeSignature0": "1efa25c9281d5272c63c1bd7aa7a55673eeb2696c3df5d258c0291cb3d22eff6"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_37",
+ "ruleIndex": 16,
+ "level": "note",
+ "message": {
+ "text": "Minimize the admission of containers with capabilities assigned"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "09e2a7056dc2cd2bb024c4a44a0111d6f1e72d32b6b4a76c8f02e14817384044",
+ "gdnAlternativeSignature0": "d3bc404f8a377bc479f16b07ba7be8098c6d7a10735ee0bc15be7f48c5f089f4"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_29",
+ "ruleIndex": 17,
+ "level": "note",
+ "message": {
+ "text": "Apply security context to your pods and containers"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2fb25b212960e5a8760b6523d4a4c2b47c5a0482186059c1d23c41446faf72b7",
+ "gdnAlternativeSignature0": "85a6f0ad55f847141b45ccf6ef907b5a180d07d0d29cac32bcc1829e8eb8b2ea"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_22",
+ "ruleIndex": 18,
+ "level": "note",
+ "message": {
+ "text": "Use read-only filesystem for containers where possible"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "da115818e9e2ffadf20a6b9d1cb1c02e963eb192dae03af8c39e6fce8bcc097e",
+ "gdnAlternativeSignature0": "d8c06cf85b8fbddd0ad8ba2f86285da2ad52245291c6cab6fd69f3fce31127d7"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_23",
+ "ruleIndex": 19,
+ "message": {
+ "text": "Minimize the admission of root containers"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "c1be36e7556627562c7357f53bacdfea88d2fd6839ffad11f41bff594ddd0f83",
+ "gdnAlternativeSignature0": "e149f6402cc34c6663973655fb12e532f6c670a7e0374081fae82fd6575dab65"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_40",
+ "ruleIndex": 20,
+ "level": "note",
+ "message": {
+ "text": "Containers should run as a high UID to avoid host conflict"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "25c05ca1359bd4c2edaee66ac2d7fdc6c213eebfa5d139a0555ed06ea2c573c7",
+ "gdnAlternativeSignature0": "a73c63b0f812757918d4198fe20e0100bcf3d60c9a9a37f67cd321a74a14f72b"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_31",
+ "ruleIndex": 21,
+ "level": "note",
+ "message": {
+ "text": "Ensure that the seccomp profile is set to docker/default or runtime/default"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "70378cd13d8568d09ced49362abbf35160b842273ca5ec57bf69c71c378a6321",
+ "gdnAlternativeSignature0": "3bfe46e3cda430aa1ce3f452e781cdc43697d087821cc36fd104604f940ae43a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_K8S_38",
+ "ruleIndex": 22,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Service Account Tokens are only mounted where necessary"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "97d3e19a31f43aac84ccd148a5c258209c1727f5900e0b2b1435e8ab08b647b3",
+ "gdnAlternativeSignature0": "218768ca543d9e02181e0769e8f9a3c7e5e2318fb0742bed2736ea116b7b8f4e"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV2_K8S_6",
+ "ruleIndex": 23,
+ "message": {
+ "text": "Minimize the admission of pods which lack an associated NetworkPolicy"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/K8s-cassandra-statefulset.yaml"
+ },
+ "region": {
+ "startLine": 1,
+ "endLine": 96,
+ "snippet": {
+ "text": "apiVersion: \"apps/v1\" # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1\nkind: StatefulSet\nmetadata:\n name: cassandra\n labels:\n app: cassandra\nspec:\n serviceName: cassandra\n replicas: 3\n selector:\n matchLabels:\n app: cassandra\n template:\n metadata:\n labels:\n app: cassandra\n spec:\n terminationGracePeriodSeconds: 1800\n containers:\n - name: cassandra\n image: gcr.io/google-samples/cassandra:v14\n imagePullPolicy: Always\n ports:\n - containerPort: 7000\n name: intra-node\n - containerPort: 7001\n name: tls-intra-node\n - containerPort: 7199\n name: jmx\n - containerPort: 9042\n name: cql\n resources:\n limits:\n cpu: \"500m\"\n memory: 1Gi\n requests:\n cpu: \"500m\"\n memory: 1Gi\n securityContext:\n capabilities:\n add:\n - IPC_LOCK\n lifecycle:\n preStop:\n exec:\n command:\n - /bin/sh\n - -c\n - nodetool drain\n env:\n - name: MAX_HEAP_SIZE\n value: 512M\n - name: HEAP_NEWSIZE\n value: 100M\n - name: CASSANDRA_SEEDS\n value: \"cassandra-0.cassandra.default.svc.cluster.local\"\n - name: CASSANDRA_CLUSTER_NAME\n value: \"K8Demo\"\n - name: CASSANDRA_DC\n value: \"DC1-K8Demo\"\n - name: CASSANDRA_RACK\n value: \"Rack1-K8Demo\"\n - name: CASSANDRA_SEED_PROVIDER\n value: io.k8s.cassandra.KubernetesSeedProvider\n - name: POD_IP\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n readinessProbe:\n exec:\n command:\n - /bin/bash\n - -c\n - /ready-probe.sh\n initialDelaySeconds: 15\n timeoutSeconds: 5\n # These volume mounts are persistent. They are like inline claims,\n # but not exactly because the names need to match exactly one of\n # the stateful pod volumes.\n volumeMounts:\n - name: cassandra-data\n mountPath: /var/lib/cassandra\n # These are converted to volume claims by the controller\n # and mounted at the paths mentioned above.\n # do not use these in production until ssd GCEPersistentDisk or other ssd pd\n volumeClaimTemplates:\n - metadata:\n name: cassandra-data\n annotations:\n volume.beta.kubernetes.io/storage-class: fast\n spec:\n accessModes: [ \"ReadWriteOnce\" ]\n resources:\n requests:\n storage: 1Gi\n---\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "2c09fe5d58637920ffb2f45d2e9e47b6d24f94f9a5a6318e86d5b119d90dc136",
+ "gdnAlternativeSignature0": "52664a33e0000747d7d55032ea8ff784c99f191108fd7b0a4405b4b4b1787c90"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_59",
+ "ruleIndex": 0,
+ "level": "note",
+ "message": {
+ "text": "Ensure that Storage accounts disallow public access"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "d7f32900926833945cac2ead4c1ed6c351aabf9fee418b413e3bfe46c8fc54f3",
+ "gdnAlternativeSignature0": "a3fc19e10564a2494f31f34241b921013aeb4aef2a9ef7ef9731f2fe7fd95ce9"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_33",
+ "ruleIndex": 1,
+ "message": {
+ "text": "Ensure Storage logging is enabled for Queue service for read, write and delete requests"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "641b61a3a4b3c0d759acd57a321d6db4044b47347cd764c152f071e8341faea0",
+ "gdnAlternativeSignature0": "83a8dfca2a610d8e67e683b30391980c336f3c1722ce80fb2afacb2a01b0a799"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_44",
+ "ruleIndex": 2,
+ "message": {
+ "text": "Ensure Storage Account is using the latest version of TLS encryption"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "9805631179c91f5535eda5e1f2a9d29d2295ca1bec013d3174a1285a9be83d60",
+ "gdnAlternativeSignature0": "05b8f7f1708c13235397e5a11b0fd243e02f41d8c5085efc269c1d4e73d2b39a"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV_AZURE_190",
+ "ruleIndex": 3,
+ "level": "error",
+ "message": {
+ "text": "Ensure that Storage blobs restrict public access"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "a34ff2ab3988f90969a68250eef2b1c1e687c5b58396f198c2615a955b8db206",
+ "gdnAlternativeSignature0": "9c23a512d4110d27fefdb36bb130958e046b17463df5a7ef245d584c9f943363"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV2_AZURE_40",
+ "ruleIndex": 4,
+ "message": {
+ "text": "Ensure storage account is not configured with Shared Key authorization"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "e9deaf9a38127ba6222b800492a1b840017f9907c25f9fba842d8c85ae861f33",
+ "gdnAlternativeSignature0": "bf8101fb23c886bf671ac5c24d8b62f3028e2d9b5e8fc2e106d6789aa8070b76"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV2_AZURE_47",
+ "ruleIndex": 5,
+ "message": {
+ "text": "Ensure storage account is configured without blob anonymous access"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "1d3bb7599e6f934ddc2badeee51d506051093f4e718c3199d4efd83c6e74ec12",
+ "gdnAlternativeSignature0": "edfaa2046c397a63e4856e499fc9a7166c96e5bb51978d37f2426cefa1af8457"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV2_AZURE_33",
+ "ruleIndex": 6,
+ "message": {
+ "text": "Ensure storage account is configured with private endpoint"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "43638c4e55b51ed9f346ab462c059ca30a19b570565c7de7ea7b5daee1d6d9ef",
+ "gdnAlternativeSignature0": "4b4ba219a803a0d61f213eab7cfdf2792eda5bd536ccf4992d1b5d9342e26ac3"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV2_AZURE_41",
+ "ruleIndex": 7,
+ "message": {
+ "text": "Ensure storage account is configured with SAS expiration policy"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "761254b9af4e347b1a2a05bc08bd77da3c0a640e44671e27f0fa7cbbc88d2b93",
+ "gdnAlternativeSignature0": "3358ef85a8762cda2cea0b4f31eebe014dc97571753cefc4394067b9f23cf0f2"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV2_AZURE_38",
+ "ruleIndex": 8,
+ "message": {
+ "text": "Ensure soft-delete is enabled on Azure storage account"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "8fdd2b7bd19cdd5ce21a89b95330d3a80ecd9efbe30f89c35f0b146a42a65d0f",
+ "gdnAlternativeSignature0": "e05ba2b227cc43fd36ea7fe66359bf553cdf88de6ff3aa184fc24ed97fa3c3c4"
+ },
+ "attachments": []
+ },
+ {
+ "ruleId": "CKV2_AZURE_1",
+ "ruleIndex": 9,
+ "level": "error",
+ "message": {
+ "text": "Ensure storage for critical data are encrypted with Customer Managed Key"
+ },
+ "locations": [
+ {
+ "physicalLocation": {
+ "artifactLocation": {
+ "uri": "samples/IaCMapping/main.tf"
+ },
+ "region": {
+ "startLine": 19,
+ "endLine": 29,
+ "snippet": {
+ "text": "resource \"azurerm_storage_account\" \"terraformaccount1\" {\n name = \"iacmapping1212\"\n resource_group_name = azurerm_resource_group.resourcegroup.name\n location = \"Central US\"\n account_tier = \"Standard\"\n account_replication_type = \"GRS\"\n\n tags = {\n \"mapping_tag\" = \"6189b638-15a5-42ec-b934-0d2b8e035ce1\"\n }\n}\n"
+ }
+ }
+ }
+ }
+ ],
+ "fingerprints": {
+ "gdnPrimarySignature": "b6600702be50525edb979f621ecf387776351f02b51dc4d37b822d660e575787",
+ "gdnAlternativeSignature0": "d1feda229fb89c3ecbaaaf3edec8f23599c5bccd3a725020863ea9b593ae4375"
+ },
+ "attachments": []
+ }
+ ],
+ "columnKind": "utf16CodeUnits",
+ "policies": [
+ {
+ "name": "Microsoft",
+ "version": "2.0.3"
+ }
+ ],
+ "properties": {
+ "toolInfoId": "checkov>>6>>202411062057"
+ }
+ }
+ ],
+ "properties": {
+ "producer": "MicrosoftSecurityDevOps",
+ "pipelineRunUrl": "Unknown",
+ "sourcePipelineId": "Unknown"
+ }
+}
\ No newline at end of file
diff --git a/src/action.ts b/src/action.ts
deleted file mode 100644
index 254162d5..00000000
--- a/src/action.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import * as core from '@actions/core';
-import { MsdoClient } from 'microsoft-security-devops-actions-toolkit';
-import * as path from 'path';
-
-async function run() {
- let client = new MsdoClient();
-
- let args: string[] = ['run'];
-
- let config: string = core.getInput('config');
- if (!client.isNullOrWhiteSpace(config)) {
- args.push('-c');
- args.push(config);
- }
-
- let policy: string = core.getInput('policy');
- if (client.isNullOrWhiteSpace(policy)) {
- policy = "GitHub";
- }
-
- args.push('-p');
- args.push(policy);
-
- let categoriesString: string = core.getInput('categories');
- if (!client.isNullOrWhiteSpace(categoriesString)) {
- args.push('--categories');
- let categories = categoriesString.split(',');
- for (let i = 0; i < categories.length; i++) {
- let category = categories[i];
- if (!client.isNullOrWhiteSpace(category)) {
- args.push(category.trim());
- }
- }
- }
-
- let languagesString: string = core.getInput('languages');
- if (!client.isNullOrWhiteSpace(languagesString)) {
- let languages = languagesString.split(',');
- args.push('--languages');
- for (let i = 0; i < languages.length; i++) {
- let language = languages[i];
- if (!client.isNullOrWhiteSpace(language)) {
- args.push(language.trim());
- }
- }
- }
-
- let toolsString: string = core.getInput('tools');
- if (!client.isNullOrWhiteSpace(toolsString)) {
- let tools = toolsString.split(',');
- args.push('--tool');
- for (let i = 0; i < tools.length; i++) {
- let tool = tools[i];
- if (!client.isNullOrWhiteSpace(tool)) {
- args.push(tool.trim());
- }
- }
- }
-
- args.push('--github');
-
- await client.run(args, 'microsoft/security-devops-action');
-}
-
-run().catch((error) => core.setFailed(error));
\ No newline at end of file
diff --git a/src/container-mapping.ts b/src/container-mapping.ts
new file mode 100644
index 00000000..67dc1f82
--- /dev/null
+++ b/src/container-mapping.ts
@@ -0,0 +1,292 @@
+import { IMicrosoftSecurityDevOps } from "./msdo-interface";
+import * as https from "https";
+import * as core from '@actions/core';
+import * as exec from '@actions/exec';
+import * as os from 'os';
+
+const sendReportRetryCount: number = 1;
+const GetScanContextURL: string = "https://dfdinfra-afdendpoint-prod-d5fqbucbg7fue0cf.z01.azurefd.net/github/v1/auth-push/GetScanContext?context=authOnly";
+const ContainerMappingURL: string = "https://dfdinfra-afdendpoint-prod-d5fqbucbg7fue0cf.z01.azurefd.net/github/v1/container-mappings";
+
+/**
+ * Represents the tasks for container mapping that are used to fetch Docker images pushed in a job run.
+ */
+export class ContainerMapping implements IMicrosoftSecurityDevOps {
+ readonly succeedOnError: boolean;
+
+ constructor() {
+ this.succeedOnError = true;
+ }
+
+ /**
+ * Container mapping pre-job commands wrapped in exception handling.
+ */
+ public runPreJob() {
+ try {
+ core.info("::group::Microsoft Defender for DevOps container mapping pre-job - https://go.microsoft.com/fwlink/?linkid=2231419");
+ this._runPreJob();
+ }
+ catch (error) {
+ // Log the error
+ core.info("Error in Container Mapping pre-job: " + error);
+ }
+ finally {
+ // End the collapsible section
+ core.info("::endgroup::");
+ }
+ }
+
+
+ /*
+ * Set the start time of the job run.
+ */
+ private _runPreJob() {
+ const startTime = new Date().toISOString();
+ core.saveState('PreJobStartTime', startTime);
+ core.info(`PreJobStartTime: ${startTime}`);
+ }
+
+ /**
+ * Placeholder / interface satisfier for main operations
+ */
+ public async runMain() {
+ // No commands
+ }
+
+ /**
+ * Container mapping post-job commands wrapped in exception handling.
+ */
+ public async runPostJob() {
+ try {
+ core.info("::group::Microsoft Defender for DevOps container mapping post-job - https://go.microsoft.com/fwlink/?linkid=2231419");
+ await this._runPostJob();
+ } catch (error) {
+ // Log the error
+ core.info("Error in Container Mapping post-job: " + error);
+ } finally {
+ // End the collapsible section
+ core.info("::endgroup::");
+ }
+ }
+
+ /*
+ * Using the start time, fetch the docker events and docker images in this job run and log the encoded output
+ * Send the report to Defender for DevOps
+ */
+ private async _runPostJob() {
+ let startTime = core.getState('PreJobStartTime');
+ if (startTime.length <= 0) {
+ startTime = new Date(new Date().getTime() - 10000).toISOString();
+ core.debug(`PreJobStartTime not defined, using now-10secs`);
+ }
+ core.info(`PreJobStartTime: ${startTime}`);
+
+ let reportData = {
+ dockerVersion: "",
+ dockerEvents: [],
+ dockerImages: []
+ };
+
+ let bearerToken: string | void = await core.getIDToken()
+ .then((token) => { return token; })
+ .catch((error) => {
+ throw new Error("Unable to get token: " + error);
+ });
+
+ if (!bearerToken) {
+ throw new Error("Empty OIDC token received");
+ }
+
+ // Don't run the container mapping workload if this caller isn't an active customer.
+ var callerIsOnboarded: boolean = await this.checkCallerIsCustomer(bearerToken, sendReportRetryCount);
+ if (!callerIsOnboarded) {
+ core.info("Client is not onboarded to Defender for DevOps. Skipping container mapping workload.")
+ return;
+ }
+ core.info("Client is onboarded for container mapping.");
+
+ // Initialize the commands
+ let dockerVersionOutput = await exec.getExecOutput('docker --version');
+ if (dockerVersionOutput.exitCode != 0) {
+ core.info(`Unable to get docker version: ${dockerVersionOutput}`);
+ core.info(`Skipping container mapping since docker not found/available.`);
+ return;
+ }
+ reportData.dockerVersion = dockerVersionOutput.stdout.trim();
+
+ await this.execCommand(`docker events --since ${startTime} --until ${new Date().toISOString()} --filter event=push --filter type=image --format ID={{.ID}}`, reportData.dockerEvents)
+ .catch((error) => {
+ throw new Error("Unable to get docker events: " + error);
+ });
+
+ await this.execCommand(`docker images --format CreatedAt={{.CreatedAt}}::Repo={{.Repository}}::Tag={{.Tag}}::Digest={{.Digest}}`, reportData.dockerImages)
+ .catch((error) => {
+ throw new Error("Unable to get docker images: " + error);
+ });
+
+ core.debug("Finished data collection, starting API calls.");
+
+ var reportSent: boolean = await this.sendReport(JSON.stringify(reportData), bearerToken, sendReportRetryCount);
+ if (!reportSent) {
+ throw new Error("Unable to send report to backend service");
+ };
+ core.info("Container mapping data sent successfully.");
+ }
+
+ /**
+ * Execute command and setup the listener to capture the output
+ * @param command Command to execute
+ * @param listener Listener to capture the output
+ * @returns a Promise
+ */
+ private async execCommand(command: string, listener: string[]): Promise {
+ return exec.getExecOutput(command)
+ .then((result) => {
+ if(result.exitCode != 0) {
+ return Promise.reject(`Command execution failed: ${result}`);
+ }
+ result.stdout.trim().split(os.EOL).forEach(element => {
+ if(element.length > 0) {
+ listener.push(element);
+ }
+ });
+ });
+ }
+
+ /**
+ * Sends a report to Defender for DevOps and retries on the specified count
+ * @param data the data to send
+ * @param retryCount the number of time to retry
+ * @param bearerToken the GitHub-generated OIDC token
+ * @returns a boolean Promise to indicate if the report was sent successfully or not
+ */
+ private async sendReport(data: string, bearerToken: string, retryCount: number = 0): Promise {
+ core.debug(`attempting to send report: ${data}`);
+ return await this._sendReport(data, bearerToken)
+ .then(() => {
+ return true;
+ })
+ .catch(async (error) => {
+ if (retryCount == 0) {
+ return false;
+ } else {
+ core.info(`Retrying API call due to error: ${error}.\nRetry count: ${retryCount}`);
+ retryCount--;
+ return await this.sendReport(data, bearerToken, retryCount);
+ }
+ });
+ }
+
+ /**
+ * Sends a report to Defender for DevOps
+ * @param data the data to send
+ * @returns a Promise
+ */
+ private async _sendReport(data: string, bearerToken: string): Promise {
+ return new Promise(async (resolve, reject) => {
+ let apiTime = new Date().getMilliseconds();
+ let options = {
+ method: 'POST',
+ timeout: 2500,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer ' + bearerToken,
+ 'Content-Length': data.length
+ }
+ };
+ core.debug(`${options['method'].toUpperCase()} ${ContainerMappingURL}`);
+
+ const req = https.request(ContainerMappingURL, options, (res) => {
+ let resData = '';
+ res.on('data', (chunk) => {
+ resData += chunk.toString();
+ });
+
+ res.on('end', () => {
+ core.debug('API calls finished. Time taken: ' + (new Date().getMilliseconds() - apiTime) + "ms");
+ core.debug(`Status code: ${res.statusCode} ${res.statusMessage}`);
+ core.debug('Response headers: ' + JSON.stringify(res.headers));
+ if (resData.length > 0) {
+ core.debug('Response: ' + resData);
+ }
+ if (res.statusCode < 200 || res.statusCode >= 300) {
+ return reject(`Received Failed Status code when calling url: ${res.statusCode} ${resData}`);
+ }
+ resolve();
+ });
+ });
+
+ req.on('error', (error) => {
+ reject(new Error(`Error calling url: ${error}`));
+ });
+
+ req.write(data);
+ req.end();
+ });
+ }
+
+ /**
+ * Queries Defender for DevOps to determine if the caller is onboarded for container mapping.
+ * @param retryCount the number of time to retry
+ * @param bearerToken the GitHub-generated OIDC token
+ * @returns a boolean Promise to indicate if the report was sent successfully or not
+ */
+ private async checkCallerIsCustomer(bearerToken: string, retryCount: number = 0): Promise {
+ return await this._checkCallerIsCustomer(bearerToken)
+ .then(async (statusCode) => {
+ if (statusCode == 200) { // Status 'OK' means the caller is an onboarded customer.
+ return true;
+ } else if (statusCode == 403) { // Status 'Forbidden' means caller is not a customer.
+ return false;
+ } else {
+ core.debug(`Unexpected status code: ${statusCode}`);
+ return await this.retryCall(bearerToken, retryCount);
+ }
+ })
+ .catch(async (error) => {
+ core.info(`Unexpected error: ${error}.`);
+ return await this.retryCall(bearerToken, retryCount);
+ });
+ }
+
+ private async retryCall(bearerToken: string, retryCount: number): Promise {
+ if (retryCount == 0) {
+ core.info(`All retries failed.`);
+ return false;
+ } else {
+ core.info(`Retrying checkCallerIsCustomer.\nRetry count: ${retryCount}`);
+ retryCount--;
+ return await this.checkCallerIsCustomer(bearerToken, retryCount);
+ }
+ }
+
+ private async _checkCallerIsCustomer(bearerToken: string): Promise {
+ return new Promise(async (resolve, reject) => {
+ let options = {
+ method: 'GET',
+ timeout: 2500,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer ' + bearerToken,
+ }
+ };
+ core.debug(`${options['method'].toUpperCase()} ${GetScanContextURL}`);
+
+ const req = https.request(GetScanContextURL, options, (res) => {
+
+ res.on('end', () => {
+ resolve(res.statusCode);
+ });
+ res.on('data', function(d) {
+ });
+ });
+
+ req.on('error', (error) => {
+ reject(new Error(`Error calling url: ${error}`));
+ });
+
+ req.end();
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 00000000..1f45f9d1
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,34 @@
+import * as core from '@actions/core';
+import { MicrosoftSecurityDevOps } from './msdo';
+import { getExecutor } from './msdo-interface';
+import * as common from '@microsoft/security-devops-actions-toolkit/msdo-common';
+import { Tools } from './msdo-helpers';
+
+async function runMain() {
+ if (shouldRunMain())
+ {
+ await getExecutor(MicrosoftSecurityDevOps).runMain();
+ }
+ else {
+ console.log("Scanning is not enabled. Skipping...");
+ }
+}
+
+runMain().catch(error => {
+ core.setFailed(error);
+});
+
+/**
+ * Returns false if the 'tools' input is specified and the only tool on the list is 'container-mapping'.
+ * This is because the MicrosoftSecurityDevOps executer does not have a workload for the container-mapping tool.
+*/
+function shouldRunMain() {
+ let toolsString: string = core.getInput('tools');
+ if (!common.isNullOrWhiteSpace(toolsString)) {
+ let tools = toolsString.split(',');
+ if (tools.length == 1 && tools[0].trim() == Tools.ContainerMapping) {
+ return false;
+ }
+ }
+ return true;
+}
\ No newline at end of file
diff --git a/src/msdo-helpers.ts b/src/msdo-helpers.ts
new file mode 100644
index 00000000..72b13f14
--- /dev/null
+++ b/src/msdo-helpers.ts
@@ -0,0 +1,96 @@
+import os from 'os';
+import { Writable } from "stream";
+
+/**
+ * Enum for the possible inputs for the task (specified in action.yml)
+ */
+export enum Inputs {
+ Command = 'command',
+ Config = 'config',
+ Policy = 'policy',
+ Categories = 'categories',
+ Languages = 'languages',
+ Tools = 'tools',
+ IncludeTools = 'includeTools',
+ ExistingFilename = 'existingFilename'
+}
+
+/**
+ * Enum for the runner of the action.
+ */
+export enum RunnerType {
+ Main = 'main',
+ Pre = 'pre',
+ Post = 'post'
+}
+
+/*
+* Enum for the possible values for the Inputs.Tools (specified in action.yml)
+*/
+export enum Tools {
+ Bandit = 'bandit',
+ Binskim = 'binskim',
+ Checkov = 'checkov',
+ ContainerMapping = 'container-mapping',
+ ESLint = 'eslint',
+ TemplateAnalyzer = 'templateanalyzer',
+ Terrascan = 'terrascan',
+ Trivy = 'trivy'
+}
+
+/**
+ * Enum for defining constants used in the task.
+ */
+export enum Constants {
+ Unknown = "unknown",
+ PreJobStartTime = "PREJOBSTARTTIME"
+}
+
+/**
+ * Encodes a string to base64.
+ *
+ * @param str - The string to encode.
+ * @returns The base64 encoded string.
+ */
+export const encode = (str: string):string => Buffer.from(str, 'binary').toString('base64');
+
+/**
+ * Returns the encoded content of the Docker version, Docker events, and Docker images in the pre-defined format -
+ * DockerVersion
+ * Version: TaskVersion
+ * Events:
+ * DockerEvents
+ * Images:
+ * DockerImages
+ *
+ * @param dockerVersion - The version of Docker.
+ * @param dockerEvents - The Docker events.
+ * @param dockerImages - The Docker images.
+ * @param taskVersion - Optional version of the task. Defaults to the version in the action.yml file.
+ * @param sectionDelim - Optional delimiter to separate sections in the encoded content. Defaults to ":::".
+ * @returns The encoded content of the Docker version, Docker events, and Docker images.
+ */
+export function getEncodedContent(
+ dockerVersion: string,
+ dockerEvents: string,
+ dockerImages: string
+): string {
+ let data : string[] = [];
+ data.push("DockerVersion: " + dockerVersion);
+ data.push("DockerEvents:");
+ data.push(dockerEvents);
+ data.push("DockerImages:");
+ data.push(dockerImages);
+ return encode(data.join(os.EOL));
+}
+
+/**
+ * Writes the specified data to the specified output stream, followed by the platform-specific end-of-line character.
+ * If no output stream is specified, the data is written to the standard output stream.
+ *
+ * @param data - The data to write to the output stream.
+ * @param outStream - Optional. The output stream to write the data to. Defaults to the standard output stream.
+ */
+export function writeToOutStream(data: string, outStream: Writable = process.stdout): void {
+ outStream.write(data.trim() + os.EOL);
+}
\ No newline at end of file
diff --git a/src/msdo-interface.ts b/src/msdo-interface.ts
new file mode 100644
index 00000000..af50977e
--- /dev/null
+++ b/src/msdo-interface.ts
@@ -0,0 +1,29 @@
+/*
+* Interface for the MicrosoftSecurityDevOps task
+*/
+export interface IMicrosoftSecurityDevOps {
+ readonly succeedOnError: boolean;
+ /* param source - The source of the task: main, pre, or post. */
+ runPreJob(): any;
+ runMain(): any;
+ runPostJob(): any;
+}
+
+/**
+ * Factory interface for creating instances of the `IMicrosoftSecurityDevOps` interface.
+ * This factory enforces the inputs that can be used for creation of the `IMicrosoftSecurityDevOps` instances.
+ */
+export interface IMicrosoftSecurityDevOpsFactory {
+ new (): IMicrosoftSecurityDevOps;
+}
+
+/**
+ * Returns an instance of IMicrosoftSecurityDevOps based on the input runner and command type.
+ * (This is used to enforce strong typing for the inputs for the runner).
+ * @param runner - The runner to use to create the instance of IMicrosoftSecurityDevOps.
+ * @param commandType - The input command type.
+ * @returns An instance of IMicrosoftSecurityDevOps.
+ */
+export function getExecutor(runner: IMicrosoftSecurityDevOpsFactory): IMicrosoftSecurityDevOps {
+ return new runner();
+}
\ No newline at end of file
diff --git a/src/msdo.ts b/src/msdo.ts
new file mode 100644
index 00000000..c95399ca
--- /dev/null
+++ b/src/msdo.ts
@@ -0,0 +1,102 @@
+import * as core from '@actions/core';
+import { IMicrosoftSecurityDevOps } from './msdo-interface';
+import { Tools } from './msdo-helpers';
+import * as client from '@microsoft/security-devops-actions-toolkit/msdo-client';
+import * as common from '@microsoft/security-devops-actions-toolkit/msdo-common';
+
+/*
+* Microsoft Security DevOps analyzers runner.
+*/
+export class MicrosoftSecurityDevOps implements IMicrosoftSecurityDevOps {
+ readonly succeedOnError: boolean;
+
+ constructor() {
+ this.succeedOnError = false;
+ }
+
+ public async runPreJob() {
+ // No pre-job commands yet
+ }
+
+ public async runPostJob() {
+ // No post-job commands yet
+ }
+
+ public async runMain() {
+ core.debug('MicrosoftSecurityDevOps.runMain - Running MSDO...');
+
+ let args: string[] = undefined;
+
+ // Check job type - might be existing file
+ let existingFilename = core.getInput('existingFilename');
+ if (!common.isNullOrWhiteSpace(existingFilename)) {
+ args = ['upload', '--file', existingFilename];
+ }
+
+ // Nope, run the tool as intended
+ else {
+ args = ['run'];
+
+ let config: string = core.getInput('config');
+ if (!common.isNullOrWhiteSpace(config)) {
+ args.push('-c');
+ args.push(config);
+ }
+
+ let policy: string = core.getInput('policy');
+ if (common.isNullOrWhiteSpace(policy)) {
+ policy = "GitHub";
+ }
+
+ args.push('-p');
+ args.push(policy);
+
+ let categoriesString: string = core.getInput('categories');
+ if (!common.isNullOrWhiteSpace(categoriesString)) {
+ args.push('--categories');
+ let categories = categoriesString.split(',');
+ for (let i = 0; i < categories.length; i++) {
+ let category = categories[i];
+ if (!common.isNullOrWhiteSpace(category)) {
+ args.push(category.trim());
+ }
+ }
+ }
+
+ let languagesString: string = core.getInput('languages');
+ if (!common.isNullOrWhiteSpace(languagesString)) {
+ args.push('--languages');
+ let languages = languagesString.split(',');
+ for (let i = 0; i < languages.length; i++) {
+ let language = languages[i];
+ if (!common.isNullOrWhiteSpace(language)) {
+ args.push(language.trim());
+ }
+ }
+ }
+
+ let toolsString: string = core.getInput('tools');
+ let includedTools = [];
+ if (!common.isNullOrWhiteSpace(toolsString)) {
+ let tools = toolsString.split(',');
+ for (let i = 0; i < tools.length; i++) {
+ let tool = tools[i];
+ let toolTrimmed = tool.trim();
+ if (!common.isNullOrWhiteSpace(tool)
+ && tool != Tools.ContainerMapping // This tool is not handled by this executor
+ && includedTools.indexOf(toolTrimmed) == -1) {
+ if (includedTools.length == 0) {
+ args.push('--tool');
+ }
+ args.push(toolTrimmed);
+ includedTools.push(toolTrimmed);
+ }
+ }
+ }
+
+ args.push('--github');
+ }
+
+ await client.run(args, 'microsoft/security-devops-action');
+ }
+}
\ No newline at end of file
diff --git a/src/post.ts b/src/post.ts
new file mode 100644
index 00000000..ab75224f
--- /dev/null
+++ b/src/post.ts
@@ -0,0 +1,11 @@
+import * as core from '@actions/core';
+import { ContainerMapping } from './container-mapping';
+import { getExecutor } from './msdo-interface';
+
+async function runPost() {
+ await getExecutor(ContainerMapping).runPostJob();
+}
+
+runPost().catch((error) => {
+ core.debug(error);
+});
\ No newline at end of file
diff --git a/src/pre.ts b/src/pre.ts
new file mode 100644
index 00000000..f717e43a
--- /dev/null
+++ b/src/pre.ts
@@ -0,0 +1,11 @@
+import * as core from '@actions/core';
+import { ContainerMapping } from './container-mapping';
+import { getExecutor } from './msdo-interface';
+
+async function runPre() {
+ await getExecutor(ContainerMapping).runPreJob();
+}
+
+runPre().catch((error) => {
+ core.debug(error);
+});
\ No newline at end of file
diff --git a/test/post.tests.ts b/test/post.tests.ts
new file mode 100644
index 00000000..8464a9f6
--- /dev/null
+++ b/test/post.tests.ts
@@ -0,0 +1,129 @@
+import assert from 'assert';
+import https from 'https';
+import sinon from 'sinon';
+import * as core from '@actions/core';
+import * as exec from '@actions/exec';
+import { run, sendReport, _sendReport } from '../lib/post';
+
+describe('postjob run', function() {
+ let execStub: sinon.SinonStub;
+ let sendReportStub: sinon.SinonStub;
+
+ beforeEach(() => {
+ execStub = sinon.stub(exec, 'exec');
+ sendReportStub = sinon.stub(sendReport);
+ });
+
+ afterEach(() => {
+ execStub.restore();
+ sendReport.restore();
+ });
+
+ it('should run three docker commands and send the report', async () => {
+ await run();
+
+ sinon.assert.callCount(execStub, 3);
+ sinon.assert.calledWith(execStub, 'docker --version');
+ sinon.assert.calledWith(execStub, 'docker images --format CreatedAt={{.CreatedAt}}::Repo={{.Repository}}::Tag={{.Tag}}::Digest={{.Digest}}');
+
+ sinon.assert.calledOnce(sendReport);
+ });
+});
+
+describe('postjob sendReport', function() {
+ let _sendReportStub: sinon.SinonStub;
+ let data: Object;
+
+ beforeEach(() => {
+ _sendReportStub = sinon.stub(_sendReport);
+ data = {
+ "key.fake": "value.fake"
+ };
+ });
+
+ afterEach(() => {
+ _sendReportStub.restore();
+ });
+
+ it('should still call _sendReport once if retryCount < 1', async () => {
+ await sendReport(data, -1);
+ sinon.assert.calledOnce(_sendReport);
+ });
+
+ it('should succeed if _sendReport succeeds', async () => {
+ _sendReportStub.throws(new Error('_sendReport().Error'));
+
+ await sendReport(data, 0);
+ sinon.assert.calledOnce(_sendReport);
+ });
+
+ it('should succeed if _sendReport succeeds', async () => {
+
+
+ await sendReport(data, 0);
+ sinon.assert.calledOnce(_sendReport);
+ });
+
+ // should still call _sendReport once if retryCount < 1
+ // should succeed if _sendReport succeeds
+ // should fail if _sendReport fails and retryCount == 0
+ // should succeed if _sendReport fails the first time and succeeds the second if retryCount > 0
+ // should fail if _sendReport fails for all retries
+
+});
+
+
+describe('postjob _sendReport', function() {
+ let core_getIDTokenStub: sinon.SinonStub;
+ let https_requestStub: sinon.SinonStub;
+ let clientRequestStub;
+ let data: Object;
+ const expectedUrl = 'https://dfdinfra-afdendpoint2-dogfood-edb5h5g7gyg7h3hq.z01.azurefd.net/github/v1/container-mappings';
+
+ beforeEach(() => {
+ core_getIDTokenStub = sinon.stub(core, 'getIDToken');
+ https_requestStub = sinon.stub(https, 'request');
+ clientRequestStub = sinon.stub();
+ clientRequestStub.end = sinon.stub();
+
+ core_getIDTokenStub.resolves('bearerToken.mock');
+ https_requestStub
+ .callsArgWith(2, {
+ on: (event, callback) => {
+ if (event === 'data') {
+ callback();
+ } else if (event === 'end') {
+ callback();
+ }
+ },
+ end: () => {}
+ })
+ .returns(clientRequestStub);
+
+ data = {
+ "key.fake": "value.fake"
+ };
+ });
+
+ afterEach(() => {
+ core_getIDTokenStub.restore();
+ https_requestStub.restore();
+ clientRequestStub.restore();
+ });
+
+ it('should still call _sendReport once if retryCount < 1', async () => {
+ await _sendReport(data, -1);
+ sinon.assert.calledOnce(core_getIDTokenStub);
+ sinon.assert.calledOnce(https_requestStub);
+
+ // {
+ // method: 'POST',
+ // timeout: 2500,
+ // headers: {
+ // 'Content-Type': 'application/json',
+ // 'Authorization': 'Bearer bearerToken.mock'
+ // },
+ // data: data
+ // };
+ });
+});
\ No newline at end of file
diff --git a/test/pre.tests.ts b/test/pre.tests.ts
new file mode 100644
index 00000000..5bd2d553
--- /dev/null
+++ b/test/pre.tests.ts
@@ -0,0 +1,27 @@
+import sinon from 'sinon';
+import * as core from '@actions/core';
+import { run } from '../lib/pre';
+
+describe('prejob run', () => {
+ let saveStateStub: sinon.SinonStub;
+ let dateSub: sinon.SinonStub;
+
+ beforeEach(() => {
+ saveStateStub = sinon.stub(core, 'saveState');
+ dateSub = sinon.stub(global, 'Date');
+ });
+
+ afterEach(() => {
+ saveStateStub.restore();
+ });
+
+ it('should save the current time as PreJobStartTime', async () => {
+ dateSub.returns({
+ toISOString: () => '2023-01-23T45:12:34.567Z'
+ });
+
+ await run();
+
+ sinon.assert.calledWithExactly(saveStateStub, 'PreJobStartTime', '2023-01-23T45:12:34.567Z');
+ });
+});
\ No newline at end of file
diff --git a/test/testCommon.ts b/test/testCommon.ts
new file mode 100644
index 00000000..b6e5af62
--- /dev/null
+++ b/test/testCommon.ts
@@ -0,0 +1,11 @@
+import * as path from 'path';
+
+export const stagingDirectory = path.join(__dirname, '..', 'lib');
+
+export enum TestConstants {
+ Error = 'Error',
+ Success = 'Success',
+ TaskTestTrace = 'TASK_TEST_TRACE',
+ MockResponse = 'MOCK_RESPONSE',
+ InputPrefix = 'INPUT_'
+};
\ No newline at end of file
diff --git a/test/tsconfig.json b/test/tsconfig.json
new file mode 100644
index 00000000..f59d1fc5
--- /dev/null
+++ b/test/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "target": "es6",
+ "module": "commonjs",
+ "lib": [
+ "es6"
+ ],
+ "rootDir": "./",
+ "strict": false,
+ "esModuleInterop": true,
+ "noImplicitAny": false,
+ "removeComments": true,
+ "sourceMap": true
+ },
+ "include": [
+ "**/*"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
+ }
\ No newline at end of file