diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bf18b32 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.git/ +.gitignore +build/ +README.md +Dockerfile* +*.log +**/*.swp +node_modules/ +scan-results.json +coverage/ diff --git a/.eslintrc.js b/.eslintrc.js index 6b62077..9118fbc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -5,7 +5,8 @@ module.exports = { }, extends: ["eslint:recommended", "prettier"], rules: { - "no-console": "off", + "no-var": "error", + eqeqeq: ["error", "always"], }, overrides: [ @@ -40,5 +41,18 @@ module.exports = { "@typescript-eslint/no-use-before-define": "warn", }, }, + { + files: ["**/__tests__/**/*", "**/__mocks__/**/*"], + plugins: ["jest"], + env: { + // Bugged, see https://github.com/jest-community/eslint-plugin-jest/issues/128 + // "jest/globals": true, + // This list isn't as complete but should work for now + jest: true, + }, + rules: { + "no-console": "off", + }, + }, ], }; diff --git a/.gitattributes b/.gitattributes index 0a78128..1a33c8e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,4 @@ # we don't want to see generated files as part of diffs and code reviews package-lock.json -diff +# This is a generated file for this project +src/types/smartcheck-api.d.ts -diff diff --git a/.gitignore b/.gitignore index 6194f9c..ef6e388 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,8 @@ typings/ .dynamodb/ build/ + +#rollup build cache +/.r*/ + +scan-results.json diff --git a/.prettierignore b/.prettierignore index f976a87..a5eae0f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,3 +3,4 @@ node_modules/ # files package*.json build/ +coverage/ diff --git a/.vscode/settings.json b/.vscode/settings.json index 978a8a8..23b3fa3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,23 @@ { + "search.exclude": { + "**/node_modules": true, + "**/bower_components": true, + "package-lock.json": true, + "src/types/smartcheck-api.d.ts": true + }, "eslint.validate": [ "javascript", "javascriptreact", { "language": "typescript", "autoFix": true } ], - "eslint.autoFixOnSave": true + "eslint.autoFixOnSave": true, + "cSpell.words": [ + "deepsecurity", + "dssc", + "execa", + "microbundle", + "preregistry", + "smartcheck", + "userid" + ] } diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9453914 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,56 @@ +# This target exists to enable targeted building for running tests +FROM node:10-alpine as builder +WORKDIR /code +# keep package.json separate so that we can cache the npm install step more often +COPY package*.json /code/ +RUN npm install --quiet + +COPY . /code/ + +RUN npm run build + +################################################################################ +FROM node:10-alpine as prod-install +WORKDIR /app/ +COPY --from=builder /code/package*.json /app/ +RUN npm install --production +COPY --from=builder /code/build/ /app/dist/ + +################################################################################ +FROM node:10-alpine as docker-install + +RUN apk update && \ + apk add curl + +WORKDIR /tmp + +ENV VERSION "18.09.3" +RUN curl -L -o /tmp/docker-$VERSION.tgz https://download.docker.com/linux/static/stable/x86_64/docker-$VERSION.tgz \ + && tar -xz -f /tmp/docker-$VERSION.tgz \ + && mv docker/docker /usr/bin + +################################################################################ +FROM node:10-alpine + +# See GitHub Action label docs +# https://developer.github.com/actions/creating-github-actions/creating-a-docker-container/#label +LABEL "com.github.actions.name"="Deep Security Smart Check Scan" +LABEL "com.github.actions.description"="Scan container images with Deep Security Smart Check." +LABEL "com.github.actions.icon"="shield" +LABEL "com.github.actions.color"="gray-dark" +LABEL "maintainer"="Trend Micro" +LABEL "repository"="https://github.com/deep-security/smartcheck-scan-action" +LABEL "homepage"="https://www.trendmicro.com/smartcheck" + +RUN apk update && \ + apk upgrade && \ + rm -rf /var/cache/apk/* + +COPY --from=prod-install /app/ /app/ + +COPY --from=docker-install /usr/bin/docker /usr/bin/docker + +WORKDIR /app/ + +ENTRYPOINT ["node", "/app/dist/index.js"] + diff --git a/README.md b/README.md new file mode 100644 index 0000000..4e4cb2f --- /dev/null +++ b/README.md @@ -0,0 +1,217 @@ +# Deep Security Smart Check Scan Action + +For scanning your images as part of your CI pipeline using [Deep Security Smart +Check][]. + +[deep security smart check]: https://www.trendmicro.com/smartcheck + +This tool is used by the Deep Security Smart Check plugin for Jenkins and can +also be used as a [GitHub Action](https://github.com/features/actions). + +## Usage + +Add an Action in your `main.workflow` file to scan your image with Deep Security +Smart Check. + +```main.workflow +action "Scan with Deep Security Smart Check" { + needs = "Push image to GCR" + uses = "docker://deepsecurity/smartcheck-scan-action" + secrets = [ + "DSSC_SMARTCHECK_HOST", + "DSSC_SMARTCHECK_USER", + "DSSC_SMARTCHECK_PASSWORD", + "DSSC_IMAGE_PULL_AUTH" + ] + args = ["--image-name registry.example.com/my-project/my-image"] +} +``` + +### Parameters + +All parameters can be passed as CLI parameters or environment variables by +switching to all caps and prefixing with `DSSC_`. Example: `--image-name` could +be given with `DSSC_IMAGE_NAME`. + +- **smartcheck-host | DSSC_SMARTCHECK_HOST** + - The hostname of the Deep Security Smart Check deployment. Example: + `smartcheck.example.com` +- **insecure-skip-tls-verify | DSSC_INSECURE_SKIP_TLS_VERIFY** + - If the client should ignore certificate errors when connecting to Deep + Security Smart Check. You may want to set this if you've configured a self + signed cert. +- **smartcheck-user | DSSC_SMARTCHECK_USER** + - The username to authenticate with the Deep Security Smart Check deployment +- **smartcheck-password | DSSC_SMARTCHECK_PASSWORD** + - The password to authenticate with the Deep Security Smart Check deployment +- **image-name | DSSC_IMAGE_NAME** + - The name of the image to scan +- **image-pull-auth | DSSC_IMAGE_PULL_AUTH** + + - A JSON object of credentials for authenticating with the registry to pull + the image from. Example: + + ```json + { + "username": "", + "password": "" + } + ``` + + See [creating a scan][] in the [Deep Security Smart Check API Reference][] + for additional registry credentials options. + +- **insecure-skip-registry-tls-verify | DSSC_INSECURE_SKIP_REGISTRY_TLS_VERIFY** + - If Deep Security Smart Check should ignore certificate errors from the image + registry. +- **preregistry-scan | DSSC_PREREGISTRY_SCAN** + - Specify this option to trigger a "pre-registry scan", which pushes the image + to a temporary registry on the scan system. +- **preregistry-host | DSSC_PREREGISTRY_HOST** + - The hostname of the temporary registry. Defaults to the `smartcheck-host` on + port 5000. +- **preregistry-user | DSSC_PREREGISTRY_USER** + - The username to authenticate with the temporary registry. +- **preregistry-password | DSSC_PREREGISTRY_PASSWORD** + - The password to authenticate with the temporary registry. + +[deep security smart check api reference]: + https://deep-security.github.io/smartcheck-docs/api/index.html +[creating a scan]: + https://deep-security.github.io/smartcheck-docs/api/index.html#operation/createScan + +- **results-file | DSSC_RESULTS_FILE** - default: `scan-results.json` + - The path to write the scan results to. If not provided, the scan results + will be written to stdout. +- **findings-threshold | DSSC_FINDINGS_THRESHOLD** + + - A JSON object that can be used to fail this step if an image contains + findings that exceed the threshold. + + Default value: + + ```json + { + "malware": 0, + "vulnerabilities": { + "defcon1": 0, + "critical": 0, + "high": 0 + }, + "contents": { + "defcon1": 0, + "critical": 0, + "high": 0 + }, + "checklists": { + "defcon1": 0, + "critical": 0, + "high": 0 + } + } + ``` + + Schema: + + ```typescript + interface FindingsThreshold { + malware?: number; + contents?: { + defcon1?: number; + critical?: number; + high?: number; + medium?: number; + low?: number; + negligible?: number; + unknown?: number; + }; + vulnerabilities?: { + defcon1?: number; + critical?: number; + high?: number; + medium?: number; + low?: number; + negligible?: number; + unknown?: number; + }; + checklists?: { + defcon1?: number; + critical?: number; + high?: number; + medium?: number; + low?: number; + negligible?: number; + unknown?: number; + }; + } + ``` + +## Example Workflow + +```main.workflow +workflow "Push image" { + on = "push" + resolves = "Scan with Deep Security Smart Check" +} + +action "Build image" { + uses = "docker://docker:stable" + args = ["build", "-t", "registry.example.com/my-project/my-image", "."] +} + +action "Docker Login" { + uses = "actions/docker/login@master" + env = { + DOCKER_REGISTRY_URL = "registry.example.com" + } + secrets = [ + "DOCKER_USERNAME", + "DOCKER_PASSWORD" + ] +} + +action "Push image" { + needs = ["Build image", "Docker Login"] + uses = "actions/docker/cli@master" + args = "push registry.example.com/my-project/my-image" +} + +action "Scan with Deep Security Smart Check" { + needs = "Push image" + uses = "docker://deepsecurity/smartcheck-scan-action" + secrets = [ + "DSSC_SMARTCHECK_HOST", + "DSSC_SMARTCHECK_USER", + "DSSC_SMARTCHECK_PASSWORD", + "DSSC_IMAGE_PULL_AUTH" + ] + args = ["--image-name registry.example.com/my-project/my-image"] +} +``` + +## Pre-registry scanning + +To enable pre-registry scanning, you will need to provide the +`preregistry-scan`, `preregistry-user`, and `preregistry-password` parameters to +the scan. If you are running the temporary registry as a separate service or on +a port other than 5000, you will also need to provide the `preregistry-host` +parameter, specifying the hostname and port number where you are running the +temporary registry. + +## Contributing + +If you encounter a bug, think of a useful feature, or find something confusing +in the docs, please +[create a new issue](https://github.com/deep-security/smartcheck-scan-action/issues/new)! + +We :heart: pull requests. If you'd like to fix a bug, contribute to a feature or +just correct a typo, please feel free to do so. + +If you're thinking of adding a new feature, consider opening an issue first to +discuss it to ensure it aligns to the direction of the project (and potentially +save yourself some time!). + +## Support + +Official support from Trend Micro is not available. Individual contributors may +be Trend Micro employees, but are not official support. diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..5242e2d --- /dev/null +++ b/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + preset: "ts-jest", + testEnvironment: "node", + roots: ["/src/"], + testPathIgnorePatterns: ["/node_modules/", "/build/"], + collectCoverage: true, +}; diff --git a/package-lock.json b/package-lock.json index 5b7b5a4..3ab371a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,151 @@ "@babel/highlight": "^7.0.0" } }, + "@babel/core": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz", + "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.3.4", + "@babel/helpers": "^7.2.0", + "@babel/parser": "^7.3.4", + "@babel/template": "^7.2.2", + "@babel/traverse": "^7.3.4", + "@babel/types": "^7.3.4", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.11", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@babel/generator": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", + "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.3.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz", + "integrity": "sha512-uFpzw6L2omjibjxa8VGZsJUPL5wJH0zzGKpoz0ccBkzIa6C8kWNUbiBmQ0rgOKWlHJ6qzmfa6lTiGchiV8SC+g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", + "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz", + "integrity": "sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.3.4", + "@babel/types": "^7.3.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", + "dev": true, + "requires": { + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.5", + "@babel/types": "^7.3.0" + } + }, "@babel/highlight": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", @@ -24,6 +169,50 @@ "js-tokens": "^4.0.0" } }, + "@babel/parser": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", + "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", + "dev": true + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz", + "integrity": "sha512-/4FKFChkQ2Jgb8lBDsvFX496YTi7UWTetVgS8oJUpX1e/DlaoeEK57At27ug8Hu2zI2g8bzkJ+8k9qrHZRPGPA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.2.1", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/polyfill": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", + "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", + "dev": true, + "requires": { + "core-js": "^2.5.7", + "regenerator-runtime": "^0.12.0" + } + }, "@babel/runtime": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", @@ -33,12 +222,282 @@ "regenerator-runtime": "^0.12.0" } }, + "@babel/template": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" + } + }, + "@babel/traverse": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", + "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.3.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.3.4", + "@babel/types": "^7.3.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@babel/types": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", + "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, "@graham42/prettier-config": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@graham42/prettier-config/-/prettier-config-1.3.2.tgz", "integrity": "sha512-8AdyPxCNR12CiRiLwmaYN0u0vZOfJv7s5bBEtD+HlhfLGaEGu6duIBpjJlEwwdGYbkwN0CRrPaW9Cg2lHYm+Mw==", "dev": true }, + "@jest/console": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.3.0.tgz", + "integrity": "sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA==", + "dev": true, + "requires": { + "@jest/source-map": "^24.3.0", + "@types/node": "*", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.5.0.tgz", + "integrity": "sha512-RDZArRzAs51YS7dXG1pbXbWGxK53rvUu8mCDYsgqqqQ6uSOaTjcVyBl2Jce0exT2rSLk38ca7az7t2f3b0/oYQ==", + "dev": true, + "requires": { + "@jest/console": "^24.3.0", + "@jest/reporters": "^24.5.0", + "@jest/test-result": "^24.5.0", + "@jest/transform": "^24.5.0", + "@jest/types": "^24.5.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.5.0", + "jest-config": "^24.5.0", + "jest-haste-map": "^24.5.0", + "jest-message-util": "^24.5.0", + "jest-regex-util": "^24.3.0", + "jest-resolve-dependencies": "^24.5.0", + "jest-runner": "^24.5.0", + "jest-runtime": "^24.5.0", + "jest-snapshot": "^24.5.0", + "jest-util": "^24.5.0", + "jest-validate": "^24.5.0", + "jest-watcher": "^24.5.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "@jest/environment": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.5.0.tgz", + "integrity": "sha512-tzUHR9SHjMXwM8QmfHb/EJNbF0fjbH4ieefJBvtwO8YErLTrecc1ROj0uo2VnIT6SlpEGZnvdCK6VgKYBo8LsA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.5.0", + "@jest/transform": "^24.5.0", + "@jest/types": "^24.5.0", + "@types/node": "*", + "jest-mock": "^24.5.0" + } + }, + "@jest/fake-timers": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.5.0.tgz", + "integrity": "sha512-i59KVt3QBz9d+4Qr4QxsKgsIg+NjfuCjSOWj3RQhjF5JNy+eVJDhANQ4WzulzNCHd72srMAykwtRn5NYDGVraw==", + "dev": true, + "requires": { + "@jest/types": "^24.5.0", + "@types/node": "*", + "jest-message-util": "^24.5.0", + "jest-mock": "^24.5.0" + } + }, + "@jest/reporters": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.5.0.tgz", + "integrity": "sha512-vfpceiaKtGgnuC3ss5czWOihKOUSyjJA4M4udm6nH8xgqsuQYcyDCi4nMMcBKsHXWgz9/V5G7iisnZGfOh1w6Q==", + "dev": true, + "requires": { + "@jest/environment": "^24.5.0", + "@jest/test-result": "^24.5.0", + "@jest/transform": "^24.5.0", + "@jest/types": "^24.5.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-api": "^2.1.1", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-source-maps": "^3.0.1", + "jest-haste-map": "^24.5.0", + "jest-resolve": "^24.5.0", + "jest-runtime": "^24.5.0", + "jest-util": "^24.5.0", + "jest-worker": "^24.4.0", + "node-notifier": "^5.2.1", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", + "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.5.0.tgz", + "integrity": "sha512-u66j2vBfa8Bli1+o3rCaVnVYa9O8CAFZeqiqLVhnarXtreSXG33YQ6vNYBogT7+nYiFNOohTU21BKiHlgmxD5A==", + "dev": true, + "requires": { + "@jest/console": "^24.3.0", + "@jest/types": "^24.5.0", + "@types/istanbul-lib-coverage": "^1.1.0" + } + }, + "@jest/transform": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.5.0.tgz", + "integrity": "sha512-XSsDz1gdR/QMmB8UCKlweAReQsZrD/DK7FuDlNo/pE8EcKMrfi2kqLRk8h8Gy/PDzgqJj64jNEzOce9pR8oj1w==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.5.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.5.0", + "jest-regex-util": "^24.3.0", + "jest-util": "^24.5.0", + "micromatch": "^3.1.10", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/types": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.5.0.tgz", + "integrity": "sha512-kN7RFzNMf2R8UDadPOl6ReyI+MT8xfqRuAnuVL+i4gwjv/zubdDK+EDeLHYwq1j0CSSR2W/MmgaRlMZJzXdmVA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^1.1.0", + "@types/yargs": "^12.0.9" + } + }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -48,10 +507,106 @@ "any-observable": "^0.3.0" } }, + "@types/axios": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz", + "integrity": "sha1-7CMA++fX3d1+udOr+HmZlkyvzkY=", + "dev": true, + "requires": { + "axios": "*" + } + }, + "@types/babel__core": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.0.tgz", + "integrity": "sha512-wJTeJRt7BToFx3USrCDs2BhEi4ijBInTQjOIukj6a/5tEkwpFMVZ+1ppgmE+Q/FQyc5P/VWUbx7I9NELrKruHA==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", + "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/execa": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@types/execa/-/execa-0.9.0.tgz", + "integrity": "sha512-mgfd93RhzjYBUHHV532turHC2j4l/qxsF/PbfDmprHDEUHmNZGlDn1CEsulGK3AfsPdhkWzZQT/S/k0UGhLGsA==", + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz", + "integrity": "sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ==", + "dev": true + }, + "@types/jest": { + "version": "24.0.11", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.11.tgz", + "integrity": "sha512-2kLuPC5FDnWIDvaJBzsGTBQaBbnDweznicvK7UGYzlIJP4RJR2a4A/ByLUXEyEgag6jz8eHdlWExGDtH3EYUXQ==", + "dev": true, + "requires": { + "@types/jest-diff": "*" + } + }, + "@types/jest-diff": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", + "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", + "dev": true + }, "@types/node": { "version": "11.10.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-11.10.5.tgz", - "integrity": "sha512-DuIRlQbX4K+d5I+GMnv+UfnGh+ist0RdlvOp+JZ7ePJ6KQONCFQv/gKYSU1ZzbVdFSUCKZOltjmpFAGGv5MdYA==", + "integrity": "sha512-DuIRlQbX4K+d5I+GMnv+UfnGh+ist0RdlvOp+JZ7ePJ6KQONCFQv/gKYSU1ZzbVdFSUCKZOltjmpFAGGv5MdYA==" + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", "dev": true }, "@types/yargs": { @@ -101,18 +656,46 @@ } } }, + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true + }, "acorn": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", + "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, "acorn-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", @@ -125,7 +708,13 @@ "uri-js": "^4.2.2" } }, - "ansi-escapes": { + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", @@ -148,6 +737,41 @@ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "dev": true }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "arg": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", @@ -181,6 +805,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -208,6 +838,21 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -220,12 +865,130 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "requires": { + "lodash": "^4.17.11" + } + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "asyncro": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", + "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "autoprefixer": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.0.tgz", + "integrity": "sha512-hMKcyHsZn5+qL6AUeP3c8OyuteZ4VaUlg+fWbyl8z7PqsKHF/Bf8/px3K6AT8aMzDkBo8Bc11245MM+itDBOxQ==", + "dev": true, + "requires": { + "browserslist": "^4.4.2", + "caniuse-lite": "^1.0.30000947", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.14", + "postcss-value-parser": "^3.3.1" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" + } + }, + "babel-jest": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.5.0.tgz", + "integrity": "sha512-0fKCXyRwxFTJL0UXDJiT2xYxO9Lu2vBd9n+cC+eDjESzcVG3s2DRGAxbzJX21fceB1WYoBjAh8pQ83dKcl003g==", + "dev": true, + "requires": { + "@jest/transform": "^24.5.0", + "@jest/types": "^24.5.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.3.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz", + "integrity": "sha512-RNNVv2lsHAXJQsEJ5jonQwrJVWK8AcZpG1oxhnjCUaAjL7xahYLANhPUZbzEQHjKy1NMYUwn+0NPKQc8iSY4xQ==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.0.0", + "test-exclude": "^5.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.3.0.tgz", + "integrity": "sha512-nWh4N1mVH55Tzhx2isvUN5ebM5CDUvIpXPZYMRazQughie/EqGnbR+czzoQlhUmJG9pPJmYDRhvocotb2THl1w==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-transform-async-to-promises": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.6.tgz", + "integrity": "sha512-bKgtoXHueZZQ+NjWaUj3juhtIU/7aqVUkhUnAWWBgnPVL4oAgKP0AOzz5kYvWzD+GB9ZIA6MKHhqWe0K3rSdqA==", + "dev": true + }, + "babel-preset-jest": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.3.0.tgz", + "integrity": "sha512-VGTV2QYBa/Kn3WCOKdfS31j9qomaXSgJqi65B6o05/1GsJyj9LVhSljM9ro4S+IBGj/ENhNBuH9bpqzztKAQSw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.3.0" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -287,6 +1050,37 @@ } } }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -326,12 +1120,126 @@ } } }, + "brotli-size": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.0.3.tgz", + "integrity": "sha512-bBIdd8uUGxKGldAVykxOqPegl+HlIm4FpXJamwWw5x77WCE8jO7AhXFE1YXOhOB28gS+2pTQete0FqRE6U5hQQ==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "iltorb": "^2.0.5" + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserslist": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.1.tgz", + "integrity": "sha512-/pPw5IAUyqaQXGuD5vS8tcbudyPZ241jk1W5pQBsGDfcjNQt7p8qxZhgMNuygDShte1PibLFexecWUPgmVLfrg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000949", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buble": { + "version": "0.19.7", + "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.7.tgz", + "integrity": "sha512-YLgWxX/l+NnfotydBlxqCMPR4FREE4ubuHphALz0FxQ7u2hp3BzxTKQ4nKpapOaRJfEm1gukC68KnT2OymRK0g==", + "dev": true, + "requires": { + "acorn": "^6.1.1", + "acorn-dynamic-import": "^4.0.0", + "acorn-jsx": "^5.0.1", + "chalk": "^2.4.2", + "magic-string": "^0.25.2", + "minimist": "^1.2.0", + "os-homedir": "^1.0.1", + "regexpu-core": "^4.5.4" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "builtin-modules": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", + "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==", + "dev": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -378,6 +1286,45 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==" }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-db": { + "version": "1.0.30000950", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000950.tgz", + "integrity": "sha512-mS/KbErOeYOVF8W4GdMmHAyNm9p4XGXLP4Nde75b1uadwzUr+dFd0RCVheQIB8+yKs1PGW73Bnejch0G1s0FvQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000950", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000950.tgz", + "integrity": "sha512-Cs+4U9T0okW2ftBsCIHuEYXXkki7mjXmjCh4c6PzYShk04qDEr76/iC7KwhLoWoY65wcra1XOsRD+S7BptEb5A==", + "dev": true + }, + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "dev": true, + "requires": { + "rsvp": "^3.3.3" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -415,12 +1362,42 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "^1.1.3" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + } + } + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -525,6 +1502,29 @@ } } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -540,11 +1540,20 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", + "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -552,15 +1561,102 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + }, + "dependencies": { + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "^1.0.0" + } + } + } + }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, + "colorspace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.1.tgz", + "integrity": "sha512-pI3btWyiuz7Ken0BWh9Elzsmv2bM9AhA7psXib4anUXy/orfZ/E0MbQwhSOG/9L8hLlalqrU0UhOuqxW1YjmVw==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + }, + "dependencies": { + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + } + } + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, + "compare-versions": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", + "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==", + "dev": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -573,12 +1669,55 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, "cosmiconfig": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz", @@ -604,6 +1743,334 @@ "which": "^1.2.9" } }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "css-tree": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "dev": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-url-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "dev": true + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + } + } + }, + "cssom": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", + "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "dev": true + }, + "cssstyle": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz", + "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, "date-fns": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", @@ -614,7 +2081,6 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -630,18 +2096,51 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -683,6 +2182,12 @@ } } }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, "del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", @@ -697,12 +2202,52 @@ "rimraf": "^2.2.8" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "diff-sequences": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", + "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -712,6 +2257,72 @@ "esutils": "^2.0.2" } }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.116", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz", + "integrity": "sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA==", + "dev": true + }, "elegant-spinner": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", @@ -723,6 +2334,20 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.x" + } + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -731,6 +2356,17 @@ "once": "^1.4.0" } }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "env-variable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", + "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -740,12 +2376,71 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promisify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz", + "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "escodegen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "eslint": { "version": "5.15.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.1.tgz", @@ -841,6 +2536,12 @@ "get-stdin": "^6.0.0" } }, + "eslint-plugin-jest": { + "version": "22.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.3.2.tgz", + "integrity": "sha512-K1i3qORvcX2VuGLI4N+slreGpeObAWkT5gi1ya8olZ6YXwnxzBrMlif3uEUHgXwPIStpO26vAlRX0SgFy8SkZA==", + "dev": true + }, "eslint-scope": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", @@ -904,12 +2605,24 @@ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, + "estree-walker": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz", + "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==", + "dev": true + }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true + }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -924,6 +2637,12 @@ "strip-eof": "^1.0.0" } }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -974,6 +2693,94 @@ } } }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true + }, + "expect": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.5.0.tgz", + "integrity": "sha512-p2Gmc0CLxOgkyA93ySWmHFYHUPFIHG6XZ06l7WArWAsrqYVaVEkOU5NtT5i68KUyGKbkQgDCkiT65bWmdoL6Bw==", + "dev": true, + "requires": { + "@jest/types": "^24.5.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.3.0", + "jest-matcher-utils": "^24.5.0", + "jest-message-util": "^24.5.0", + "jest-regex-util": "^24.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1071,6 +2878,12 @@ } } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -1089,6 +2902,31 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-safe-stringify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", + "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -1108,6 +2946,28 @@ "flat-cache": "^2.0.1" } }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -1162,18 +3022,68 @@ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", "dev": true }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flow-remove-types": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-1.2.3.tgz", + "integrity": "sha512-ypq/U3V+t9atYiOuSJd40tekCra03EHKoRsiK/wXGrsZimuum0kdwVY7Yv0HTaoXgHW1WiayomYd+Q3kkvPl9Q==", + "dev": true, + "requires": { + "babylon": "^6.15.0", + "vlq": "^0.2.1" + } + }, "fn-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", "dev": true }, + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "requires": { + "debug": "^3.2.6" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -1183,12 +3093,35 @@ "map-cache": "^0.2.2" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -1206,6 +3139,53 @@ "simple-git": "^1.85.0" } }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "generic-names": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-1.0.3.tgz", + "integrity": "sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=", + "dev": true, + "requires": { + "loader-utils": "^0.2.16" + } + }, "get-caller-file": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.1.tgz", @@ -1237,6 +3217,21 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "dev": true + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -1251,12 +3246,71 @@ "path-is-absolute": "^1.0.0" } }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, "globals": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", "dev": true }, + "globalyzer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz", + "integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA==", + "dev": true + }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -1278,6 +3332,79 @@ } } }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", + "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^3.0.0" + } + }, + "handlebars": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -1293,6 +3420,18 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -1325,12 +3464,56 @@ } } }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, "husky": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", @@ -1358,13 +3541,41 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "import-fresh": { + "iltorb": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.2.tgz", + "integrity": "sha512-RvsVTHt1Pw1/Zcepfd+3jinu38rO8IBFVONcroT9Dwrb5RSNE/CEX7uy1yZKN/kYCQB7FWx/oQgXhN9qAwZY9Q==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "nan": "^2.12.1", + "npmlog": "^4.1.2", + "prebuild-install": "^5.2.4", + "which-pm-runs": "^1.0.0" + } + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", @@ -1374,6 +3585,25 @@ "resolve-from": "^3.0.0" } }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -1386,6 +3616,12 @@ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "dev": true }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1399,7 +3635,12 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, "inquirer": { @@ -1478,11 +3719,26 @@ } } }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -1512,7 +3768,12 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-ci": { @@ -1524,6 +3785,20 @@ "ci-info": "^2.0.0" } }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -1544,6 +3819,12 @@ } } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -1569,6 +3850,21 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -1586,6 +3882,12 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, + "is-generator-fn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.0.0.tgz", + "integrity": "sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g==", + "dev": true + }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", @@ -1595,6 +3897,12 @@ "is-extglob": "^2.1.1" } }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -1654,6 +3962,12 @@ "path-is-inside": "^1.0.1" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -1663,34 +3977,90 @@ "isobject": "^3.0.1" } }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -1703,236 +4073,505 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "istanbul-api": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.1.tgz", + "integrity": "sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "async": "^2.6.1", + "compare-versions": "^3.2.1", + "fileset": "^2.0.3", + "istanbul-lib-coverage": "^2.0.3", + "istanbul-lib-hook": "^2.0.3", + "istanbul-lib-instrument": "^3.1.0", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.2", + "istanbul-reports": "^2.1.1", + "js-yaml": "^3.12.0", + "make-dir": "^1.3.0", + "minimatch": "^3.0.4", + "once": "^1.4.0" } }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "istanbul-lib-hook": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz", + "integrity": "sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "append-transform": "^1.0.0" } }, - "lint-staged": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", - "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==", + "istanbul-lib-instrument": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", + "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", "dev": true, "requires": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.0.2", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "del": "^3.0.0", - "execa": "^1.0.0", - "find-parent-dir": "^0.3.0", - "g-status": "^2.0.2", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "listr": "^0.14.2", - "listr-update-renderer": "^0.5.0", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.2", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2", - "yup": "^0.26.10" + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "istanbul-lib-coverage": "^2.0.3", + "semver": "^5.5.0" } }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "istanbul-lib-report": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz", + "integrity": "sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA==", "dev": true, "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" + "istanbul-lib-coverage": "^2.0.3", + "make-dir": "^1.3.0", + "supports-color": "^6.0.0" }, "dependencies": { - "p-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", - "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", - "dev": true + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "istanbul-lib-source-maps": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz", + "integrity": "sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ==", "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.3", + "make-dir": "^1.3.0", + "rimraf": "^2.6.2", + "source-map": "^0.6.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ms": "^2.1.1" } }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "istanbul-reports": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.1.1.tgz", + "integrity": "sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw==", "dev": true, "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" + "handlebars": "^4.1.0" + } + }, + "jest": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.5.0.tgz", + "integrity": "sha512-lxL+Fq5/RH7inxxmfS2aZLCf8MsS+YCUBfeiNO6BWz/MmjhDGaIEA/2bzEf9q4Q0X+mtFHiinHFvQ0u+RvW/qQ==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.5.0" }, "dependencies": { - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "jest-cli": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.5.0.tgz", + "integrity": "sha512-P+Jp0SLO4KWN0cGlNtC7JV0dW1eSFR7eRpoOucP2UM0sqlzp/bVHeo71Omonvigrj9AvCKy7NtQANtqJ7FXz8g==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "@jest/core": "^24.5.0", + "@jest/test-result": "^24.5.0", + "@jest/types": "^24.5.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.5.0", + "jest-util": "^24.5.0", + "jest-validate": "^24.5.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^12.0.2" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "jest-changed-files": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.5.0.tgz", + "integrity": "sha512-Ikl29dosYnTsH9pYa1Tv9POkILBhN/TLZ37xbzgNsZ1D2+2n+8oEZS2yP1BrHn/T4Rs4Ggwwbp/x8CKOS5YJOg==", + "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@jest/types": "^24.5.0", + "execa": "^1.0.0", + "throat": "^4.0.0" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "jest-config": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.5.0.tgz", + "integrity": "sha512-t2UTh0Z2uZhGBNVseF8wA2DS2SuBiLOL6qpLq18+OZGfFUxTM7BzUVKyHFN/vuN+s/aslY1COW95j1Rw81huOQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.5.0", + "babel-jest": "^24.5.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.5.0", + "jest-environment-node": "^24.5.0", + "jest-get-type": "^24.3.0", + "jest-jasmine2": "^24.5.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.5.0", + "jest-util": "^24.5.0", + "jest-validate": "^24.5.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.5.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.5.0.tgz", + "integrity": "sha512-mCILZd9r7zqL9Uh6yNoXjwGQx0/J43OD2vvWVKwOEOLZliQOsojXwqboubAQ+Tszrb6DHGmNU7m4whGeB9YOqw==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.3.0", + "jest-get-type": "^24.3.0", + "pretty-format": "^24.5.0" + } + }, + "jest-docblock": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", + "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.5.0.tgz", + "integrity": "sha512-6gy3Kh37PwIT5sNvNY2VchtIFOOBh8UCYnBlxXMb5sr5wpJUDPTUATX2Axq1Vfk+HWTMpsYPeVYp4TXx5uqUBw==", + "dev": true, + "requires": { + "@jest/types": "^24.5.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.3.0", + "jest-util": "^24.5.0", + "pretty-format": "^24.5.0" + } + }, + "jest-environment-jsdom": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.5.0.tgz", + "integrity": "sha512-62Ih5HbdAWcsqBx2ktUnor/mABBo1U111AvZWcLKeWN/n/gc5ZvDBKe4Og44fQdHKiXClrNGC6G0mBo6wrPeGQ==", + "dev": true, + "requires": { + "@jest/environment": "^24.5.0", + "@jest/fake-timers": "^24.5.0", + "@jest/types": "^24.5.0", + "jest-mock": "^24.5.0", + "jest-util": "^24.5.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.5.0.tgz", + "integrity": "sha512-du6FuyWr/GbKLsmAbzNF9mpr2Iu2zWSaq/BNHzX+vgOcts9f2ayXBweS7RAhr+6bLp6qRpMB6utAMF5Ygktxnw==", + "dev": true, + "requires": { + "@jest/environment": "^24.5.0", + "@jest/fake-timers": "^24.5.0", + "@jest/types": "^24.5.0", + "jest-mock": "^24.5.0", + "jest-util": "^24.5.0" + } + }, + "jest-get-type": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.3.0.tgz", + "integrity": "sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow==", "dev": true }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "jest-haste-map": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.5.0.tgz", + "integrity": "sha512-mb4Yrcjw9vBgSvobDwH8QUovxApdimGcOkp+V1ucGGw4Uvr3VzZQBJhNm1UY3dXYm4XXyTW2G7IBEZ9pM2ggRQ==", + "dev": true, + "requires": { + "@jest/types": "^24.5.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.4.0", + "jest-util": "^24.5.0", + "jest-worker": "^24.4.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3" + } + }, + "jest-jasmine2": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.5.0.tgz", + "integrity": "sha512-sfVrxVcx1rNUbBeyIyhkqZ4q+seNKyAG6iM0S2TYBdQsXjoFDdqWFfsUxb6uXSsbimbXX/NMkJIwUZ1uT9+/Aw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.5.0", + "@jest/test-result": "^24.5.0", + "@jest/types": "^24.5.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.5.0", + "jest-matcher-utils": "^24.5.0", + "jest-message-util": "^24.5.0", + "jest-runtime": "^24.5.0", + "jest-snapshot": "^24.5.0", + "jest-util": "^24.5.0", + "pretty-format": "^24.5.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.5.0.tgz", + "integrity": "sha512-LZKBjGovFRx3cRBkqmIg+BZnxbrLqhQl09IziMk3oeh1OV81Hg30RUIx885mq8qBv1PA0comB9bjKcuyNO1bCQ==", + "dev": true, + "requires": { + "pretty-format": "^24.5.0" + } + }, + "jest-matcher-utils": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.5.0.tgz", + "integrity": "sha512-QM1nmLROjLj8GMGzg5VBra3I9hLpjMPtF1YqzQS3rvWn2ltGZLrGAO1KQ9zUCVi5aCvrkbS5Ndm2evIP9yZg1Q==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.5.0", + "jest-get-type": "^24.3.0", + "pretty-format": "^24.5.0" + } + }, + "jest-message-util": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.5.0.tgz", + "integrity": "sha512-6ZYgdOojowCGiV0D8WdgctZEAe+EcFU+KrVds+0ZjvpZurUW2/oKJGltJ6FWY2joZwYXN5VL36GPV6pNVRqRnQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.5.0", + "@jest/types": "^24.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.5.0.tgz", + "integrity": "sha512-ZnAtkWrKf48eERgAOiUxVoFavVBziO2pAi2MfZ1+bGXVkDfxWLxU0//oJBkgwbsv6OAmuLBz4XFFqvCFMqnGUw==", + "dev": true, + "requires": { + "@jest/types": "^24.5.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", "dev": true }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "jest-regex-util": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", + "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "jest-resolve": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.5.0.tgz", + "integrity": "sha512-ZIfGqLX1Rg8xJpQqNjdoO8MuxHV1q/i2OO1hLXjgCWFWs5bsedS8UrOdgjUqqNae6DXA+pCyRmdcB7lQEEbXew==", "dev": true, "requires": { - "chalk": "^2.0.1" + "@jest/types": "^24.5.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" } }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "jest-resolve-dependencies": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.5.0.tgz", + "integrity": "sha512-dRVM1D+gWrFfrq2vlL5P9P/i8kB4BOYqYf3S7xczZ+A6PC3SgXYSErX/ScW/469pWMboM1uAhgLF+39nXlirCQ==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "@jest/types": "^24.5.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.5.0" + } + }, + "jest-runner": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.5.0.tgz", + "integrity": "sha512-oqsiS9TkIZV5dVkD+GmbNfWBRPIvxqmlTQ+AQUJUQ07n+4xTSDc40r+aKBynHw9/tLzafC00DIbJjB2cOZdvMA==", + "dev": true, + "requires": { + "@jest/console": "^24.3.0", + "@jest/environment": "^24.5.0", + "@jest/test-result": "^24.5.0", + "@jest/types": "^24.5.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.5.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.5.0", + "jest-jasmine2": "^24.5.0", + "jest-leak-detector": "^24.5.0", + "jest-message-util": "^24.5.0", + "jest-resolve": "^24.5.0", + "jest-runtime": "^24.5.0", + "jest-util": "^24.5.0", + "jest-worker": "^24.4.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.5.0.tgz", + "integrity": "sha512-GTFHzfLdwpaeoDPilNpBrorlPoNZuZrwKKzKJs09vWwHo+9TOsIIuszK8cWOuKC7ss07aN1922Ge8fsGdsqCuw==", + "dev": true, + "requires": { + "@jest/console": "^24.3.0", + "@jest/environment": "^24.5.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.5.0", + "@jest/types": "^24.5.0", + "@types/yargs": "^12.0.2", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.5.0", + "jest-haste-map": "^24.5.0", + "jest-message-util": "^24.5.0", + "jest-mock": "^24.5.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.5.0", + "jest-snapshot": "^24.5.0", + "jest-util": "^24.5.0", + "jest-validate": "^24.5.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^12.0.2" }, "dependencies": { "ansi-regex": { @@ -1941,6 +4580,18 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -1960,620 +4611,4675 @@ "ansi-regex": "^3.0.0" } }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "jest-serializer": { + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", + "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", "dev": true }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "jest-snapshot": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.5.0.tgz", + "integrity": "sha512-eBEeJb5ROk0NcpodmSKnCVgMOo+Qsu5z9EDl3tGffwPzK1yV37mjGWF2YeIz1NkntgTzP+fUL4s09a0+0dpVWA==", + "dev": true, "requires": { - "p-defer": "^1.0.0" + "@babel/types": "^7.0.0", + "@jest/types": "^24.5.0", + "chalk": "^2.0.1", + "expect": "^24.5.0", + "jest-diff": "^24.5.0", + "jest-matcher-utils": "^24.5.0", + "jest-message-util": "^24.5.0", + "jest-resolve": "^24.5.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.5.0", + "semver": "^5.5.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "jest-util": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.5.0.tgz", + "integrity": "sha512-Xy8JsD0jvBz85K7VsTIQDuY44s+hYJyppAhcsHsOsGisVtdhar6fajf2UOf2mEVEgh15ZSdA0zkCuheN8cbr1Q==", "dev": true, "requires": { - "object-visit": "^1.0.0" + "@jest/console": "^24.3.0", + "@jest/fake-timers": "^24.5.0", + "@jest/source-map": "^24.3.0", + "@jest/test-result": "^24.5.0", + "@jest/types": "^24.5.0", + "@types/node": "*", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "matcher": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", - "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "jest-validate": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.5.0.tgz", + "integrity": "sha512-gg0dYszxjgK2o11unSIJhkOFZqNRQbWOAB2/LOUdsd2LfD9oXiMeuee8XsT0iRy5EvSccBgB4h/9HRbIo3MHgQ==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.4" + "@jest/types": "^24.5.0", + "camelcase": "^5.0.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.3.0", + "leven": "^2.1.0", + "pretty-format": "^24.5.0" } }, - "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "jest-watcher": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.5.0.tgz", + "integrity": "sha512-/hCpgR6bg0nKvD3nv4KasdTxuhwfViVMHUATJlnGCD0r1QrmIssimPbmc5KfAQblAVxkD8xrzuij9vfPUk1/rA==", + "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" + "@jest/test-result": "^24.5.0", + "@jest/types": "^24.5.0", + "@types/node": "*", + "@types/yargs": "^12.0.9", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.5.0", + "string-length": "^2.0.0" } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "jest-worker": { + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.4.0.tgz", + "integrity": "sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ==", "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" + "@types/node": "*", + "merge-stream": "^1.0.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true } } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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" - } + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", "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" + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "which": "^1.2.10" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" + "graceful-fs": "^4.1.6" } }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "kleur": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.2.tgz", + "integrity": "sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "colornames": "^1.1.1" } }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "requires": { - "isobject": "^3.0.0" + "invert-kv": "^2.0.0" } }, - "object.pick": { + "left-pad": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "lint-staged": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", + "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^5.0.2", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "del": "^3.0.0", + "execa": "^1.0.0", + "find-parent-dir": "^0.3.0", + "g-status": "^2.0.2", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "listr": "^0.14.2", + "listr-update-renderer": "^0.5.0", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", + "staged-git-files": "1.1.2", + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2", + "yup": "^0.26.10" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "dependencies": { + "p-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", + "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", + "dev": true + } } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "dev": true, "requires": { - "p-try": "^2.0.0" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + } } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "dev": true, "requires": { - "p-limit": "^2.0.0" + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + }, + "dependencies": { + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + } } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } }, - "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "callsites": "^3.0.0" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" }, "dependencies": { - "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true } } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "lodash.sumby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.sumby/-/lodash.sumby-4.6.0.tgz", + "integrity": "sha1-fYdzfdshbaL35efNLdnEA6eIc0Y=", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "pinkie": "^2.0.0" + "chalk": "^2.0.1" } }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", "dev": true, "requires": { - "find-up": "^3.0.0" + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } } }, - "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + } + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "semver-compare": "^1.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "magic-string": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", + "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", "dev": true }, - "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.4" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", "dev": true }, - "property-expr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", - "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "maxmin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", + "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^3.0.0", + "pretty-bytes": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dev": true, + "requires": { + "duplexer": "^0.1.1" + } + }, + "pretty-bytes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + } } }, - "punycode": { + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true + }, + "mem": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "microbundle": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/microbundle/-/microbundle-0.11.0.tgz", + "integrity": "sha512-Lt2f8OhC2y2uKyJ5zA8lEEiDsIAbk6yllBuoAWLIdYVIXYqOdN9mO3DI7VW7x/fw87gdnCLIJdVtpP6kaI99LA==", + "dev": true, + "requires": { + "@babel/core": "^7.2.2", + "@babel/plugin-proposal-class-properties": "7.2.1", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@babel/polyfill": "^7.0.0", + "asyncro": "^3.0.0", + "autoprefixer": "^9.0.0", + "babel-plugin-transform-async-to-promises": "^0.8.3", + "brotli-size": "^0.0.3", + "camelcase": "^5.0.0", + "chalk": "^2.4.0", + "cssnano": "^4.1.7", + "es6-promisify": "^6.0.1", + "gzip-size": "^5.0.0", + "pretty-bytes": "^5.1.0", + "rollup": "^0.67.3", + "rollup-plugin-alias": "^1.5.1", + "rollup-plugin-babel": "^4.1.0-0", + "rollup-plugin-buble": "^0.19.4", + "rollup-plugin-bundle-size": "^1.0.1", + "rollup-plugin-commonjs": "^9.0.0", + "rollup-plugin-es3": "^1.1.0", + "rollup-plugin-flow": "^1.1.1", + "rollup-plugin-json": "^3.1.0", + "rollup-plugin-node-resolve": "^4.0.0", + "rollup-plugin-postcss": "^1.6.1", + "rollup-plugin-preserve-shebang": "^0.1.6", + "rollup-plugin-sizes": "^0.4.2", + "rollup-plugin-terser": "^3.0.0", + "rollup-plugin-typescript2": "^0.19.0", + "sade": "^1.4.0", + "tiny-glob": "^0.2.6", + "tslib": "^1.9.0", + "typescript": ">=2.8.3" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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" + } + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "dev": true, + "requires": { + "mime-db": "~1.38.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=", + "dev": true + }, + "mri": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", + "dev": true + }, + "ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "nan": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", + "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" + "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" + } + }, + "napi-build-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", + "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-abi": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.7.1.tgz", + "integrity": "sha512-OV8Bq1OrPh6z+Y4dqwo05HqrRL9YNF7QVMRfq1/pguwKLG+q9UB/Lk0x5qXjO23JjJg+/jqCHSTaG1P3tfKfuw==", + "dev": true, + "requires": { + "semver": "^5.4.1" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", + "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.11.tgz", + "integrity": "sha512-8v1j5KfP+s5WOTa1spNUAOfreajQPN12JXbRR0oDE+YrJBQCXBnNqUDj27EKpPLOoSiU3tKi3xGPB+JaOdUEQQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "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": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "dev": true, + "requires": { + "which": "^1.2.10" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "dev": true, + "requires": { + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.1.tgz", + "integrity": "sha512-T5GaA1J/d34AC8mkrFD2O0DR17kwJ702ZOtJOsS8RpbsQZVOC2/xYFb1i/cw+xdM54JIlMuojjDOYct8GIWtwg==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-queue": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz", + "integrity": "sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng==", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + } + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "please-upgrade-node": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", + "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0", + "postcss-load-options": "^1.2.0", + "postcss-load-plugins": "^2.3.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "^2.1.1", + "object-assign": "^4.1.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-1.4.1.tgz", + "integrity": "sha512-btTrbK+Xc3NBuYF8TPBjCMRSp5h6NoQ1iVZ6WiDQENIze6KIYCSf0+UFQuV3yJ7gRHA+4AAtF8i2jRvUpbBMMg==", + "dev": true, + "requires": { + "css-modules-loader-core": "^1.1.0", + "generic-names": "^1.0.3", + "lodash.camelcase": "^4.3.0", + "postcss": "^7.0.1", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "prebuild-install": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.5.tgz", + "integrity": "sha512-6uZgMVg7yDfqlP5CPurVhtq3hUKBFNufiar4J5hZrlHTo59DDBEtyxw01xCdFss9j0Zb9+qzFVf/s4niayba3w==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.2.7", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", + "dev": true + }, + "pretty-bytes": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.1.0.tgz", + "integrity": "sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA==", + "dev": true + }, + "pretty-format": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", + "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "dev": true, + "requires": { + "@jest/types": "^24.5.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=", + "dev": true + }, + "prompts": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.3.tgz", + "integrity": "sha512-H8oWEoRZpybm6NV4to9/1limhttEo13xK62pNvn2JzY0MA03p7s0OjtmhXyon3uJmxiJJVSuUwEJFFssI3eBiQ==", + "dev": true, + "requires": { + "kleur": "^3.0.2", + "sisteransi": "^1.0.0" + } + }, + "property-expr": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", + "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", + "dev": true + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "react-is": { + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.4.tgz", + "integrity": "sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA==", + "dev": true + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", + "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.0.2", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true + }, + "reserved-words": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", + "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "0.67.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.67.4.tgz", + "integrity": "sha512-AVuP73mkb4BBMUmksQ3Jw0jTrBTU1i7rLiUYjFxLZGb3xiFmtVEg40oByphkZAsiL0bJC3hRAJUQos/e5EBd+w==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "*" + } + }, + "rollup-plugin-alias": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-alias/-/rollup-plugin-alias-1.5.1.tgz", + "integrity": "sha512-pQTYBRNfLedoVOO7AYHNegIavEIp4jKTga5jUi1r//KYgHKGWgG4qJXYhbcWKt2k1FwGlR5wCYoY+IFkme0t4A==", + "dev": true, + "requires": { + "slash": "^2.0.0" + } + }, + "rollup-plugin-babel": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz", + "integrity": "sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.3.0" + } + }, + "rollup-plugin-buble": { + "version": "0.19.6", + "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.19.6.tgz", + "integrity": "sha512-El5Fut4/wEO17ZN/n9BZvqd7DXXB2WbJr/DKvr89LXChC/cHllE0XwiUDeAalrTkgr0WrnyLDTCQvEv+cGywWQ==", + "dev": true, + "requires": { + "buble": "^0.19.6", + "rollup-pluginutils": "^2.3.3" + } + }, + "rollup-plugin-bundle-size": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz", + "integrity": "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "maxmin": "^2.1.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + } + } + }, + "rollup-plugin-commonjs": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.1.tgz", + "integrity": "sha512-X0A/Cp/t+zbONFinBhiTZrfuUaVwRIp4xsbKq/2ohA2CDULa/7ONSJTelqxon+Vds2R2t2qJTqJQucKUC8GKkw==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "magic-string": "^0.25.1", + "resolve": "^1.10.0", + "rollup-pluginutils": "^2.3.3" + }, + "dependencies": { + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + } + } + }, + "rollup-plugin-es3": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-es3/-/rollup-plugin-es3-1.1.0.tgz", + "integrity": "sha512-jTMqQgMZ/tkjRW4scf4ln5c0OiTSi+Lx/IEyFd41ldgGoLvvg9AQxmVOl93+KaoyB7XRYToYjiHDvO40NPF/fA==", + "dev": true, + "requires": { + "magic-string": "^0.22.4" + }, + "dependencies": { + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "requires": { + "vlq": "^0.2.2" + } + } + } + }, + "rollup-plugin-flow": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-flow/-/rollup-plugin-flow-1.1.1.tgz", + "integrity": "sha1-bOVo8d1Vlma3erdrS64lFAdSjbY=", + "dev": true, + "requires": { + "flow-remove-types": "^1.1.0", + "rollup-pluginutils": "^1.5.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz", + "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", + "dev": true + }, + "rollup-pluginutils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", + "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", + "dev": true, + "requires": { + "estree-walker": "^0.2.1", + "minimatch": "^3.0.2" + } + } + } + }, + "rollup-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz", + "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.3.1" + } + }, + "rollup-plugin-node-resolve": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.1.tgz", + "integrity": "sha512-fSS7YDuCe0gYqKsr5OvxMloeZYUSgN43Ypi1WeRZzQcWtHgFayV5tUSPYpxuaioIIWaBXl6NrVk0T2/sKwueLg==", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0", + "is-module": "^1.0.0", + "resolve": "^1.10.0" + } + }, + "rollup-plugin-postcss": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-1.6.3.tgz", + "integrity": "sha512-se1qftVETua9ZGViud4A4gbgEQenjYnLPvjh3kTqbBZU+f0mQ9YvJptIuzPhEk5kZAHZhkwIkk2jk+byrn1XPA==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "concat-with-sourcemaps": "^1.0.5", + "cssnano": "^3.10.0", + "fs-extra": "^5.0.0", + "import-cwd": "^2.1.0", + "p-queue": "^2.4.2", + "pify": "^3.0.0", + "postcss": "^6.0.21", + "postcss-load-config": "^1.2.0", + "postcss-modules": "^1.1.0", + "promise.series": "^0.2.0", + "reserved-words": "^0.1.2", + "resolve": "^1.5.0", + "rollup-pluginutils": "^2.0.1", + "style-inject": "^0.3.0" + }, + "dependencies": { + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "^1.1.2" + } + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "^5.0.16" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "^5.0.5" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + } + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + } + } } }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "rollup-plugin-preserve-shebang": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/rollup-plugin-preserve-shebang/-/rollup-plugin-preserve-shebang-0.1.6.tgz", + "integrity": "sha512-b+psdlXZOjmlnKmL6/YAkR8PR15VPcUNXdT35urBRJ8jE6UxHyb4HXeeN3qRZJbMJJaX1eRP72XwH6IvGFh5Jw==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "magic-string": "^0.22.4" + }, + "dependencies": { + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "requires": { + "vlq": "^0.2.2" + } + } } }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "rollup-plugin-sizes": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-sizes/-/rollup-plugin-sizes-0.4.2.tgz", + "integrity": "sha512-6VsnWb4aBPcW++3IBMNPo4NLSheoaXh+itXk1OcaolLhYemoQFb7A9hVNocwa0j2BctdmPNFcP7UJ3g///VVaA==", "dev": true, "requires": { - "path-parse": "^1.0.6" + "filesize": "^3.5.11", + "lodash.foreach": "^4.5.0", + "lodash.sumby": "^4.6.0", + "module-details-from-path": "^1.0.3" } }, - "resolve-from": { + "rollup-plugin-terser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-3.0.0.tgz", + "integrity": "sha512-Ed9zRD7OoCBnh0XGlEAJle5TCUsFXMLClwKzZWnS1zbNO4MelHjfCSdFZxCAdH70M40nhZ1nRrY2GZQJhSMcjA==", "dev": true, "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "@babel/code-frame": "^7.0.0", + "jest-worker": "^23.2.0", + "serialize-javascript": "^1.5.0", + "terser": "^3.8.2" + }, + "dependencies": { + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + } } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "rollup-plugin-typescript2": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.3.tgz", + "integrity": "sha512-lsRqfBCZhMl/tq9AT5YnQvzQWzXtnx3EQYFcHD72gul7nyyoOrzx5yCEH20smpw58v6UkHHZz03FbdLEPoHWjA==", + "dev": true, + "requires": { + "fs-extra": "7.0.1", + "resolve": "1.8.1", + "rollup-pluginutils": "2.3.3", + "tslib": "1.9.3" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + } + } + } }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "rollup-pluginutils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.5.0.tgz", + "integrity": "sha512-9Muh1H+XB5f5ONmKMayUoTYR1EZwHbwJJ9oZLrKT5yuTf/RLIQ5mYIGsrERquVucJmjmaAW0Y7+6Qo1Ep+5w3Q==", "dev": true, "requires": { - "glob": "^7.1.3" + "estree-walker": "^0.6.0", + "micromatch": "^3.1.10" } }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -2598,6 +9304,20 @@ "tslib": "^1.9.0" } }, + "sade": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.4.2.tgz", + "integrity": "sha512-MTrQm+Nhl4m1mbssYDgAculC/HbShjj08QtHnA2GTpzivfU5aUp8EoHlECmrIHEaa8hZRZSp2Gygv8VMlpXEBw==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", @@ -2613,6 +9333,37 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "sane": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.0.3.tgz", + "integrity": "sha512-hSLkC+cPHiBQs7LSyXkotC3UUtyn8C4FMn50TNaacRyvBlI+3ebcxMpqckmTdtXVtel87YS7GXN3UIOj7NiGVQ==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", @@ -2624,6 +9375,12 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, + "serialize-javascript": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -2665,11 +9422,34 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dev": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "simple-git": { "version": "1.107.0", "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz", @@ -2690,6 +9470,27 @@ } } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sisteransi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", + "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", + "dev": true + }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -2824,6 +9625,15 @@ } } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -2867,6 +9677,12 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sourcemap-codec": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", + "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", + "dev": true + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -2914,6 +9730,40 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, "staged-git-files": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", @@ -2941,12 +9791,57 @@ } } }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, "string-argv": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", "dev": true }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "string-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", @@ -2972,6 +9867,14 @@ } } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -2991,6 +9894,12 @@ "ansi-regex": "^2.0.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -3002,18 +9911,76 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", + "dev": true + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, + "svgo": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", + "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "^1.1.0", + "csso": "^3.5.1", + "js-yaml": "^3.12.0", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, "synchronous-promise": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.6.tgz", @@ -3054,18 +10021,123 @@ } } }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "test-exclude": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.1.0.tgz", + "integrity": "sha512-gwf0S2fFsANC55fSeSqpb8BYk6w3FDvwZxfNjeF6FRgvFa43r+7wRiA/Q0IxoRU37wB/LE8IQ4221BsNucTaCA==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^1.0.1" + }, + "dependencies": { + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + } + } + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tiny-glob": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.6.tgz", + "integrity": "sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw==", + "dev": true, + "requires": { + "globalyzer": "^0.1.0", + "globrex": "^0.1.1" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -3075,6 +10147,24 @@ "os-tmpdir": "~1.0.2" } }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -3123,6 +10213,70 @@ "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", "dev": true }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "ts-jest": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.0.tgz", + "integrity": "sha512-o8BO3TkMREpAATaFTrXkovMsCpBl2z4NDBoLJuWZcJJj1ijI49UnvDMfVpj+iogn/Jl8Pbhuei5nc/Ti+frEHw==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, "ts-node": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz", @@ -3151,6 +10305,21 @@ "tslib": "^1.8.1" } }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -3166,6 +10335,61 @@ "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==", "dev": true }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -3201,6 +10425,30 @@ } } }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -3262,6 +10510,27 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -3272,6 +10541,85 @@ "spdx-expression-parse": "^3.0.0" } }, + "vendors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3285,6 +10633,85 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "requires": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + } + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -3334,6 +10761,38 @@ "mkdirp": "^0.5.1" } }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", diff --git a/package.json b/package.json index 87c9fe2..8a5f00f 100644 --- a/package.json +++ b/package.json @@ -3,28 +3,40 @@ "version": "1.0.0", "private": true, "license": "Apache-2.0", + "main": "build/index.js", "scripts": { "checkFormat": "prettier --list-different '**/*.{js,jsx,ts,tsx,html,vue,css,less,scss,graphql,yaml,yml,json,md,mdx}' ", "format": "prettier --write '**/*.{js,jsx,ts,tsx,html,vue,css,less,scss,graphql,yaml,yml,json,md,mdx}' ", "lint": "eslint --ext .js,.ts .", - "build": "rm -rf build/ && tsc -b tsconfig.json", - "dev": "ts-node --files index.ts" + "test": "jest", + "build": "microbundle build --strict --target node --format cjs", + "dev": "ts-node -O '{\"module\": \"commonjs\"}' --files src/index.ts" }, "devDependencies": { "@graham42/prettier-config": "^1.3.2", + "@types/axios": "^0.14.0", + "@types/jest": "^24.0.11", "@types/node": "^11.10.5", "@types/yargs": "^12.0.9", "@typescript-eslint/eslint-plugin": "^1.4.2", "@typescript-eslint/parser": "^1.4.2", "eslint": "^5.15.1", "eslint-config-prettier": "^4.1.0", + "eslint-plugin-jest": "^22.3.2", "husky": "^1.3.1", + "jest": "^24.5.0", "lint-staged": "^8.1.5", + "microbundle": "^0.11.0", "prettier": "^1.16.4", + "ts-jest": "^24.0.0", "ts-node": "^8.0.2", "typescript": "^3.3.3333" }, "dependencies": { + "@types/execa": "^0.9.0", + "axios": "^0.18.0", + "execa": "^1.0.0", + "winston": "^3.2.1", "yargs": "^13.2.2" }, "husky": { diff --git a/src/__mocks__/axios.ts b/src/__mocks__/axios.ts new file mode 100644 index 0000000..06b5bc4 --- /dev/null +++ b/src/__mocks__/axios.ts @@ -0,0 +1,14 @@ +import { AxiosStatic } from "axios"; + +const mockAxios = jest.genMockFromModule("axios"); + +// This seems to result in us bypassing axios interceptor logic. But for now +// allows us to test the main functionality. +mockAxios.interceptors = mockAxios.interceptors || {}; +mockAxios.interceptors.response = mockAxios.interceptors.response || {}; +mockAxios.interceptors.response.use = jest.fn(); +mockAxios.create = () => { + return mockAxios; +}; + +export default mockAxios; diff --git a/src/__tests__/docker.spec.ts b/src/__tests__/docker.spec.ts new file mode 100644 index 0000000..356c5fe --- /dev/null +++ b/src/__tests__/docker.spec.ts @@ -0,0 +1,158 @@ +import { parseReference, rename, Image } from "../docker"; + +describe("parseReference", () => { + const testcases: { + name: string; + ref: string; + shouldThrow?: boolean; + expected?: Image; + }[] = [ + { + name: "invalid name should throw an error", + ref: "INVALID", + shouldThrow: true, + }, + { + name: "repo without registry, project, tag, or digest", + ref: "repo", + expected: { + path: "repo", + }, + }, + { + name: "repo with tag", + ref: "sample:v2", + expected: { + path: "sample", + tag: "v2", + }, + }, + { + name: "repo with tag and digest", + ref: + "sample:v2@sha256:9692a2941e5afccbd1aa4cb5c88b5154e5e9039f4e3c3e16445c060ac7f4f21d", + expected: { + path: "sample", + tag: "v2", + digest: + "sha256:9692a2941e5afccbd1aa4cb5c88b5154e5e9039f4e3c3e16445c060ac7f4f21d", + }, + }, + { + name: "no registry with project repo", + ref: "project0/sample", + expected: { + path: "project0/sample", + }, + }, + { + name: "registry FQDN with project repo", + ref: "registry.example.com/proj/sample", + expected: { + domain: "registry.example.com", + path: "proj/sample", + }, + }, + { + name: "registry local name with port and repo", + ref: "registry:5000/sample", + expected: { + domain: "registry:5000", + path: "sample", + }, + }, + { + name: "registry local name with port and project repo", + ref: "registry:5000/proj/sample", + expected: { + domain: "registry:5000", + path: "proj/sample", + }, + }, + { + name: "registry FQDN with port and project repo", + ref: "registry.example.com:5000/proj/sample", + expected: { + domain: "registry.example.com:5000", + path: "proj/sample", + }, + }, + { + name: "nested project with registry", + ref: "registry.example.com/proj/nested/sample", + expected: { + domain: "registry.example.com", + path: "proj/nested/sample", + }, + }, + { + name: "nested project without registry", + ref: "proj/nested/sample", + expected: { + path: "proj/nested/sample", + }, + }, + { + // this test originally failed (regexp had to be modified when porting from go) so keeping it forever + name: "path with hyphen and tag", + ref: + "my-project/webapp@sha256:9692a2941e5afccbd1aa4cb5c88b5154e5e9039f4e3c3e16445c060ac7f4f21d", + expected: { + path: "my-project/webapp", + digest: + "sha256:9692a2941e5afccbd1aa4cb5c88b5154e5e9039f4e3c3e16445c060ac7f4f21d", + }, + }, + ]; + + testcases.forEach(testcase => { + test(testcase.name, () => { + if (testcase.shouldThrow) { + expect(() => { + parseReference(testcase.ref); + }).toThrow(); + } else { + const actual = parseReference(testcase.ref); + + expect(actual).toEqual(testcase.expected); + } + }); + }); +}); + +describe("rename", () => { + const testcases: { + name: string; + imageName: string; + registryHost: string; + expected: string; + }[] = [ + { + name: "local registry name, image with tag", + imageName: "sample", + registryHost: "localhost", + expected: "localhost/sample:latest", + }, + { + name: "local registry name with port, image with digest", + imageName: + "sample@sha256:9692a2941e5afccbd1aa4cb5c88b5154e5e9039f4e3c3e16445c060ac7f4f21d", + registryHost: "localhost:5000", + expected: + "localhost:5000/sample@sha256:9692a2941e5afccbd1aa4cb5c88b5154e5e9039f4e3c3e16445c060ac7f4f21d", + }, + { + name: "blank registry name", + imageName: "sample", + registryHost: "", + expected: "docker.io/sample:latest", + }, + ]; + + testcases.forEach(testcase => { + test(testcase.name, () => { + const actual = rename(testcase.imageName, testcase.registryHost); + expect(actual).toEqual(testcase.expected); + }); + }); +}); diff --git a/src/__tests__/scan.spec.ts b/src/__tests__/scan.spec.ts new file mode 100644 index 0000000..ebd2b61 --- /dev/null +++ b/src/__tests__/scan.spec.ts @@ -0,0 +1,539 @@ +// mocks must happen before importing modules that use those mocks +const mockAxios: jest.Mocked = require("axios").default; + +import * as yargs from "yargs"; +import { scanCommand, calculateSmartcheckBaseURL } from "../scan"; +import { AxiosStatic } from "axios"; +import { logger } from "../logger"; + +const mockExit = jest.spyOn(process, "exit").mockImplementation(); +global.setTimeout = jest.fn().mockImplementation(cb => cb()); +jest.spyOn(logger, "info").mockImplementation(); +const mockErrorLog = jest.spyOn(logger, "error").mockImplementation(); + +const originalHandler = scanCommand.handler; +scanCommand.handler = () => {}; +// minimum required args +const defaultArgs = [ + "--image-name", + "example.com/foo-image", + "--smartcheck-host", + "test-smartcheck.example.com", + "--smartcheck-user", + "test", + "--smartcheck-password", + "test", +]; + +describe("calculateSmartcheckBaseURL", () => { + const testcases: { + name: string; + host: string; + expected: string; + }[] = [ + { + name: "bare FQDN gets scheme added", + host: "smartcheck.example.com", + expected: "https://smartcheck.example.com/", + }, + { + name: "bare FQDN with port gets scheme added", + host: "smartcheck.example.com:8443", + expected: "https://smartcheck.example.com:8443/", + }, + { + name: "bare local name gets scheme added", + host: "smartcheck", + expected: "https://smartcheck/", + }, + { + name: "bare local name with port gets scheme added", + host: "smartcheck:8443", + expected: "https://smartcheck:8443/", + }, + { + name: "scheme gets respected", + host: "http://smartcheck.example.com", + expected: "http://smartcheck.example.com/", + }, + ]; + + testcases.forEach(testcase => { + test(testcase.name, () => { + const actual = calculateSmartcheckBaseURL(testcase.host).toString(); + expect(actual).toEqual(testcase.expected); + }); + }); +}); + +describe("scan command", () => { + beforeEach(() => { + yargs.reset(); + mockAxios.post.mockReset(); + mockAxios.get.mockReset(); + mockErrorLog.mockClear(); + }); + + describe("input validation tests", () => { + const dataSet: { + parameters: { [x: string]: string }; + expected?: { [x: string]: any }; + shouldThrow: boolean; + }[] = [ + { + parameters: { "--image-pull-auth": "" }, + shouldThrow: false, + }, + { + parameters: { "--image-pull-auth": "{" }, + shouldThrow: true, + }, + { + parameters: { "--image-pull-auth": "{}" }, + expected: { "--image-pull-auth": {} }, + shouldThrow: false, + }, + { + parameters: { "--findings-threshold": "{" }, + shouldThrow: true, + }, + { + parameters: { "--findings-threshold": "{}" }, + expected: { "--findings-threshold": {} }, + shouldThrow: false, + }, + ]; + dataSet.forEach(testData => { + test(`should${ + testData.shouldThrow ? "" : " not" + } throw for ${JSON.stringify(testData.parameters)}`, () => { + let results: any; + yargs.command(scanCommand).parse( + Object.entries({ + "--image-name": "example.com/foo-image", + "--smartcheck-host": "test-smartcheck.example.com", + "--smartcheck-user": "test", + "--smartcheck-password": "test", + ...testData.parameters, + }).reduce( + (result: string[], entry: string[]) => result.concat(entry), + [], + ), + {}, + (err, argv, output) => { + // jest / ts-jest doesn't do well with assertions in callbacks + results = { err, argv, output }; + }, + ); + if (testData.shouldThrow) { + expect(results.err.message).toMatch( + /Unexpected format|Failed to parse JSON/, + ); + } else { + expect(results.err).toBeNull(); + Object.entries(testData.parameters).forEach(([param, value]) => { + if (testData.expected && testData.expected[param]) { + expect(results.argv[param.replace(/^--/, "")]).toEqual( + testData.expected[param], + ); + } else { + expect(results.argv[param.replace(/^--/, "")]).toEqual(value); + } + }); + } + }); + }); + }); + + describe("findings threshold input validation", () => { + const thresholdData: { + threshold: any; + shouldThrow: boolean; + }[] = [ + { + threshold: 1, + shouldThrow: true, + }, + { + threshold: { vulnerabilities: 1 }, + shouldThrow: true, + }, + { + threshold: { vulnerabilities: 0 }, + shouldThrow: true, + }, + { + threshold: { malware: false }, + shouldThrow: true, + }, + { + threshold: { contents: null }, + shouldThrow: true, + }, + { + threshold: { badStuff: 1 }, + shouldThrow: true, + }, + { + threshold: { malware: 1 }, + shouldThrow: false, + }, + { + threshold: { vulnerabilities: { critical: 1 } }, + shouldThrow: false, + }, + { + threshold: { contents: { critical: 1 } }, + shouldThrow: false, + }, + { + threshold: { contents: { extraSevere: 1 } }, + shouldThrow: true, + }, + { + threshold: { checklists: { medium: 1 } }, + shouldThrow: false, + }, + ]; + thresholdData.forEach(testData => { + test(`should${ + testData.shouldThrow ? "" : " not" + } throw for ${JSON.stringify(testData.threshold)}`, () => { + const buff = new Buffer(JSON.stringify(testData.threshold)); + const base64data = buff.toString("base64"); + let results: any; + yargs + .command(scanCommand) + .parse( + [ + "--image-name", + "example.com/foo-image", + "--smartcheck-host", + "test-smartcheck.example.com", + "--smartcheck-user", + "test", + "--smartcheck-password", + "test", + "--findings-threshold", + `base64:${base64data}`, + ], + {}, + (err, argv, output) => { + // jest / ts-jest doesn't do well with assertions in callbacks + results = { err, argv, output }; + }, + ); + if (testData.shouldThrow) { + expect(results.err.message).toEqual( + expect.stringContaining("Unexpected format"), + ); + } else { + expect(results.err).toBeNull(); + expect(results.argv.findingsThreshold).toEqual(testData.threshold); + } + }); + }); + }); + + describe("login tests", () => { + beforeEach(() => { + mockErrorLog.mockClear(); + mockExit.mockClear(); + }); + test("should error if unauthorized", async () => { + // login + mockAxios.post.mockImplementationOnce(async (...args) => ({ + status: 401, + data: {}, + headers: {}, + config: {}, + statusText: "", + })); + await originalHandler(yargs.command(scanCommand).parse(defaultArgs)); + expect(mockExit).toHaveBeenCalledTimes(1); + expect(mockExit).toHaveBeenCalledWith(1); + expect(mockErrorLog).toHaveBeenCalledWith( + expect.stringMatching(/Failed to login/), + ); + }); + }); + + describe("image name parsing tests", () => { + beforeEach(() => { + // login + mockAxios.post.mockImplementationOnce(async (...args) => ({ + status: 200, + data: {}, + headers: {}, + config: {}, + statusText: "ok", + })); + }); + const imageNameTestData: { + imageName: string; + expectedImage: { + registry?: string; + repository?: string; + tag?: string; + digest?: string; + }; + }[] = [ + { + imageName: "sample:v2", + expectedImage: { + registry: "docker.io", + repository: "sample", + tag: "v2", + }, + }, + { + imageName: "project0/sample", + expectedImage: { + registry: "docker.io", + repository: "project0/sample", + tag: "latest", + }, + }, + { + imageName: "registry.example.com/proj/sample", + expectedImage: { + registry: "registry.example.com", + repository: "proj/sample", + tag: "latest", + }, + }, + { + imageName: "registry.example.com/sample", + expectedImage: { + registry: "registry.example.com", + repository: "sample", + tag: "latest", + }, + }, + { + imageName: "registry:5000/sample", + expectedImage: { + registry: "registry:5000", + repository: "sample", + tag: "latest", + }, + }, + { + imageName: "registry.example.com:5000/proj/sample", + expectedImage: { + registry: "registry.example.com:5000", + repository: "proj/sample", + tag: "latest", + }, + }, + { + imageName: "registry.example.com/proj/nested/sample", + expectedImage: { + registry: "registry.example.com", + repository: "proj/nested/sample", + tag: "latest", + }, + }, + { + imageName: + "my-project/webapp@sha256:9692a2941e5afccbd1aa4cb5c88b5154e5e9039f4e3c3e16445c060ac7f4f21d", + expectedImage: { + registry: "docker.io", + repository: "my-project/webapp", + digest: + "sha256:9692a2941e5afccbd1aa4cb5c88b5154e5e9039f4e3c3e16445c060ac7f4f21d", + }, + }, + ]; + imageNameTestData.forEach(testData => { + test(`test parsing ${testData.imageName}`, async () => { + const argv = yargs + .command(scanCommand) + .parse([ + "--image-name", + testData.imageName, + "--smartcheck-host", + "test-smartcheck.example.com", + "--smartcheck-user", + "test", + "--smartcheck-password", + "test", + ]); + + let requestData: any; + // create scan + mockAxios.post.mockImplementationOnce(async (path, data) => { + requestData = data; + return { + status: 200, + data: { status: "completed" }, + headers: {}, + config: {}, + statusText: "ok", + }; + }); + + await originalHandler(argv); + expect(requestData.source).toEqual({ + ...testData.expectedImage, + type: "docker", + }); + }); + }); + }); + + describe("findings tests", () => { + let stdoutMock = jest + .spyOn(process.stdout, "write") + .mockImplementation((val, enc, cb) => cb && cb()); + beforeEach(() => { + // login + mockAxios.post.mockImplementationOnce(async (...args) => ({ + status: 200, + data: {}, + headers: {}, + config: {}, + statusText: "ok", + })); + // create scan + mockAxios.post.mockImplementationOnce(async (...args) => ({ + status: 200, + data: { + id: "1234", + status: "pending", + }, + headers: {}, + config: {}, + statusText: "ok", + })); + + mockExit.mockClear(); + stdoutMock.mockClear(); + }); + + const findingsTestData: { + findings: SmartCheck.ResultsMetrics; + exitCode: number; + args?: string[]; + testName?: string; + }[] = [ + { findings: {}, exitCode: 0 }, + { findings: { malware: 1 }, exitCode: 2 }, + { + findings: { + vulnerabilities: { + unresolved: { defcon1: 1 }, + }, + }, + exitCode: 2, + }, + { + findings: { + vulnerabilities: { + unresolved: { critical: 1 }, + }, + }, + exitCode: 2, + }, + { + findings: { + contents: { + unresolved: { + defcon1: 1, + }, + }, + }, + exitCode: 2, + }, + { + testName: "findings at threshold limit should be ok", + findings: { + vulnerabilities: { + unresolved: { critical: 7 }, + }, + }, + exitCode: 0, + args: [ + "--findings-threshold", + JSON.stringify({ vulnerabilities: { critical: 7 } }), + ], + }, + { + testName: "findings past threshold limit should fail", + findings: { + vulnerabilities: { + unresolved: { critical: 8 }, + }, + }, + exitCode: 2, + args: [ + "--findings-threshold", + JSON.stringify({ vulnerabilities: { critical: 7 } }), + ], + }, + { + testName: "checklist findings at threshold should be ok", + findings: { + checklists: { + unresolved: { + critical: 1, + }, + }, + }, + exitCode: 0, + args: [ + "--findings-threshold", + JSON.stringify({ checklists: { critical: 1 } }), + ], + }, + { + testName: "checklist findings above threshold should fail", + findings: { + checklists: { + unresolved: { + critical: 1, + }, + }, + }, + exitCode: 2, + args: [ + "--findings-threshold", + JSON.stringify({ checklists: { critical: 0 } }), + ], + }, + ]; + + findingsTestData.forEach(testData => { + it( + testData.testName || + `should exit with ${testData.exitCode} for findings: ${JSON.stringify( + testData.findings, + )}`, + async () => { + // fetch scan` + const scanData = { + id: "1234", + status: "completed", + findings: testData.findings, + }; + mockAxios.get.mockImplementationOnce(async (...args) => ({ + status: 200, + data: scanData, + headers: {}, + config: {}, + statusText: "ok", + })); + + await originalHandler( + yargs + .command(scanCommand) + .parse([...defaultArgs, ...(testData.args || [])]), + ); + expect(mockExit).toHaveBeenCalledTimes(1); + expect(mockExit).toHaveBeenCalledWith(testData.exitCode); + expect(JSON.parse(stdoutMock.mock.calls[0][0])).toEqual(scanData); + }, + ); + }); + }); // end findings suite +}); diff --git a/src/docker.ts b/src/docker.ts new file mode 100644 index 0000000..2d64605 --- /dev/null +++ b/src/docker.ts @@ -0,0 +1,130 @@ +import * as execa_ from "execa"; +const execa = execa_; // https://github.com/jvandemo/generator-angular2-library/issues/221#issuecomment-355945207 + +import { logger } from "./logger"; + +// TODO make this configurable? +const COMMAND_TIMEOUT_MS = 5 * 60 * 1000; + +export interface Image { + domain?: string; + path: string; + tag?: string; + digest?: string; +} + +// based on github.com/docker/distribution/reference, but with a twist +export function parseReference(ref: string) { + const referenceRegexp = /^((?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:(?:\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))+)?(?::[0-9]+)?\/)?[a-z0-9]+(?:(?:(?:[._]|__|[-]*)[a-z0-9]+)+)?(?:(?:\/[a-z0-9]+(?:(?:(?:[._]|__|[-]*)[a-z0-9]+)+)?)+)?)(?::([\w][\w.-]{0,127}))?(?:@([A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][0-9a-fA-F]{32,}))?$/; + + const anchoredNameRegexp = /^(?:((?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:(?:\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))+)?(?::[0-9]+)?)\/)?([a-z0-9]+(?:(?:(?:[._]|__|[-]*)[a-z0-9]+)+)?(?:(?:\/[a-z0-9]+(?:(?:(?:[._]|__|[-]*)[a-z0-9]+)+)?)+)?)$/; + + const result = referenceRegexp.exec(ref); + + if (result === null) { + throw new Error("Could not parse image name " + ref); + } + + const namePart = result[1]; + const tag = result[2]; + const digest = result[3]; + + let domain; + let path; + + const nameResult = anchoredNameRegexp.exec(namePart); + + // This next match is a heuristic not found in the docker distribution; it says + // that if there's a period or colon in the first part of the name, then that part + // is probably the domain. This forces `library/postgres` to be parsed as + // `{ domain: undefined, path: 'library/postgres' }` and `localhost:5000/postgres` + // to be parsed as `{ domain: 'localhost:5000', path: 'postgres' }`, which seems + // to be preferable to the alternatives. + if (nameResult !== null && /[.:]/.exec(nameResult[1])) { + domain = nameResult[1]; + path = nameResult[2]; + } else { + path = namePart; + } + + return { + domain, + path, + tag, + digest, + }; +} + +function referenceToString(image: Image): string { + let fullName = image.domain || "docker.io"; + + fullName += "/" + image.path; + + if (image.tag) { + fullName += ":" + image.tag; + } + + if (image.digest) { + fullName += "@" + image.digest; + } + + return fullName; +} + +export function rename(imageName: string, registryHost: string): string { + const image = parseReference(imageName); + + const newImage: Image = { + domain: registryHost, + path: image.path, + tag: image.tag, + digest: image.digest, + }; + + if (!newImage.tag && !newImage.digest) { + newImage.tag = "latest"; + } + + return referenceToString(newImage); +} + +async function run( + cmd: string, + args: ReadonlyArray, + options?: execa_.Options, // see workaround in imports +) { + try { + logger.info(`+ ${cmd} ${args.join(" ")}`); + const { stdout } = await execa(cmd, args, { + timeout: COMMAND_TIMEOUT_MS, + ...options, + }); + logger.info(`< ${stdout}`); + } catch (error) { + if (error.timedOut) { + logger.error(`< ${error.message.trim()}: timed out`); + process.exit(1); + } + + logger.error(`< ${error.message.trim()}`); + process.exit(error.code); + } +} + +export async function login(host: string, username: string, password: string) { + return run( + "docker", + ["login", host, "--username", username, "--password-stdin"], + { + input: password, + }, + ); +} + +export async function tag(fromImageName: string, toImageName: string) { + return run("docker", ["tag", fromImageName, toImageName]); +} + +export async function push(imageName: string) { + return run("docker", ["push", imageName]); +} diff --git a/src/hello.ts b/src/hello.ts deleted file mode 100644 index 5d98fff..0000000 --- a/src/hello.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { CommandModule } from "yargs"; - -export const helloCommand: CommandModule = { - command: "hello ", - builder: yargs => - yargs.positional("name", { - describe: "Who to say hi to", - }), - handler: args => { - console.log(`hello ${args.name}`); - }, -}; diff --git a/index.ts b/src/index.ts similarity index 52% rename from index.ts rename to src/index.ts index e6abb10..3e286c4 100644 --- a/index.ts +++ b/src/index.ts @@ -1,8 +1,8 @@ import * as yargs from "yargs"; -import { helloCommand } from "./src/hello"; +import { scanCommand } from "./scan"; yargs - .command(helloCommand) + .command(scanCommand) .demandCommand() .help().argv; diff --git a/src/logger.ts b/src/logger.ts new file mode 100644 index 0000000..0244423 --- /dev/null +++ b/src/logger.ts @@ -0,0 +1,23 @@ +import * as winston from "winston"; + +export const logger = winston.createLogger({ + level: "info", + format: winston.format.combine( + // allows interpolation + winston.format.splat(), + winston.format.simple(), + ), + transports: [ + new winston.transports.Console({ + // send everything to stderr so that result output doesn't conflict with + // status messages. + stderrLevels: ["error", "warn", "info", "verbose", "debug", "silly"], + }), + ], +}); + +export async function writeToStdout(out: string) { + return new Promise(resolve => { + process.stdout.write(out, "utf8", resolve); + }); +} diff --git a/src/scan.ts b/src/scan.ts new file mode 100644 index 0000000..a553117 --- /dev/null +++ b/src/scan.ts @@ -0,0 +1,512 @@ +import * as https from "https"; +import * as fs from "fs"; +import { URL } from "url"; + +import { CommandModule, Argv } from "yargs"; +import { default as axios } from "axios"; + +import * as pkg from "../package.json"; + +import * as docker from "./docker"; +import { logger, writeToStdout } from "./logger"; + +const USER_AGENT = `deepsecurity/smartcheck-scan-action v${pkg.version}`; + +export interface ScanCommandArgs { + "smartcheck-host": string; + "smartcheck-user": string; + "smartcheck-password": string; + "results-file"?: string; + "image-name": string; + "image-pull-auth"?: SmartCheck.Credentials; + "findings-threshold": FindingsThreshold; + "insecure-skip-tls-verify"?: boolean; + "insecure-skip-registry-tls-verify"?: boolean; + "preregistry-scan": boolean; + "preregistry-host"?: string; + "preregistry-user"?: string; + "preregistry-password"?: string; +} + +interface SeverityCounts { + defcon1?: number; + critical?: number; + high?: number; + medium?: number; + low?: number; + negligible?: number; + unknown?: number; +} + +const SEVERITIES: (keyof SeverityCounts)[] = [ + "defcon1", + "critical", + "high", + "medium", + "low", + "negligible", + "unknown", +]; + +interface FindingsThreshold { + malware?: number; + contents?: SeverityCounts; + vulnerabilities?: SeverityCounts; + checklists?: SeverityCounts; +} + +const THRESHOLD_KEYS: (keyof FindingsThreshold)[] = [ + "malware", + "contents", + "vulnerabilities", + "checklists", +]; + +function isObjectOnlyWithKeys(obj: any, validKeys: string[]): boolean { + if (typeof obj !== "object") { + return false; + } + let keys; + try { + keys = Object.keys(obj); + } catch (err) { + return false; + } + const invalidKeys = keys.filter(key => validKeys.indexOf(key) === -1); + if (invalidKeys.length > 0) { + return false; + } + return true; +} + +function isFindingsThreshold(obj: any): obj is FindingsThreshold { + return ( + isObjectOnlyWithKeys(obj, THRESHOLD_KEYS) && + // malware + (obj.malware === undefined || typeof obj.malware === "number") && + // contents + (obj.contents === undefined || + (isObjectOnlyWithKeys(obj.contents, SEVERITIES) && + Object.keys(obj.contents).every( + k => typeof obj.contents[k] === "number", + ))) && + // vulnerabilities + (obj.vulnerabilities === undefined || + (isObjectOnlyWithKeys(obj.vulnerabilities, SEVERITIES) && + Object.keys(obj.vulnerabilities).every( + k => typeof obj.vulnerabilities[k] === "number", + ))) && + // checklists + (obj.checklists === undefined || + (isObjectOnlyWithKeys(obj.checklists, SEVERITIES) && + Object.keys(obj.checklists).every( + k => typeof obj.checklists[k] === "number", + ))) + ); +} + +function sleep(milliseconds: number): Promise { + return new Promise(resolve => { + setTimeout(() => { + resolve(); + }, milliseconds); + }); +} + +function scanIsRunning(scan: SmartCheck.Scan): boolean { + return ( + !scan.status || scan.status === "in-progress" || scan.status === "pending" + ); +} + +function parseDockerImageName(imageName: string) { + const parseResult = docker.parseReference(imageName); + const result: Partial = { + registry: parseResult.domain || "docker.io", + repository: parseResult.path, + tag: parseResult.tag, + digest: parseResult.digest, + }; + if (!result.tag && !result.digest) { + result.tag = "latest"; + } + return result; +} + +function doFindingsExceedThreshold( + { findings }: SmartCheck.Scan, + threshold: FindingsThreshold, +) { + const gt = (a = 0, b = Infinity) => a > b; + let malwareOver: boolean = false; + let vulnerabilitiesOver: boolean = false; + let contentOver: boolean = false; + let checklistOver: boolean = false; + if (findings) { + malwareOver = gt(findings.malware, threshold.malware); + if (malwareOver) { + logger.info(`Malware found: ${findings.malware}`); + } + if ( + findings.contents && + threshold.contents && + findings.contents.unresolved + ) { + // Typescript flow analysis does not cross function boundaries, so we + // can't directly use findings.contents.unresolved without doing an extra + // undefined check inside 'map' which would happen every iteration + const contentsFindings = findings.contents.unresolved; + const contentsThreshold = threshold.contents; + contentOver = Object.keys(contentsThreshold) + .map((severity: keyof SeverityCounts) => + gt(contentsFindings[severity], contentsThreshold[severity]), + ) + .some(x => x); + if (contentOver) { + logger.info( + "Content findings exceeded threshold %o", + findings.contents.unresolved, + ); + } + } + if ( + findings.vulnerabilities && + threshold.vulnerabilities && + findings.vulnerabilities.unresolved + ) { + const vulnerabilityFindings = findings.vulnerabilities.unresolved; + const vulnerabilityThreshold = threshold.vulnerabilities; + vulnerabilitiesOver = Object.keys(vulnerabilityThreshold) + .map((severity: keyof SeverityCounts) => + gt(vulnerabilityFindings[severity], vulnerabilityThreshold[severity]), + ) + .some(x => x); + if (vulnerabilitiesOver) { + logger.info( + "Vulnerabilities exceeded threshold %o", + findings.vulnerabilities.unresolved, + ); + } + } + if ( + findings.checklists && + threshold.checklists && + findings.checklists.unresolved + ) { + const checklistFindings = findings.checklists.unresolved; + const checklistThreshold = threshold.checklists; + checklistOver = Object.keys(checklistThreshold) + .map((severity: keyof SeverityCounts) => + gt(checklistFindings[severity], checklistThreshold[severity]), + ) + .some(x => x); + if (checklistOver) { + logger.info( + "Checklist findings exceeded threshold %o", + findings.checklists.unresolved, + ); + } + } + } + return malwareOver || vulnerabilitiesOver || contentOver || checklistOver; +} + +export function calculateSmartcheckBaseURL(smartcheckHost: string): URL { + try { + const smartcheckURL = new URL(smartcheckHost); + // domain name with port number (ie. xyz:123) will not throw an error. It + // will interpret 'xyz' as the protocol, and 123 as the pathname but the + // hostname will be empty unless the host string includes '://'. So if the + // hostname is not empty, we can return the result now. + if (smartcheckURL.hostname) { + return smartcheckURL; + } + } catch (error) { + // let's try again with the scheme... + } + + return new URL("https://" + smartcheckHost); +} + +export const scanCommand: CommandModule = { + command: ["scan", "$0"], + describe: "Start a scan and wait for it to finish.", + builder: yargs => { + return yargs + .env("DSSC") + .option("results-file", { + describe: + "The path to write the scan results to. If not provided, the scan results will be written to stdout.", + type: "string", + }) + .option("image-name", { + describe: "The image to scan.", + demandOption: true, + type: "string", + }) + .option("image-pull-auth", { + describe: + "A JSON object of credentials for authenticating with the registry to pull the image from.", + coerce: opt => { + if (typeof opt !== "string" || opt.length === 0) return opt; + try { + const credentials: SmartCheck.Credentials = JSON.parse(opt); + return credentials; + } catch (err) { + throw new Error("Failed to parse JSON for image-pull-auth"); + } + }, + }) + .option("insecure-skip-registry-tls-verify", { + describe: + "If Deep Security Smart Check should ignore certificate errors from the image registry.", + type: "boolean", + }) + .option("smartcheck-host", { + describe: + "The hostname of the Deep Security Smart Check deployment. Example: smartcheck.example.com", + demandOption: true, + type: "string", + coerce: (opt: string) => { + if (opt.indexOf("/") !== -1) { + throw new Error("Invalid hostname format."); + } + return opt; + }, + }) + .option("insecure-skip-tls-verify", { + describe: + "If the client should ignore certificate errors when connecting to Deep Security Smart Check.", + type: "boolean", + }) + .option("smartcheck-user", { + demandOption: true, + description: "The userid for connecting to Deep Security Smart Check", + type: "string", + }) + .option("smartcheck-password", { + demandOption: true, + description: "The password for connecting to Deep Security Smart Check", + type: "string", + }) + .option("findings-threshold", { + description: + "A JSON object with counts as thresholds for findings. If levels are exceeded exit code will be non-zero. You can optionally pass a base64 encoded string prefixed with 'base64:'", + coerce: (opt): FindingsThreshold => { + if (typeof opt !== "string" || opt.length === 0) return opt; + if (opt.startsWith("base64:")) { + const base64Str = opt.substring("base64:".length); + const buff = new Buffer(base64Str, "base64"); + opt = buff.toString("utf8"); + } + let inputJSON: any; + try { + inputJSON = JSON.parse(opt); + } catch (err) { + throw new Error("Failed to parse JSON for findings-threshold"); + } + if (isFindingsThreshold(inputJSON)) { + return inputJSON; + } else { + throw new Error("Unexpected format given for findings-threshold"); + } + }, + default: { + malware: 0, + vulnerabilities: { + defcon1: 0, + critical: 0, + high: 0, + }, + contents: { + defcon1: 0, + critical: 0, + high: 0, + }, + checklists: { + defcon1: 0, + critical: 0, + high: 0, + }, + }, + }) + .option("preregistry-scan", { + description: + "If the image is not stored in a registry, specify `preregistry-scan=true` to push the image to a temporary registry for scanning.", + type: "boolean", + default: false, + }) + .option("preregistry-host", { + description: + "The host to push the image to prior to scanning for pre-registry scanning. This defaults to the `smartcheck-host` on port 5000.", + type: "string", + }) + .option("preregistry-user", { + description: + "The user name for pushing the image for pre-registry scanning.", + type: "string", + }) + .option("preregistry-password", { + description: + "The user name for pushing the image for pre-registry scanning.", + type: "string", + }); + }, + handler: async (args: ScanCommandArgs) => { + if (args["preregistry-scan"]) { + if (!args["preregistry-host"]) { + args["preregistry-host"] = `${ + calculateSmartcheckBaseURL(args["smartcheck-host"]).hostname + }:5000`; + } + + if (args["preregistry-user"] && args["preregistry-password"]) { + await docker.login( + args["preregistry-host"], + args["preregistry-user"], + args["preregistry-password"], + ); + } + + const preregistryImageName = docker.rename( + args["image-name"], + args["preregistry-host"], + ); + + await docker.tag(args["image-name"], preregistryImageName); + await docker.push(preregistryImageName); + + args["image-name"] = preregistryImageName; + + // TODO provide the Deep Security Smart Check certificate as the registry certificate + args["insecure-skip-registry-tls-verify"] = true; + + args["image-pull-auth"] = { + username: args["preregistry-user"], + password: args["preregistry-password"], + }; + } + + const smartcheckBaseURL = calculateSmartcheckBaseURL( + args["smartcheck-host"], + ).toString(); + + const axiosInstance = axios.create({ + httpsAgent: new https.Agent({ + // ignore https self signed certs + rejectUnauthorized: args["insecure-skip-tls-verify"] ? false : true, + }), + headers: { + "X-Api-Version": "2018-05-01", + "User-Agent": USER_AGENT, + }, + }); + axiosInstance.interceptors.response.use(undefined, error => { + logger.error(`Request failed: ${error.message}`); + process.exit(1); + }); + + // Login + logger.info("Logging in..."); + const authBody: SmartCheck.CreateSession.Parameters.Request = { + user: { + userID: args["smartcheck-user"], + password: args["smartcheck-password"], + }, + }; + const authResponse = await axiosInstance.post(`/api/sessions`, authBody, { + baseURL: smartcheckBaseURL, + }); + if (authResponse.status < 200 || authResponse.status > 299) { + logger.error("Failed to login"); + process.exit(1); + return; + } + logger.info("Logged in"); + const session: SmartCheck.Session = authResponse.data; + + const apiHeaders = { + Authorization: `Bearer ${session.token}`, + }; + + // create scan + logger.info("Creating scan..."); + const createScanBody: SmartCheck.ScanRequest = { + source: { + type: "docker", + ...parseDockerImageName(args["image-name"]), + }, + }; + if (args["insecure-skip-registry-tls-verify"]) { + createScanBody.source.insecureSkipVerify = + args["insecure-skip-registry-tls-verify"]; + } + if (args["image-pull-auth"]) { + createScanBody.source.credentials = args["image-pull-auth"]; + } + + const createScanResponse = await axiosInstance.post( + `/api/scans`, + createScanBody, + { headers: apiHeaders, baseURL: smartcheckBaseURL }, + ); + if (createScanResponse.status < 200 || createScanResponse.status > 299) { + logger.error("Failed to create scan"); + process.exit(1); + return; + } + + logger.info("Scan started."); + let scan: SmartCheck.Scan = createScanResponse.data; + + // poll until finished + while (scanIsRunning(scan)) { + await sleep(5000); + logger.info("Checking scan status..."); + const getScanResponse = await axiosInstance.get(scan.href, { + headers: apiHeaders, + baseURL: smartcheckBaseURL, + }); + if (getScanResponse.status < 200 || getScanResponse.status > 299) { + logger.error("Failed to get scan"); + process.exit(1); + return; + } + scan = getScanResponse.data; + } + + logger.info(`scan finished with status: ${scan.status}`); + + if (!args["results-file"]) { + await writeToStdout(JSON.stringify(scan, null, 4)); + } else { + try { + fs.writeFileSync(args["results-file"], JSON.stringify(scan, null, 4), { + encoding: "utf8", + }); + } catch (error) { + logger.error("Could not write results file."); + if (error.message) { + logger.error(error.message); + } + process.exit(1); + return; + } + } + + // Check thresholds + if (doFindingsExceedThreshold(scan, args["findings-threshold"])) { + process.exit(2); + return; + } else if (scan.status === "failed") { + const statusMessage = scan.details ? scan.details.detail : ""; + logger.error(`Scan failed: ${statusMessage}`); + process.exit(1); + return; + } + + // This is mostly redundant but improves the testability + process.exit(0); + return; + }, +}; diff --git a/src/types/smartcheck-api.d.ts b/src/types/smartcheck-api.d.ts new file mode 100644 index 0000000..cf33ae2 --- /dev/null +++ b/src/types/smartcheck-api.d.ts @@ -0,0 +1,22879 @@ +/* eslint-disable */ +/* spell-checker: disable */ + +// Auto generated from openapi spec using https://www.npmjs.com/package/dtsgenerator +declare namespace SmartCheck { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $409 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + namespace Apiversion { + export type XApiVersion = "2018-05-01"; + } + namespace ChangePassword { + export interface BodyParameters { + request?: SmartCheck.ChangePassword.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ChangePassword.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The user's current password. + * + * example: + * ThIsIsNoTaGoOdPaSsWoRd! + */ + oldPassword?: string; // password + /** + * The user's new password. + * + * example: + * ThIsIsNoTaBeTtErPaSsWoRd! + */ + newPassword?: string; // password + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + export interface ChangeUserPasswordRequest { + /** + * The user's current password. + * + * example: + * ThIsIsNoTaGoOdPaSsWoRd! + */ + oldPassword?: string; // password + /** + * The user's new password. + * + * example: + * ThIsIsNoTaBeTtErPaSsWoRd! + */ + newPassword?: string; // password + } + export interface ContentFindingOverride { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/contents/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface ContentFindingOverrideRequest { + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface ContentScanCollection { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL to the collection resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * The name of this collection. + * + * example: + * Deep Security Smart Check Collection + */ + name?: string; + /** + * True if this is the default collection used for content scans. There can only be one default collection at all time. + * + * example: + * true + */ + default: boolean; + /** + * The rulesets belonging to this collection. + * + */ + rulesets?: { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + }[]; + } + export interface ContentScanCollectionRequest { + /** + * The name of this ruleset collection. + * + * example: + * Smart Check collection + */ + name: string; + /** + * The global ruleset collection used for content scan. There can only be one default ruleset collection at all time. If this value is true, the value of other collection will be reset to false. + * + * example: + * true + */ + default?: boolean; + /** + * The rulesets belonging to this collection. + * + */ + rulesets?: { + /** + * The name of this ruleset. + * + * example: + * Scanning rule + */ + name: string; + /** + * Base64-encoded yara rules. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + }[]; + } + export interface ContentScanCollectionRequestWithoutRulesets { + /** + * The name of this ruleset collection. + * + * example: + * Smart Check collection + */ + name: string; + /** + * The global ruleset collection used for content scan. There can only be one default ruleset collection at all time. If this value is true, the value of other collection will be reset to false. + * + * example: + * true + */ + default?: boolean; + } + export interface ContentScanResult { + /** + * The file where the issue was detected by content scanner. + * + * example: + * path/to/file + */ + filename: string; + /** + * The content scan name that matches the file content. + * + * example: + * ssh_key_search_rsa + */ + rule: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + ruleset: string; + /** + * The description of the content scan rule. + * + * example: + * This is a rule. + */ + description?: string; + /** + * example: + * critical + */ + severity?: + | "defcon1" + | "critical" + | "high" + | "medium" + | "low" + | "negligible" + | "unknown"; + /** + * The metadata of the content scan rule. + * + * example: + * [object Object] + */ + metadata?: {}; + /** + * The tags of the content scan rule. + * + */ + tags?: string[]; + override?: { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/contents/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + }; + } + export interface ContentScanRuleset { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + } + export interface ContentScanRulesetRequest { + /** + * The name of this ruleset. + * + * example: + * Scanning rule + */ + name: string; + /** + * Base64-encoded yara rules. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + } + namespace CreateCollection { + export interface BodyParameters { + request?: SmartCheck.CreateCollection.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateCollection.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The name of this ruleset collection. + * + * example: + * Smart Check collection + */ + name: string; + /** + * The global ruleset collection used for content scan. There can only be one default ruleset collection at all time. If this value is true, the value of other collection will be reset to false. + * + * example: + * true + */ + default?: boolean; + /** + * The rulesets belonging to this collection. + * + */ + rulesets?: { + /** + * The name of this ruleset. + * + * example: + * Scanning rule + */ + name: string; + /** + * Base64-encoded yara rules. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + }[]; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $201 { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL to the collection resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * The name of this collection. + * + * example: + * Deep Security Smart Check Collection + */ + name?: string; + /** + * True if this is the default collection used for content scans. There can only be one default collection at all time. + * + * example: + * true + */ + default: boolean; + /** + * The rulesets belonging to this collection. + * + */ + rulesets?: { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + }[]; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateContentFindingOverride { + export interface BodyParameters { + request?: SmartCheck.CreateContentFindingOverride.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateContentFindingOverride.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $201 { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/contents/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateRegistry { + export interface BodyParameters { + request?: SmartCheck.CreateRegistry.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateRegistry.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The name to display for the registry. If not specified, the registry `host` value will be used as the initial name. + * + * example: + * My Registry + */ + name?: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. Required except when using Amazon Elastic Container Registry. + * + * example: + * registry.example.com + */ + host?: string; + /** + * Credentials to use when accessing the registry. + * + */ + credentials?: { + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * username + */ + username?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * ************ + */ + password?: string; // password + /** + * The AWS-specific information for authenticating to the registry. + * + */ + aws?: { + /** + * The AWS region identifier for the region where the registry is located. + * + * example: + * us-east-1 + */ + region: string; + /** + * The optional AWS IAM access key identifier to use when requesting the registry authorization token. If `roleID` is also set, then `accessKeyID` is the AWS IAM access key ID used to authorize the AWS STS `AssumeRole` request to assume the role. If `accessKeyID` is not set, then the default credential chain is used. + * + * example: + * AKIAIOSFODNN7EXAMPLE + */ + accessKeyID?: string; + /** + * The optional AWS IAM secret access key to use when requesting the registry authorization token. If `roleID` is also set, then `secretAccessKey` is the AWS IAM secret access key used to authorize the AWS STS `AssumeRole` request to assume the role. + * + * example: + * wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + */ + secretAccessKey?: string; + /** + * The optional AWS IAM role to assume when requesting the registry authorization token. If `accessKeyID` is also set, then `accessKeyID` and `secretAccessKey` are used to authorize the STS `AssumeRole` API request when assuming this role. If AccessKeyID is not set, then the default credential chain is used when assuming the role. + * + * example: + * arn:aws:iam::account-id:role/role-name + */ + role?: string; + /** + * The optional "external ID" to use when calling the AWS STS `AssumeRole` API to assume the role specified in `roleID`. The external ID may be required by the trust policy on the role being assumed. + * + * example: + * myExternalID + */ + externalID?: string; + /** + * The optional "role session name" to use when calling the AWS STS AssumeRole API to assume the role specified in `roleID`. If `roleSessionName` is not provided, then `DeepSecuritySmartCheck` will be used. + * + * example: + * DeepSecuritySmartCheck + */ + roleSessionName?: string; // ^[\w+=,.@-]*$ + /** + * The optional registry ID to use to get the registry authorization token. This can be used to access the registry in another AWS account. If not provided, the default registry will be used. + * + * example: + * account-id + */ + registry?: string; + }; + }; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + /** + * The registry object. Credentials will not be included in this object. + * + */ + export interface $200 { + /** + * The registry ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the registry can be found. + * + * example: + * /api/registries/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * The name to display for the registry. + * + * example: + * My Registry + */ + name: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. + * + * example: + * registry.example.com + */ + host?: string; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * Registry metrics. + * + */ + metrics?: { + /** + * Metrics capturing information about the content of the registry. + * + */ + content?: { + /** + * The number of repositories with content in the registry. + * + */ + repositories?: number; + /** + * The number of images in the registry. + * + */ + images?: number; + }; + /** + * Metrics capturing information about the scan status of images in the registry. + * + */ + scans?: { + /** + * The number of images in the registry that have not yet been scanned. + * + */ + pending?: number; + /** + * The number of images in the registry that are currently being scanned. + * + */ + inProgress?: number; + /** + * The number of images in the registry that have been scanned and have had no findings. + * + */ + ok?: number; + /** + * The number of images in the registry that have been scanned and have had findings. + * + */ + warnings?: number; + /** + * The number of images in the registry that have been scanned and have encountered errors during the scan. + * + */ + errors?: number; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * Aggregate metrics over a period of time. + * + */ + history?: { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + }; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + /** + * Reports the status of the connection from Deep Security Smart Check to the registry. + * * `pending`: Deep Security Smart Check has not yet attempted to connect to the registry + * * `ok`: The last connection attempt to the registry was successful. + * * `failed`: The last connection attempt to the registry failed. + * + * example: + * pending + */ + status: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + statusDetail?: string; + /** + * The time that the registry connection was created. + * + * example: + * 2017-04-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the registry connection was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + } + /** + * The registry object. Credentials will not be included in this object. + * + */ + export interface $201 { + /** + * The registry ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the registry can be found. + * + * example: + * /api/registries/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * The name to display for the registry. + * + * example: + * My Registry + */ + name: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. + * + * example: + * registry.example.com + */ + host?: string; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * Registry metrics. + * + */ + metrics?: { + /** + * Metrics capturing information about the content of the registry. + * + */ + content?: { + /** + * The number of repositories with content in the registry. + * + */ + repositories?: number; + /** + * The number of images in the registry. + * + */ + images?: number; + }; + /** + * Metrics capturing information about the scan status of images in the registry. + * + */ + scans?: { + /** + * The number of images in the registry that have not yet been scanned. + * + */ + pending?: number; + /** + * The number of images in the registry that are currently being scanned. + * + */ + inProgress?: number; + /** + * The number of images in the registry that have been scanned and have had no findings. + * + */ + ok?: number; + /** + * The number of images in the registry that have been scanned and have had findings. + * + */ + warnings?: number; + /** + * The number of images in the registry that have been scanned and have encountered errors during the scan. + * + */ + errors?: number; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * Aggregate metrics over a period of time. + * + */ + history?: { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + }; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + /** + * Reports the status of the connection from Deep Security Smart Check to the registry. + * * `pending`: Deep Security Smart Check has not yet attempted to connect to the registry + * * `ok`: The last connection attempt to the registry was successful. + * * `failed`: The last connection attempt to the registry failed. + * + * example: + * pending + */ + status: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + statusDetail?: string; + /** + * The time that the registry connection was created. + * + * example: + * 2017-04-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the registry connection was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateRole { + export interface BodyParameters { + request?: SmartCheck.CreateRole.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateRole.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The role's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the role can be found. + * + * example: + * /api/roles/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + /** + * The time that the role was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the role was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $201 { + /** + * The role's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the role can be found. + * + * example: + * /api/roles/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + /** + * The time that the role was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the role was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateRuleset { + export interface BodyParameters { + request?: SmartCheck.CreateRuleset.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateRuleset.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The name of this ruleset. + * + * example: + * Scanning rule + */ + name: string; + /** + * Base64-encoded yara rules. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $201 { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateSAMLIdentityProvider { + export interface BodyParameters { + request?: SmartCheck.CreateSAMLIdentityProvider.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateSAMLIdentityProvider.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The SAML identity provider's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the SAML identity provider can be found. + * + * example: + * /api/identity-providers/saml/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * A name for the SAML identity provider. + * + * example: + * MyIdentityProvider + */ + name?: string; + /** + * (optional, default: `null`) A description for the SAML identity provider. + * + * example: + * My identity provider. Contact me@example.com for support. + */ + description?: string; + /** + * (optional, default: `null`) The URL for the identity provider metadata. If only the hostname is provided, the system will fill in the `https://[hostname]/FederationMetadata/2007-06/FederationMetadata.xml` template. Only one of `metadataURL` and `metadataXML` should be present. + * + * example: + * https://idp.example.com/FederationMetadata/2007-06/FederationMetadata.xml + */ + metadataURL?: string; + /** + * (optional, default: `false`) If `true`, Deep Security Smart Check will not verify TLS connections to the identity provider URL when retrieving the identity provider metadata. Use this only in controlled environments where you know that connections between Deep Security Smart Check and the identity provider are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided root CAs as the trusted root CAs when retrieving the identity provider metadata. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, Deep Security Smart Check will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided metadata XML for the identity provider. Only one of `metadataURL` and `metadataXML` should be present. + * + * example: + * PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxFbnRpdHlEZXNjcmlwdG9yLi4uCg== + */ + metadataXML?: string; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The SAML identity provider's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the SAML identity provider can be found. + * + * example: + * /api/identity-providers/saml/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * A name for the SAML identity provider. + * + * example: + * MyIdentityProvider + */ + name?: string; + /** + * (optional, default: `null`) A description for the SAML identity provider. + * + * example: + * My identity provider. Contact me@example.com for support. + */ + description?: string; + /** + * (optional, default: `null`) The URL for the identity provider metadata. If only the hostname is provided, the system will fill in the `https://[hostname]/FederationMetadata/2007-06/FederationMetadata.xml` template. Only one of `metadataURL` and `metadataXML` should be present. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * https://idp.example.com/FederationMetadata/2007-06/FederationMetadata.xml + */ + metadataURL?: string; + /** + * (optional, default: `false`) If `true`, Deep Security Smart Check will not verify TLS connections to the identity provider URL when retrieving the identity provider metadata. Use this only in controlled environments where you know that connections between Deep Security Smart Check and the identity provider are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided root CAs as the trusted root CAs when retrieving the identity provider metadata. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, Deep Security Smart Check will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The time that the identity provider's certificate will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + validUntil?: string; // datetime + /** + * Overall status of the identity provider. If the status is `failed`, the `detail` attribute will have more information. + * + * example: + * ok + */ + status?: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + detail?: "connection-failed" | "invalid-metadata"; + /** + * The time that the identity provider was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the identity provider was last modified. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + } + export interface $201 { + /** + * The SAML identity provider's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the SAML identity provider can be found. + * + * example: + * /api/identity-providers/saml/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * A name for the SAML identity provider. + * + * example: + * MyIdentityProvider + */ + name?: string; + /** + * (optional, default: `null`) A description for the SAML identity provider. + * + * example: + * My identity provider. Contact me@example.com for support. + */ + description?: string; + /** + * (optional, default: `null`) The URL for the identity provider metadata. If only the hostname is provided, the system will fill in the `https://[hostname]/FederationMetadata/2007-06/FederationMetadata.xml` template. Only one of `metadataURL` and `metadataXML` should be present. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * https://idp.example.com/FederationMetadata/2007-06/FederationMetadata.xml + */ + metadataURL?: string; + /** + * (optional, default: `false`) If `true`, Deep Security Smart Check will not verify TLS connections to the identity provider URL when retrieving the identity provider metadata. Use this only in controlled environments where you know that connections between Deep Security Smart Check and the identity provider are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided root CAs as the trusted root CAs when retrieving the identity provider metadata. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, Deep Security Smart Check will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The time that the identity provider's certificate will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + validUntil?: string; // datetime + /** + * Overall status of the identity provider. If the status is `failed`, the `detail` attribute will have more information. + * + * example: + * ok + */ + status?: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + detail?: "connection-failed" | "invalid-metadata"; + /** + * The time that the identity provider was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the identity provider was last modified. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateScan { + export interface BodyParameters { + request?: SmartCheck.CreateScan.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateScan.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * (optional) A descriptive name for the scan. + * + * example: + * (optional) a descriptive string + */ + name?: string; + /** + * The source of the image to scan. + * + */ + source: { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + credentials?: { + /** + * (optional) Use this if your source requires requests to be authorized using a bearer token. Requests will include an `Authorization: Bearer {token}` header. + * + * example: + * 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + token?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * username + */ + username?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * ************ + */ + password?: string; // password + /** + * The AWS-specific information for authenticating to the registry. + * + */ + aws?: { + /** + * The AWS region identifier for the region where the registry is located. + * + * example: + * us-east-1 + */ + region: string; + /** + * The optional AWS IAM access key identifier to use when requesting the registry authorization token. If `roleID` is also set, then `accessKeyID` is the AWS IAM access key ID used to authorize the AWS STS `AssumeRole` request to assume the role. If `accessKeyID` is not set, then the default credential chain is used. + * + * example: + * AKIAIOSFODNN7EXAMPLE + */ + accessKeyID?: string; + /** + * The optional AWS IAM secret access key to use when requesting the registry authorization token. If `roleID` is also set, then `secretAccessKey` is the AWS IAM secret access key used to authorize the AWS STS `AssumeRole` request to assume the role. + * + * example: + * wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + */ + secretAccessKey?: string; + /** + * The optional AWS IAM role to assume when requesting the registry authorization token. If `accessKeyID` is also set, then `accessKeyID` and `secretAccessKey` are used to authorize the STS `AssumeRole` API request when assuming this role. If AccessKeyID is not set, then the default credential chain is used when assuming the role. + * + * example: + * arn:aws:iam::account-id:role/role-name + */ + role?: string; + /** + * The optional "external ID" to use when calling the AWS STS `AssumeRole` API to assume the role specified in `roleID`. The external ID may be required by the trust policy on the role being assumed. + * + * example: + * myExternalID + */ + externalID?: string; + /** + * The optional "role session name" to use when calling the AWS STS AssumeRole API to assume the role specified in `roleID`. If `roleSessionName` is not provided, then `DeepSecuritySmartCheck` will be used. + * + * example: + * DeepSecuritySmartCheck + */ + roleSessionName?: string; // ^[\w+=,.@-]*$ + /** + * The optional registry ID to use to get the registry authorization token. This can be used to access the registry in another AWS account. If not provided, the default registry will be used. + * + * example: + * account-id + */ + registry?: string; + }; + }; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS source requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, source requests will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + }; + /** + * (optional) A list of web hooks to call when events happen for the scan. + * + */ + webhooks?: { + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name?: string; + /** + * The URL that Deep Security Smart Check should `POST` the event payload to. + * + * example: + * https://target.example.com/ + */ + hookURL: string; + /** + * (optional) You can include your own headers in the web hook request. Use these to provide additional context or authentication information to your web hook receiver. + * + */ + headers?: { + /** + * The header name. + * example: + * Authorization + */ + name: string; + /** + * The header value. + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional) If you provide a `secret` value, then events sent over HTTP will include an `X-Scan-Event-Signature` header that is the SHA-256 HMAC of the event body using your secret as the key. + * + * *This value is write-only: the API will not return the secret or show that it has been set.* + * + * example: + * tHiSiSaBaDsEcReT + */ + secret?: string; // password + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * (optional, default: `false`). If `true`, the web hook will be invoked whenever a matching event occurs. + * + * example: + * true + */ + active?: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events?: ( + | "scan-requested" + | "scan-started" + | "scan-completed" + | "*")[]; + }[]; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this scan. + * + */ + id: string; + /** + * The URL to the scan resource. + * + * example: + * /api/scans/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * If you provided a name for the scan, it will be returned here. + * + */ + name: string; + source?: { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + }; + status: + | "pending" + | "in-progress" + | "completed-with-findings" + | "completed-no-findings" + | "failed"; + details?: { + /** + * (optional) More details about the scan status. + * + * example: + * More details about the scan status + */ + detail?: string; + /** + * The time that the scan was requested. + * + * example: + * 2018-05-01T00:00:00Z + */ + requested: string; // date-time + /** + * The time that the scan started. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + started?: string; // date-time + /** + * The time that the scan was last updated. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the scan completed. This value will not be present if the scan has not yet completed. + * + * example: + * 2018-05-01T00:00:00Z + */ + completed?: string; // date-time + /** + * The image digest for the scanned image. This value will only be present for Docker scans. + * + * example: + * sha256:43ea500473edb96e079fe23aba62d60e09c11d4c4714ca284d50b80e064c05e3 + */ + digest?: string; + /** + * The target operating system for the scanned image. This value will only be present for Docker scans. + * + * example: + * linux + */ + os?: string; + /** + * The target architecture for the scanned image. This value will only be present for Docker scans. + * + * example: + * amd64 + */ + architecture?: string; + /** + * The labels associated with the scanned image. This value will only be present for Docker scans. + * example: + * [object Object] + */ + labels?: { + [name: string]: string; + }; + results: { + /** + * A layer identifier. For scans of type `docker`, this will be the layer's `digest` value. This attribute will not be present for scans of type `http`. + * + * example: + * sha256:77beb64c6eca68574566d5b04b9f64c71d9b7757a446d562b7d0ae4b13b7c467 + */ + id?: string; + /** + * For scans of Docker images, this attribute will show the time at which the layer was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + createdAt?: string; // date-time + /** + * For scans of Docker images, this attribute will show the Docker daemon command that ran to create this layer. This is not an exact match to the `Dockerfile` line, but will help to provide better context of the results. + * + * example: + * /bin/sh -c #(nop) ADD file:5d127078b2f213dbbf08ca35dafd027011606887a655f641024b14d93ee0de2f in /run-httpd.sh + */ + createdBy?: string; + /** + * If present, a URL pointing to the list of malware that was found. See List layer malware findings. + * + */ + malware?: string; + /** + * If present, a URL pointing to the list of vulnerabilities that were found. See List layer vulnerability findings. + * + */ + vulnerabilities?: string; + /** + * If present, a URL pointing to the list of content scan results that were found. See List layer content findings. + * + */ + contents?: string; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + }[]; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + } + export interface $201 { + /** + * The unique ID assigned to this scan. + * + */ + id: string; + /** + * The URL to the scan resource. + * + * example: + * /api/scans/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * If you provided a name for the scan, it will be returned here. + * + */ + name: string; + source?: { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + }; + status: + | "pending" + | "in-progress" + | "completed-with-findings" + | "completed-no-findings" + | "failed"; + details?: { + /** + * (optional) More details about the scan status. + * + * example: + * More details about the scan status + */ + detail?: string; + /** + * The time that the scan was requested. + * + * example: + * 2018-05-01T00:00:00Z + */ + requested: string; // date-time + /** + * The time that the scan started. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + started?: string; // date-time + /** + * The time that the scan was last updated. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the scan completed. This value will not be present if the scan has not yet completed. + * + * example: + * 2018-05-01T00:00:00Z + */ + completed?: string; // date-time + /** + * The image digest for the scanned image. This value will only be present for Docker scans. + * + * example: + * sha256:43ea500473edb96e079fe23aba62d60e09c11d4c4714ca284d50b80e064c05e3 + */ + digest?: string; + /** + * The target operating system for the scanned image. This value will only be present for Docker scans. + * + * example: + * linux + */ + os?: string; + /** + * The target architecture for the scanned image. This value will only be present for Docker scans. + * + * example: + * amd64 + */ + architecture?: string; + /** + * The labels associated with the scanned image. This value will only be present for Docker scans. + * example: + * [object Object] + */ + labels?: { + [name: string]: string; + }; + results: { + /** + * A layer identifier. For scans of type `docker`, this will be the layer's `digest` value. This attribute will not be present for scans of type `http`. + * + * example: + * sha256:77beb64c6eca68574566d5b04b9f64c71d9b7757a446d562b7d0ae4b13b7c467 + */ + id?: string; + /** + * For scans of Docker images, this attribute will show the time at which the layer was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + createdAt?: string; // date-time + /** + * For scans of Docker images, this attribute will show the Docker daemon command that ran to create this layer. This is not an exact match to the `Dockerfile` line, but will help to provide better context of the results. + * + * example: + * /bin/sh -c #(nop) ADD file:5d127078b2f213dbbf08ca35dafd027011606887a655f641024b14d93ee0de2f in /run-httpd.sh + */ + createdBy?: string; + /** + * If present, a URL pointing to the list of malware that was found. See List layer malware findings. + * + */ + malware?: string; + /** + * If present, a URL pointing to the list of vulnerabilities that were found. See List layer vulnerability findings. + * + */ + vulnerabilities?: string; + /** + * If present, a URL pointing to the list of content scan results that were found. See List layer content findings. + * + */ + contents?: string; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + }[]; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateSession { + export interface BodyParameters { + request?: SmartCheck.CreateSession.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateSession.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The user to create a session for. + * + */ + user?: { + /** + * The user's ID. + * + * example: + * alice + */ + userID: string; + /** + * The user's password. + * + * example: + * ThIsIsNoTaGoOdPaSsWoRd! + */ + password: string; // password + }; + /** + * The SAML response to create a session for. + * + */ + saml?: { + /** + * The Base64-encoded SAML response. + * + * example: + * PFJlc3BvbnNlPi4uLgo= + */ + response: string; + /** + * If multiple role claims are present in the SAML response, set `selectedRole` to the role value that you want to assume for this session. Required if multiple role claims are present in the SAML response. + * + * example: + * administrator + */ + selectedRole?: string; + }; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The session's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the session can be found. + * + * example: + * /api/sessions/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + user?: { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + }; + /** + * The session token. Use the session token the `Authorization` header of subsequent requests: ```Authorization: Bearer SAMPLEeyJhbGciOiJSUz...``` + * + * example: + * eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.AzuEel-o9NFJyTvfHx49jMZ-iwU-4NqMQduhUFvWKXXL2ZmMD1Id2ePFU-0ut-esku2avobI7uVDtfEbO6C-Zrn2S4cwsRHnUBCqgzcGwAFr4lHSGi8eAkMSn7b_ceNQu4aGAtDAnCNv3An3U9JUeq29Lze5Md5TTMUSZkFUZR15bJmSKgnd3GvAsIFyIbORmhs2Fe5E9q8jnuSFaeTvvRnlW48Po6bKC09MEhelrES5nnA2tLBu_hMB8VVaDjG7veOtLXrgkH7_6SdBDFZ8Yma_rgA0AwrtYtfQyNunVKctjDq0BE1OPNCJ45n1Cyr7i2TosnYwQUm-v1tX2LZn6g + */ + token?: string; + /** + * The time that the session was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the session was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + /** + * The time that the session will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + expires?: string; // datetime + /** + * The session name provided for this session. SAML identity providers can set this by including a `RoleSessionName` claim in the SAML response. + * + * example: + * alice + */ + roleSessionName?: string; + } + export interface $201 { + /** + * The session's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the session can be found. + * + * example: + * /api/sessions/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + user?: { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + }; + /** + * The session token. Use the session token the `Authorization` header of subsequent requests: ```Authorization: Bearer SAMPLEeyJhbGciOiJSUz...``` + * + * example: + * eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.AzuEel-o9NFJyTvfHx49jMZ-iwU-4NqMQduhUFvWKXXL2ZmMD1Id2ePFU-0ut-esku2avobI7uVDtfEbO6C-Zrn2S4cwsRHnUBCqgzcGwAFr4lHSGi8eAkMSn7b_ceNQu4aGAtDAnCNv3An3U9JUeq29Lze5Md5TTMUSZkFUZR15bJmSKgnd3GvAsIFyIbORmhs2Fe5E9q8jnuSFaeTvvRnlW48Po6bKC09MEhelrES5nnA2tLBu_hMB8VVaDjG7veOtLXrgkH7_6SdBDFZ8Yma_rgA0AwrtYtfQyNunVKctjDq0BE1OPNCJ45n1Cyr7i2TosnYwQUm-v1tX2LZn6g + */ + token?: string; + /** + * The time that the session was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the session was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + /** + * The time that the session will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + expires?: string; // datetime + /** + * The session name provided for this session. SAML identity providers can set this by including a `RoleSessionName` claim in the SAML response. + * + * example: + * alice + */ + roleSessionName?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateUser { + export interface BodyParameters { + request?: SmartCheck.CreateUser.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateUser.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * A unique name for the user. + * + * example: + * alice + */ + userID?: string; + /** + * A password for the user. + * + * example: + * ThIsIsNoTaGoOdPaSsWoRd! + */ + password?: string; // password + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role?: string; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $201 { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateVulnerabilityFindingOverride { + export interface BodyParameters { + request?: SmartCheck.CreateVulnerabilityFindingOverride.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateVulnerabilityFindingOverride.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $201 { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/vulnerabilities/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateWebhook { + export interface BodyParameters { + request?: SmartCheck.CreateWebhook.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateWebhook.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name?: string; + /** + * The URL that Deep Security Smart Check should `POST` the event payload to. + * + * example: + * https://target.example.com/ + */ + hookURL: string; + /** + * (optional) You can include your own headers in the web hook request. Use these to provide additional context or authentication information to your web hook receiver. + * + */ + headers?: { + /** + * The header name. + * example: + * Authorization + */ + name: string; + /** + * The header value. + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional) If you provide a `secret` value, then events sent over HTTP will include an `X-Scan-Event-Signature` header that is the SHA-256 HMAC of the event body using your secret as the key. + * + * *This value is write-only: the API will not return the secret or show that it has been set.* + * + * example: + * tHiSiSaBaDsEcReT + */ + secret?: string; // password + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * (optional, default: `false`). If `true`, the web hook will be invoked whenever a matching event occurs. + * + * example: + * true + */ + active?: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events?: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The URL at which the web hook can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href: string; + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name: string; + /** + * example: + * https://target.example.com/ + */ + hookURL: string; + headers: { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * example: + * true + */ + active: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + /** + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // date-time + /** + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + } + export interface $201 { + /** + * The URL at which the web hook can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href: string; + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name: string; + /** + * example: + * https://target.example.com/ + */ + hookURL: string; + headers: { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * example: + * true + */ + active: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + /** + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // date-time + /** + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace CreateWebhookHeader { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.CreateWebhookHeader.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + } + export interface $201 { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + export interface Credentials { + /** + * (optional) Use this if your source requires requests to be authorized using a bearer token. Requests will include an `Authorization: Bearer {token}` header. + * + * example: + * 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + token?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * username + */ + username?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * ************ + */ + password?: string; // password + /** + * The AWS-specific information for authenticating to the registry. + * + */ + aws?: { + /** + * The AWS region identifier for the region where the registry is located. + * + * example: + * us-east-1 + */ + region: string; + /** + * The optional AWS IAM access key identifier to use when requesting the registry authorization token. If `roleID` is also set, then `accessKeyID` is the AWS IAM access key ID used to authorize the AWS STS `AssumeRole` request to assume the role. If `accessKeyID` is not set, then the default credential chain is used. + * + * example: + * AKIAIOSFODNN7EXAMPLE + */ + accessKeyID?: string; + /** + * The optional AWS IAM secret access key to use when requesting the registry authorization token. If `roleID` is also set, then `secretAccessKey` is the AWS IAM secret access key used to authorize the AWS STS `AssumeRole` request to assume the role. + * + * example: + * wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + */ + secretAccessKey?: string; + /** + * The optional AWS IAM role to assume when requesting the registry authorization token. If `accessKeyID` is also set, then `accessKeyID` and `secretAccessKey` are used to authorize the STS `AssumeRole` API request when assuming this role. If AccessKeyID is not set, then the default credential chain is used when assuming the role. + * + * example: + * arn:aws:iam::account-id:role/role-name + */ + role?: string; + /** + * The optional "external ID" to use when calling the AWS STS `AssumeRole` API to assume the role specified in `roleID`. The external ID may be required by the trust policy on the role being assumed. + * + * example: + * myExternalID + */ + externalID?: string; + /** + * The optional "role session name" to use when calling the AWS STS AssumeRole API to assume the role specified in `roleID`. If `roleSessionName` is not provided, then `DeepSecuritySmartCheck` will be used. + * + * example: + * DeepSecuritySmartCheck + */ + roleSessionName?: string; // ^[\w+=,.@-]*$ + /** + * The optional registry ID to use to get the registry authorization token. This can be used to access the registry in another AWS account. If not provided, the default registry will be used. + * + * example: + * account-id + */ + registry?: string; + }; + } + namespace DeleteCollection { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteCollection.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteContentFindingOverride { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteContentFindingOverride.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteRegistry { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteRegistry.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteRole { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteRole.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteRuleset { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteRuleset.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteSAMLIdentityProvider { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteSAMLIdentityProvider.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteSession { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteSession.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteUser { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteUser.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteVulnerabilityFindingOverride { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteVulnerabilityFindingOverride.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteWebhook { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteWebhook.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DeleteWebhookHeader { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DeleteWebhookHeader.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeCollection { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeCollection.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + rulesets?: { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL to the collection resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * The name of this collection. + * + * example: + * Deep Security Smart Check Collection + */ + name?: string; + /** + * True if this is the default collection used for content scans. There can only be one default collection at all time. + * + * example: + * true + */ + default: boolean; + /** + * The rulesets belonging to this collection. + * + */ + rulesets?: { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + }[]; + }[]; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeContentFindingOverride { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeContentFindingOverride.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/contents/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeDashboard { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeDashboard.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * Metrics capturing information about the content of all registries. + * + */ + content?: { + /** + * The number of registries. + * + */ + registries?: number; + /** + * The number of repositories with content in all registries. + * + */ + repositories?: number; + /** + * The number of images in all registries. + * + */ + images?: number; + }; + /** + * Metrics capturing information about the scan status of images in all registries. + * + */ + scans?: { + /** + * The number of images in all registries that have not yet been scanned. + * + */ + pending?: number; + /** + * The number of images in all registries that are currently being scanned. + * + */ + inProgress?: number; + /** + * The number of images in all registries that have been scanned and have had no findings. + * + */ + ok?: number; + /** + * The number of images in all registries that have been scanned and have had findings. + * + */ + warnings?: number; + /** + * The number of images in all registries that have been scanned and have encountered errors during the scan. + * + */ + errors?: number; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * Aggregate metrics over a period of time. + * + */ + history?: { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed on images in all registries in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed on images in all registries in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + }; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeLicense { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeLicense.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The license type. + * + */ + type: "full" | "trial" | "none"; + /** + * Timestamp when the license will expire. + * + * example: + * 2019-05-01T00:00:00Z + */ + expires?: string; // date-time + /** + * Grace period after expiry (in days) when the product will still update. + * + * example: + * 0 + */ + gracePeriod?: number; + /** + * The entitlements granted by the license (if any). + * + */ + entitlements?: { + /** + * The number of registries that are currently permitted by the license. A value of `-1` indicates that unlimited licenses can be created. + * + * example: + * 1 + */ + registries?: number; + /** + * If the system is unlicensed, it will not receive malware pattern updates and the value for `updates` will be `false`. + * + * example: + * true + */ + updates?: boolean; + }; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $402 { + /** + * The license type. + * + */ + type: "full" | "trial" | "none"; + /** + * Timestamp when the license will expire. + * + * example: + * 2019-05-01T00:00:00Z + */ + expires?: string; // date-time + /** + * Grace period after expiry (in days) when the product will still update. + * + * example: + * 0 + */ + gracePeriod?: number; + /** + * The entitlements granted by the license (if any). + * + */ + entitlements?: { + /** + * The number of registries that are currently permitted by the license. A value of `-1` indicates that unlimited licenses can be created. + * + * example: + * 1 + */ + registries?: number; + /** + * If the system is unlicensed, it will not receive malware pattern updates and the value for `updates` will be `false`. + * + * example: + * true + */ + updates?: boolean; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeRegistry { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeRegistry.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + /** + * The registry object. Credentials will not be included in this object. + * + */ + export interface $200 { + /** + * The registry ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the registry can be found. + * + * example: + * /api/registries/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * The name to display for the registry. + * + * example: + * My Registry + */ + name: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. + * + * example: + * registry.example.com + */ + host?: string; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * Registry metrics. + * + */ + metrics?: { + /** + * Metrics capturing information about the content of the registry. + * + */ + content?: { + /** + * The number of repositories with content in the registry. + * + */ + repositories?: number; + /** + * The number of images in the registry. + * + */ + images?: number; + }; + /** + * Metrics capturing information about the scan status of images in the registry. + * + */ + scans?: { + /** + * The number of images in the registry that have not yet been scanned. + * + */ + pending?: number; + /** + * The number of images in the registry that are currently being scanned. + * + */ + inProgress?: number; + /** + * The number of images in the registry that have been scanned and have had no findings. + * + */ + ok?: number; + /** + * The number of images in the registry that have been scanned and have had findings. + * + */ + warnings?: number; + /** + * The number of images in the registry that have been scanned and have encountered errors during the scan. + * + */ + errors?: number; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * Aggregate metrics over a period of time. + * + */ + history?: { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + }; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + /** + * Reports the status of the connection from Deep Security Smart Check to the registry. + * * `pending`: Deep Security Smart Check has not yet attempted to connect to the registry + * * `ok`: The last connection attempt to the registry was successful. + * * `failed`: The last connection attempt to the registry failed. + * + * example: + * pending + */ + status: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + statusDetail?: string; + /** + * The time that the registry connection was created. + * + * example: + * 2017-04-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the registry connection was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeRegistryImage { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeRegistryImage.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The registry URL where the image can be found. + * + * example: + * https://registry.example.com + */ + registry: string; + /** + * The repository where the image can be found. + * + * example: + * deepsecurity-smartcheck/example + */ + repository: string; + /** + * The tag assigned to the image. + * + * example: + * latest + */ + tag: string; + /** + * The image's hash digest. + * + * example: + * sha256:8476ee13937bfbf3ea2bce060448002a19c19c063b66583dae31cde64b2f2406 + */ + digest: string; + /** + * The image's last known scan status. + * + */ + status: + | "" + | "pending" + | "in-progress" + | "completed-no-findings" + | "completed-with-findings" + | "failed"; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * The time that the image status was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeRole { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeRole.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The role's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the role can be found. + * + * example: + * /api/roles/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + /** + * The time that the role was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the role was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeRuleset { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeRuleset.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeSAMLIdentityProvider { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeSAMLIdentityProvider.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The SAML identity provider's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the SAML identity provider can be found. + * + * example: + * /api/identity-providers/saml/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * A name for the SAML identity provider. + * + * example: + * MyIdentityProvider + */ + name?: string; + /** + * (optional, default: `null`) A description for the SAML identity provider. + * + * example: + * My identity provider. Contact me@example.com for support. + */ + description?: string; + /** + * (optional, default: `null`) The URL for the identity provider metadata. If only the hostname is provided, the system will fill in the `https://[hostname]/FederationMetadata/2007-06/FederationMetadata.xml` template. Only one of `metadataURL` and `metadataXML` should be present. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * https://idp.example.com/FederationMetadata/2007-06/FederationMetadata.xml + */ + metadataURL?: string; + /** + * (optional, default: `false`) If `true`, Deep Security Smart Check will not verify TLS connections to the identity provider URL when retrieving the identity provider metadata. Use this only in controlled environments where you know that connections between Deep Security Smart Check and the identity provider are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided root CAs as the trusted root CAs when retrieving the identity provider metadata. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, Deep Security Smart Check will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The time that the identity provider's certificate will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + validUntil?: string; // datetime + /** + * Overall status of the identity provider. If the status is `failed`, the `detail` attribute will have more information. + * + * example: + * ok + */ + status?: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + detail?: "connection-failed" | "invalid-metadata"; + /** + * The time that the identity provider was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the identity provider was last modified. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeScan { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeScan.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this scan. + * + */ + id: string; + /** + * The URL to the scan resource. + * + * example: + * /api/scans/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * If you provided a name for the scan, it will be returned here. + * + */ + name: string; + source?: { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + }; + status: + | "pending" + | "in-progress" + | "completed-with-findings" + | "completed-no-findings" + | "failed"; + details?: { + /** + * (optional) More details about the scan status. + * + * example: + * More details about the scan status + */ + detail?: string; + /** + * The time that the scan was requested. + * + * example: + * 2018-05-01T00:00:00Z + */ + requested: string; // date-time + /** + * The time that the scan started. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + started?: string; // date-time + /** + * The time that the scan was last updated. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the scan completed. This value will not be present if the scan has not yet completed. + * + * example: + * 2018-05-01T00:00:00Z + */ + completed?: string; // date-time + /** + * The image digest for the scanned image. This value will only be present for Docker scans. + * + * example: + * sha256:43ea500473edb96e079fe23aba62d60e09c11d4c4714ca284d50b80e064c05e3 + */ + digest?: string; + /** + * The target operating system for the scanned image. This value will only be present for Docker scans. + * + * example: + * linux + */ + os?: string; + /** + * The target architecture for the scanned image. This value will only be present for Docker scans. + * + * example: + * amd64 + */ + architecture?: string; + /** + * The labels associated with the scanned image. This value will only be present for Docker scans. + * example: + * [object Object] + */ + labels?: { + [name: string]: string; + }; + results: { + /** + * A layer identifier. For scans of type `docker`, this will be the layer's `digest` value. This attribute will not be present for scans of type `http`. + * + * example: + * sha256:77beb64c6eca68574566d5b04b9f64c71d9b7757a446d562b7d0ae4b13b7c467 + */ + id?: string; + /** + * For scans of Docker images, this attribute will show the time at which the layer was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + createdAt?: string; // date-time + /** + * For scans of Docker images, this attribute will show the Docker daemon command that ran to create this layer. This is not an exact match to the `Dockerfile` line, but will help to provide better context of the results. + * + * example: + * /bin/sh -c #(nop) ADD file:5d127078b2f213dbbf08ca35dafd027011606887a655f641024b14d93ee0de2f in /run-httpd.sh + */ + createdBy?: string; + /** + * If present, a URL pointing to the list of malware that was found. See List layer malware findings. + * + */ + malware?: string; + /** + * If present, a URL pointing to the list of vulnerabilities that were found. See List layer vulnerability findings. + * + */ + vulnerabilities?: string; + /** + * If present, a URL pointing to the list of content scan results that were found. See List layer content findings. + * + */ + contents?: string; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + }[]; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeScanMetrics { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeScanMetrics.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed in the time period. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed in the time period. + * + */ + scans?: number; + }; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeSession { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeSession.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The session's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the session can be found. + * + * example: + * /api/sessions/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + user?: { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + }; + /** + * The session token. Use the session token the `Authorization` header of subsequent requests: ```Authorization: Bearer SAMPLEeyJhbGciOiJSUz...``` + * + * example: + * eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.AzuEel-o9NFJyTvfHx49jMZ-iwU-4NqMQduhUFvWKXXL2ZmMD1Id2ePFU-0ut-esku2avobI7uVDtfEbO6C-Zrn2S4cwsRHnUBCqgzcGwAFr4lHSGi8eAkMSn7b_ceNQu4aGAtDAnCNv3An3U9JUeq29Lze5Md5TTMUSZkFUZR15bJmSKgnd3GvAsIFyIbORmhs2Fe5E9q8jnuSFaeTvvRnlW48Po6bKC09MEhelrES5nnA2tLBu_hMB8VVaDjG7veOtLXrgkH7_6SdBDFZ8Yma_rgA0AwrtYtfQyNunVKctjDq0BE1OPNCJ45n1Cyr7i2TosnYwQUm-v1tX2LZn6g + */ + token?: string; + /** + * The time that the session was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the session was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + /** + * The time that the session will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + expires?: string; // datetime + /** + * The session name provided for this session. SAML identity providers can set this by including a `RoleSessionName` claim in the SAML response. + * + * example: + * alice + */ + roleSessionName?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeUser { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeUser.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeVulnerabilityFindingOverride { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeVulnerabilityFindingOverride.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/vulnerabilities/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeWebhook { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeWebhook.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The URL at which the web hook can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href: string; + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name: string; + /** + * example: + * https://target.example.com/ + */ + hookURL: string; + headers: { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * example: + * true + */ + active: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + /** + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // date-time + /** + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace DescribeWebhookHeader { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.DescribeWebhookHeader.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The URL at which the web hook can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href: string; + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name: string; + /** + * example: + * https://target.example.com/ + */ + hookURL: string; + headers: { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * example: + * true + */ + active: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + /** + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // date-time + /** + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + export interface Error { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface Image { + /** + * The registry URL where the image can be found. + * + * example: + * https://registry.example.com + */ + registry: string; + /** + * The repository where the image can be found. + * + * example: + * deepsecurity-smartcheck/example + */ + repository: string; + /** + * The tag assigned to the image. + * + * example: + * latest + */ + tag: string; + /** + * The image's hash digest. + * + * example: + * sha256:8476ee13937bfbf3ea2bce060448002a19c19c063b66583dae31cde64b2f2406 + */ + digest: string; + /** + * The image's last known scan status. + * + */ + status: + | "" + | "pending" + | "in-progress" + | "completed-no-findings" + | "completed-with-findings" + | "failed"; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * The time that the image status was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + } + export interface LayerResults { + /** + * A layer identifier. For scans of type `docker`, this will be the layer's `digest` value. This attribute will not be present for scans of type `http`. + * + * example: + * sha256:77beb64c6eca68574566d5b04b9f64c71d9b7757a446d562b7d0ae4b13b7c467 + */ + id?: string; + /** + * For scans of Docker images, this attribute will show the time at which the layer was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + createdAt?: string; // date-time + /** + * For scans of Docker images, this attribute will show the Docker daemon command that ran to create this layer. This is not an exact match to the `Dockerfile` line, but will help to provide better context of the results. + * + * example: + * /bin/sh -c #(nop) ADD file:5d127078b2f213dbbf08ca35dafd027011606887a655f641024b14d93ee0de2f in /run-httpd.sh + */ + createdBy?: string; + /** + * If present, a URL pointing to the list of malware that was found. See List layer malware findings. + * + */ + malware?: string; + /** + * If present, a URL pointing to the list of vulnerabilities that were found. See List layer vulnerability findings. + * + */ + vulnerabilities?: string; + /** + * If present, a URL pointing to the list of content scan results that were found. See List layer content findings. + * + */ + contents?: string; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + } + export interface License { + /** + * The license type. + * + */ + type: "full" | "trial" | "none"; + /** + * Timestamp when the license will expire. + * + * example: + * 2019-05-01T00:00:00Z + */ + expires?: string; // date-time + /** + * Grace period after expiry (in days) when the product will still update. + * + * example: + * 0 + */ + gracePeriod?: number; + /** + * The entitlements granted by the license (if any). + * + */ + entitlements?: { + /** + * The number of registries that are currently permitted by the license. A value of `-1` indicates that unlimited licenses can be created. + * + * example: + * 1 + */ + registries?: number; + /** + * If the system is unlicensed, it will not receive malware pattern updates and the value for `updates` will be `false`. + * + * example: + * true + */ + updates?: boolean; + }; + } + namespace ListCollections { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListCollections.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + collections?: { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL to the collection resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * The name of this collection. + * + * example: + * Deep Security Smart Check Collection + */ + name?: string; + /** + * True if this is the default collection used for content scans. There can only be one default collection at all time. + * + * example: + * true + */ + default: boolean; + /** + * The rulesets belonging to this collection. + * + */ + rulesets?: { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + }[]; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListContentFindingOverrides { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListContentFindingOverrides.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + contents?: { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/contents/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListLayerContentFindings { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListLayerContentFindings.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + contents?: { + /** + * The file where the issue was detected by content scanner. + * + * example: + * path/to/file + */ + filename: string; + /** + * The content scan name that matches the file content. + * + * example: + * ssh_key_search_rsa + */ + rule: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + ruleset: string; + /** + * The description of the content scan rule. + * + * example: + * This is a rule. + */ + description?: string; + /** + * example: + * critical + */ + severity?: + | "defcon1" + | "critical" + | "high" + | "medium" + | "low" + | "negligible" + | "unknown"; + /** + * The metadata of the content scan rule. + * + * example: + * [object Object] + */ + metadata?: {}; + /** + * The tags of the content scan rule. + * + */ + tags?: string[]; + override?: { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/contents/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + }; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListLayerMalwareFindings { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListLayerMalwareFindings.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + malware?: { + /** + * The file where the malware was detected. + * + * example: + * path/to/file + */ + filename?: string; + icrc?: { + /** + * The name of the malware that was detected. + * + * example: + * Eicar_test_file + */ + name: string; + /** + * A link to more information about the detected malware. + * + * example: + * https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/eicar_test_file + */ + url: string; + }; + trendx?: { + found?: { + /** + * The name of the malware that was detected. + * + * example: + * Eicar_test_file + */ + name: string; + /** + * A link to more information about the detected malware. + * + * example: + * https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/eicar_test_file + */ + url: string; + }; + /** + * example: + * 100 + */ + confidence?: number; + related?: { + /** + * The name of related malware that was detected. + * + * example: + * Eicar_test_file + */ + name: string; + /** + * A link to more information about the detected malware. + * + * example: + * https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/eicar_test_file + */ + url: string; + }[]; + }; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListLayerVulnerabilityFindings { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListLayerVulnerabilityFindings.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + vulnerabilities?: { + /** + * The name of an installed package with known vulnerabilities. + * + */ + name: string; + /** + * The namespace that the package `name` is unique within. + * + */ + namespaceName?: string; + /** + * The package version that was detected. + * + */ + version?: string; + /** + * The version format. + * + */ + versionFormat?: string; + /** + * A list of the known vulnerabilities in this package. + * + */ + vulnerabilities: { + /** + * A description of the known vulnerability in this package. + * + */ + description: string; + /** + * The version of the package where the vulnerability has been resolved. + * + */ + fixedBy?: string; + /** + * If present, this object will describe the fix and what layer the fix is present in. + * + */ + fixed?: { + /** + * The name of the package. + * + */ + name?: string; + /** + * The namespace that the package `name` is unique within. + * + */ + namespaceName?: string; + /** + * The package version that was detected. + * + */ + version?: string; + /** + * The version format. + * + */ + versionFormat?: string; + /** + * The layer identifier where the fixed package version was detected. + * + */ + layer?: string; + }; + override?: { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/vulnerabilities/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + }; + /** + * A link to more information about the vulnerability. + * + */ + link?: string; + /** + * The name of the vulnerability. + * + */ + name: string; + /** + * The namespace that the package `name` is unique within. + * + */ + namespaceName?: string; + /** + * The severity assigned to the vulnerability: + * * `defcon1`: is a `critical` problem which has been manually highlighted by the team. It requires immediate attention. + * * `critical`: a world-burning problem, exploitable for nearly all people in a default installation of Linux. Includes remote root privilege escalations, or massive data loss. + * * `high`: a real problem, exploitable for many people in a default installation. Includes serious remote denial of services, local root privilege escalations, or data loss. + * * `medium`: a real security problem, and is exploitable for many people. Includes network daemon denial of service attacks, cross-site scripting, and gaining user privileges. Updates should be made soon for this priority of issue. + * * `low`: a security problem, but is hard to exploit due to environment, requires a user-assisted attack, a small install base, or does very little damage. These tend to be included in security updates only when higher-priority issues require an upgrade, or if many low-priority issues have built up. + * * `negligible`: is technically a security problem, but is only theoretical in nature, requires a very special situation, has almost no install base, or does no real damage. These tend not to get backported from upstreams, and will likely not be included in security updates unless there is an easy fix and some other issue causes an update. + * + * example: + * high + */ + severity: + | "defcon1" + | "critical" + | "high" + | "medium" + | "low" + | "negligible" + | "unknown"; + }[]; + findings?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListRegistries { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListRegistries.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The list of registries. + * + */ + registries?: { + /** + * The registry ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the registry can be found. + * + * example: + * /api/registries/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * The name to display for the registry. + * + * example: + * My Registry + */ + name: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. + * + * example: + * registry.example.com + */ + host?: string; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * Registry metrics. + * + */ + metrics?: { + /** + * Metrics capturing information about the content of the registry. + * + */ + content?: { + /** + * The number of repositories with content in the registry. + * + */ + repositories?: number; + /** + * The number of images in the registry. + * + */ + images?: number; + }; + /** + * Metrics capturing information about the scan status of images in the registry. + * + */ + scans?: { + /** + * The number of images in the registry that have not yet been scanned. + * + */ + pending?: number; + /** + * The number of images in the registry that are currently being scanned. + * + */ + inProgress?: number; + /** + * The number of images in the registry that have been scanned and have had no findings. + * + */ + ok?: number; + /** + * The number of images in the registry that have been scanned and have had findings. + * + */ + warnings?: number; + /** + * The number of images in the registry that have been scanned and have encountered errors during the scan. + * + */ + errors?: number; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * Aggregate metrics over a period of time. + * + */ + history?: { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + }; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + /** + * Reports the status of the connection from Deep Security Smart Check to the registry. + * * `pending`: Deep Security Smart Check has not yet attempted to connect to the registry + * * `ok`: The last connection attempt to the registry was successful. + * * `failed`: The last connection attempt to the registry failed. + * + * example: + * pending + */ + status: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + statusDetail?: string; + /** + * The time that the registry connection was created. + * + * example: + * 2017-04-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the registry connection was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListRegistryImages { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListRegistryImages.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The list of images. + * + */ + images?: { + /** + * The registry URL where the image can be found. + * + * example: + * https://registry.example.com + */ + registry: string; + /** + * The repository where the image can be found. + * + * example: + * deepsecurity-smartcheck/example + */ + repository: string; + /** + * The tag assigned to the image. + * + * example: + * latest + */ + tag: string; + /** + * The image's hash digest. + * + * example: + * sha256:8476ee13937bfbf3ea2bce060448002a19c19c063b66583dae31cde64b2f2406 + */ + digest: string; + /** + * The image's last known scan status. + * + */ + status: + | "" + | "pending" + | "in-progress" + | "completed-no-findings" + | "completed-with-findings" + | "failed"; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * The time that the image status was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListRoles { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListRoles.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The list of roles. + * + */ + roles?: { + /** + * The role's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the role can be found. + * + * example: + * /api/roles/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + /** + * The time that the role was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the role was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListRulesets { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListRulesets.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + rulesets?: { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListSAMLIdentityProviders { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListSAMLIdentityProviders.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The list of SAML identity providers. + * + */ + providers?: { + /** + * The SAML identity provider's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the SAML identity provider can be found. + * + * example: + * /api/identity-providers/saml/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * A name for the SAML identity provider. + * + * example: + * MyIdentityProvider + */ + name?: string; + /** + * (optional, default: `null`) A description for the SAML identity provider. + * + * example: + * My identity provider. Contact me@example.com for support. + */ + description?: string; + /** + * (optional, default: `null`) The URL for the identity provider metadata. If only the hostname is provided, the system will fill in the `https://[hostname]/FederationMetadata/2007-06/FederationMetadata.xml` template. Only one of `metadataURL` and `metadataXML` should be present. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * https://idp.example.com/FederationMetadata/2007-06/FederationMetadata.xml + */ + metadataURL?: string; + /** + * (optional, default: `false`) If `true`, Deep Security Smart Check will not verify TLS connections to the identity provider URL when retrieving the identity provider metadata. Use this only in controlled environments where you know that connections between Deep Security Smart Check and the identity provider are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided root CAs as the trusted root CAs when retrieving the identity provider metadata. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, Deep Security Smart Check will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The time that the identity provider's certificate will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + validUntil?: string; // datetime + /** + * Overall status of the identity provider. If the status is `failed`, the `detail` attribute will have more information. + * + * example: + * ok + */ + status?: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + detail?: "connection-failed" | "invalid-metadata"; + /** + * The time that the identity provider was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the identity provider was last modified. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListScans { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListScans.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + scans?: { + /** + * The unique ID assigned to this scan. + * + */ + id: string; + /** + * The URL to the scan resource. + * + * example: + * /api/scans/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * If you provided a name for the scan, it will be returned here. + * + */ + name: string; + source?: { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + }; + status: + | "pending" + | "in-progress" + | "completed-with-findings" + | "completed-no-findings" + | "failed"; + details?: { + /** + * (optional) More details about the scan status. + * + * example: + * More details about the scan status + */ + detail?: string; + /** + * The time that the scan was requested. + * + * example: + * 2018-05-01T00:00:00Z + */ + requested: string; // date-time + /** + * The time that the scan started. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + started?: string; // date-time + /** + * The time that the scan was last updated. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the scan completed. This value will not be present if the scan has not yet completed. + * + * example: + * 2018-05-01T00:00:00Z + */ + completed?: string; // date-time + /** + * The image digest for the scanned image. This value will only be present for Docker scans. + * + * example: + * sha256:43ea500473edb96e079fe23aba62d60e09c11d4c4714ca284d50b80e064c05e3 + */ + digest?: string; + /** + * The target operating system for the scanned image. This value will only be present for Docker scans. + * + * example: + * linux + */ + os?: string; + /** + * The target architecture for the scanned image. This value will only be present for Docker scans. + * + * example: + * amd64 + */ + architecture?: string; + /** + * The labels associated with the scanned image. This value will only be present for Docker scans. + * example: + * [object Object] + */ + labels?: { + [name: string]: string; + }; + results: { + /** + * A layer identifier. For scans of type `docker`, this will be the layer's `digest` value. This attribute will not be present for scans of type `http`. + * + * example: + * sha256:77beb64c6eca68574566d5b04b9f64c71d9b7757a446d562b7d0ae4b13b7c467 + */ + id?: string; + /** + * For scans of Docker images, this attribute will show the time at which the layer was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + createdAt?: string; // date-time + /** + * For scans of Docker images, this attribute will show the Docker daemon command that ran to create this layer. This is not an exact match to the `Dockerfile` line, but will help to provide better context of the results. + * + * example: + * /bin/sh -c #(nop) ADD file:5d127078b2f213dbbf08ca35dafd027011606887a655f641024b14d93ee0de2f in /run-httpd.sh + */ + createdBy?: string; + /** + * If present, a URL pointing to the list of malware that was found. See List layer malware findings. + * + */ + malware?: string; + /** + * If present, a URL pointing to the list of vulnerabilities that were found. See List layer vulnerability findings. + * + */ + vulnerabilities?: string; + /** + * If present, a URL pointing to the list of content scan results that were found. See List layer content findings. + * + */ + contents?: string; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + }[]; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListSessions { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListSessions.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The list of sessions. + * + */ + sessions?: { + /** + * The session's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the session can be found. + * + * example: + * /api/sessions/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + user?: { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + }; + /** + * The session token. Use the session token the `Authorization` header of subsequent requests: ```Authorization: Bearer SAMPLEeyJhbGciOiJSUz...``` + * + * example: + * eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.AzuEel-o9NFJyTvfHx49jMZ-iwU-4NqMQduhUFvWKXXL2ZmMD1Id2ePFU-0ut-esku2avobI7uVDtfEbO6C-Zrn2S4cwsRHnUBCqgzcGwAFr4lHSGi8eAkMSn7b_ceNQu4aGAtDAnCNv3An3U9JUeq29Lze5Md5TTMUSZkFUZR15bJmSKgnd3GvAsIFyIbORmhs2Fe5E9q8jnuSFaeTvvRnlW48Po6bKC09MEhelrES5nnA2tLBu_hMB8VVaDjG7veOtLXrgkH7_6SdBDFZ8Yma_rgA0AwrtYtfQyNunVKctjDq0BE1OPNCJ45n1Cyr7i2TosnYwQUm-v1tX2LZn6g + */ + token?: string; + /** + * The time that the session was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the session was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + /** + * The time that the session will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + expires?: string; // datetime + /** + * The session name provided for this session. SAML identity providers can set this by including a `RoleSessionName` claim in the SAML response. + * + * example: + * alice + */ + roleSessionName?: string; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListUsers { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListUsers.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The list of users. + * + */ + users?: { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListVulnerabilityFindingOverrides { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListVulnerabilityFindingOverrides.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + vulnerabilities?: { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/vulnerabilities/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListWebhookHeaders { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListWebhookHeaders.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + headers?: { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ListWebhooks { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ListWebhooks.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + webhooks?: { + /** + * The URL at which the web hook can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href: string; + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name: string; + /** + * example: + * https://target.example.com/ + */ + hookURL: string; + headers: { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * example: + * true + */ + active: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events: ( + | "scan-requested" + | "scan-started" + | "scan-completed" + | "*")[]; + /** + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // date-time + /** + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }[]; + /** + * An encoded value that you can use to retrieve the next set of results for a query. If `next` is not present, then there are no more results available. + * + * example: + * dGhpcyB2YWx1ZSBpcyBvcGFxdWUsIGRlY29kaW5nIGl0IHdvbid0IGJlIHVzZWZ1bAo= + */ + next?: string; // byte + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + export interface MalwareScanResult { + /** + * The file where the malware was detected. + * + * example: + * path/to/file + */ + filename?: string; + icrc?: { + /** + * The name of the malware that was detected. + * + * example: + * Eicar_test_file + */ + name: string; + /** + * A link to more information about the detected malware. + * + * example: + * https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/eicar_test_file + */ + url: string; + }; + trendx?: { + found?: { + /** + * The name of the malware that was detected. + * + * example: + * Eicar_test_file + */ + name: string; + /** + * A link to more information about the detected malware. + * + * example: + * https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/eicar_test_file + */ + url: string; + }; + /** + * example: + * 100 + */ + confidence?: number; + related?: { + /** + * The name of related malware that was detected. + * + * example: + * Eicar_test_file + */ + name: string; + /** + * A link to more information about the detected malware. + * + * example: + * https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/eicar_test_file + */ + url: string; + }[]; + }; + } + namespace ModifyCollection { + export interface BodyParameters { + request?: SmartCheck.ModifyCollection.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyCollection.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The name of this ruleset collection. + * + * example: + * Smart Check collection + */ + name: string; + /** + * The global ruleset collection used for content scan. There can only be one default ruleset collection at all time. If this value is true, the value of other collection will be reset to false. + * + * example: + * true + */ + default?: boolean; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL to the collection resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * The name of this collection. + * + * example: + * Deep Security Smart Check Collection + */ + name?: string; + /** + * True if this is the default collection used for content scans. There can only be one default collection at all time. + * + * example: + * true + */ + default: boolean; + /** + * The rulesets belonging to this collection. + * + */ + rulesets?: { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + }[]; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifyContentFindingOverride { + export interface BodyParameters { + request?: SmartCheck.ModifyContentFindingOverride.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyContentFindingOverride.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/contents/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The filename for the finding being overridden. + * + * example: + * demo.pem + */ + filename?: string; + /** + * The rule that is being is overridden. Use `*` to override findings for all rules. + * + * example: + * private_keys_pem + */ + rule?: string; + /** + * The image registry where the finding is overridden. Use `*` to override findings in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the finding is overridden. Use `*` to override findings in all repositories. Use `organization/*` to override findings in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the finding is overridden. Use `*` to override findings in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing demo.pem private key for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifyRegistry { + export interface BodyParameters { + request?: SmartCheck.ModifyRegistry.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyRegistry.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The name to display for the registry. If not specified, the registry `host` value will be used as the initial name. + * + * example: + * My Registry + */ + name?: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. Required except when using Amazon Elastic Container Registry. + * + * example: + * registry.example.com + */ + host?: string; + /** + * Credentials to use when accessing the registry. + * + */ + credentials?: { + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * username + */ + username?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * ************ + */ + password?: string; // password + /** + * The AWS-specific information for authenticating to the registry. + * + */ + aws?: { + /** + * The AWS region identifier for the region where the registry is located. + * + * example: + * us-east-1 + */ + region: string; + /** + * The optional AWS IAM access key identifier to use when requesting the registry authorization token. If `roleID` is also set, then `accessKeyID` is the AWS IAM access key ID used to authorize the AWS STS `AssumeRole` request to assume the role. If `accessKeyID` is not set, then the default credential chain is used. + * + * example: + * AKIAIOSFODNN7EXAMPLE + */ + accessKeyID?: string; + /** + * The optional AWS IAM secret access key to use when requesting the registry authorization token. If `roleID` is also set, then `secretAccessKey` is the AWS IAM secret access key used to authorize the AWS STS `AssumeRole` request to assume the role. + * + * example: + * wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + */ + secretAccessKey?: string; + /** + * The optional AWS IAM role to assume when requesting the registry authorization token. If `accessKeyID` is also set, then `accessKeyID` and `secretAccessKey` are used to authorize the STS `AssumeRole` API request when assuming this role. If AccessKeyID is not set, then the default credential chain is used when assuming the role. + * + * example: + * arn:aws:iam::account-id:role/role-name + */ + role?: string; + /** + * The optional "external ID" to use when calling the AWS STS `AssumeRole` API to assume the role specified in `roleID`. The external ID may be required by the trust policy on the role being assumed. + * + * example: + * myExternalID + */ + externalID?: string; + /** + * The optional "role session name" to use when calling the AWS STS AssumeRole API to assume the role specified in `roleID`. If `roleSessionName` is not provided, then `DeepSecuritySmartCheck` will be used. + * + * example: + * DeepSecuritySmartCheck + */ + roleSessionName?: string; // ^[\w+=,.@-]*$ + /** + * The optional registry ID to use to get the registry authorization token. This can be used to access the registry in another AWS account. If not provided, the default registry will be used. + * + * example: + * account-id + */ + registry?: string; + }; + }; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + /** + * The registry object. Credentials will not be included in this object. + * + */ + export interface $200 { + /** + * The registry ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the registry can be found. + * + * example: + * /api/registries/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * The name to display for the registry. + * + * example: + * My Registry + */ + name: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. + * + * example: + * registry.example.com + */ + host?: string; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * Registry metrics. + * + */ + metrics?: { + /** + * Metrics capturing information about the content of the registry. + * + */ + content?: { + /** + * The number of repositories with content in the registry. + * + */ + repositories?: number; + /** + * The number of images in the registry. + * + */ + images?: number; + }; + /** + * Metrics capturing information about the scan status of images in the registry. + * + */ + scans?: { + /** + * The number of images in the registry that have not yet been scanned. + * + */ + pending?: number; + /** + * The number of images in the registry that are currently being scanned. + * + */ + inProgress?: number; + /** + * The number of images in the registry that have been scanned and have had no findings. + * + */ + ok?: number; + /** + * The number of images in the registry that have been scanned and have had findings. + * + */ + warnings?: number; + /** + * The number of images in the registry that have been scanned and have encountered errors during the scan. + * + */ + errors?: number; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * Aggregate metrics over a period of time. + * + */ + history?: { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + }; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + /** + * Reports the status of the connection from Deep Security Smart Check to the registry. + * * `pending`: Deep Security Smart Check has not yet attempted to connect to the registry + * * `ok`: The last connection attempt to the registry was successful. + * * `failed`: The last connection attempt to the registry failed. + * + * example: + * pending + */ + status: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + statusDetail?: string; + /** + * The time that the registry connection was created. + * + * example: + * 2017-04-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the registry connection was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifyRole { + export interface BodyParameters { + request?: SmartCheck.ModifyRole.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyRole.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The role's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the role can be found. + * + * example: + * /api/roles/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + /** + * The time that the role was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the role was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifyRuleset { + export interface BodyParameters { + request?: SmartCheck.ModifyRuleset.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyRuleset.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The name of this ruleset. + * + * example: + * Scanning rule + */ + name: string; + /** + * Base64-encoded yara rules. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this content scan ruleset. + * + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The name of this ruleset. + * + * example: + * Scanning ruleset + */ + name: string; + /** + * The URL to the ruleset resource. + * + * example: + * /api/collections/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff/rulesets/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * Base64-encoded yara ruleset. In some special rulesets, it will not be displayed. + * + * example: + * cnVsZSBkZXRlY3RvciB7IAoJY29uZGl0aW9uOgoJCXRydWUKfQo= + */ + ruleset?: string; + /** + * If set to true, this ruleset will not be used for scan. + * + * example: + * false + */ + disabled?: boolean; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifySAMLIdentityProvider { + export interface BodyParameters { + request?: SmartCheck.ModifySAMLIdentityProvider.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifySAMLIdentityProvider.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The SAML identity provider's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the SAML identity provider can be found. + * + * example: + * /api/identity-providers/saml/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * A name for the SAML identity provider. + * + * example: + * MyIdentityProvider + */ + name?: string; + /** + * (optional, default: `null`) A description for the SAML identity provider. + * + * example: + * My identity provider. Contact me@example.com for support. + */ + description?: string; + /** + * (optional, default: `null`) The URL for the identity provider metadata. If only the hostname is provided, the system will fill in the `https://[hostname]/FederationMetadata/2007-06/FederationMetadata.xml` template. Only one of `metadataURL` and `metadataXML` should be present. + * + * example: + * https://idp.example.com/FederationMetadata/2007-06/FederationMetadata.xml + */ + metadataURL?: string; + /** + * (optional, default: `false`) If `true`, Deep Security Smart Check will not verify TLS connections to the identity provider URL when retrieving the identity provider metadata. Use this only in controlled environments where you know that connections between Deep Security Smart Check and the identity provider are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided root CAs as the trusted root CAs when retrieving the identity provider metadata. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, Deep Security Smart Check will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided metadata XML for the identity provider. Only one of `metadataURL` and `metadataXML` should be present. + * + * example: + * PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxFbnRpdHlEZXNjcmlwdG9yLi4uCg== + */ + metadataXML?: string; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The role's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the role can be found. + * + * example: + * /api/roles/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + /** + * The time that the role was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the role was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifyUser { + export interface BodyParameters { + request?: SmartCheck.ModifyUser.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyUser.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * A unique name for the user. + * + * example: + * alice + */ + userID?: string; + /** + * A password for the user. + * + * example: + * ThIsIsNoTaGoOdPaSsWoRd! + */ + password?: string; // password + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role?: string; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifyVulnerabilityFindingOverride { + export interface BodyParameters { + request?: SmartCheck.ModifyVulnerabilityFindingOverride.Parameters.Request; + } + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyVulnerabilityFindingOverride.Parameters.XApiVersion; + } + namespace Parameters { + export interface Request { + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/vulnerabilities/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifyWebhook { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyWebhook.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The URL at which the web hook can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href: string; + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name: string; + /** + * example: + * https://target.example.com/ + */ + hookURL: string; + headers: { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * example: + * true + */ + active: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + /** + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // date-time + /** + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace ModifyWebhookHeader { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.ModifyWebhookHeader.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + namespace PingWebhook { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.PingWebhook.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + export interface Policy { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + } + namespace RefreshSession { + export interface HeaderParameters { + "X-Api-Version"?: SmartCheck.RefreshSession.Parameters.XApiVersion; + } + namespace Parameters { + export type XApiVersion = "2018-05-01"; + } + namespace Responses { + export interface $200 { + /** + * The session's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the session can be found. + * + * example: + * /api/sessions/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + user?: { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + }; + /** + * The session token. Use the session token the `Authorization` header of subsequent requests: ```Authorization: Bearer SAMPLEeyJhbGciOiJSUz...``` + * + * example: + * eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.AzuEel-o9NFJyTvfHx49jMZ-iwU-4NqMQduhUFvWKXXL2ZmMD1Id2ePFU-0ut-esku2avobI7uVDtfEbO6C-Zrn2S4cwsRHnUBCqgzcGwAFr4lHSGi8eAkMSn7b_ceNQu4aGAtDAnCNv3An3U9JUeq29Lze5Md5TTMUSZkFUZR15bJmSKgnd3GvAsIFyIbORmhs2Fe5E9q8jnuSFaeTvvRnlW48Po6bKC09MEhelrES5nnA2tLBu_hMB8VVaDjG7veOtLXrgkH7_6SdBDFZ8Yma_rgA0AwrtYtfQyNunVKctjDq0BE1OPNCJ45n1Cyr7i2TosnYwQUm-v1tX2LZn6g + */ + token?: string; + /** + * The time that the session was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the session was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + /** + * The time that the session will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + expires?: string; // datetime + /** + * The session name provided for this session. SAML identity providers can set this by including a `RoleSessionName` claim in the SAML response. + * + * example: + * alice + */ + roleSessionName?: string; + } + export interface $400 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $401 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $404 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $500 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + export interface $503 { + /** + * The error message will explain what went wrong and will attempt to give some hints as to how to fix it. + * + * example: + * Something went wrong. To fix it, try ... + */ + message: string; + /** + * If present, the `fields` object will indicate which input fields had errors; the attribute name will be the name of the input field and the value will be an error message. + * + */ + fields?: { + [name: string]: string; + }; + } + } + } + export interface RegistriesDashboard { + /** + * Metrics capturing information about the content of all registries. + * + */ + content?: { + /** + * The number of registries. + * + */ + registries?: number; + /** + * The number of repositories with content in all registries. + * + */ + repositories?: number; + /** + * The number of images in all registries. + * + */ + images?: number; + }; + /** + * Metrics capturing information about the scan status of images in all registries. + * + */ + scans?: { + /** + * The number of images in all registries that have not yet been scanned. + * + */ + pending?: number; + /** + * The number of images in all registries that are currently being scanned. + * + */ + inProgress?: number; + /** + * The number of images in all registries that have been scanned and have had no findings. + * + */ + ok?: number; + /** + * The number of images in all registries that have been scanned and have had findings. + * + */ + warnings?: number; + /** + * The number of images in all registries that have been scanned and have encountered errors during the scan. + * + */ + errors?: number; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * Aggregate metrics over a period of time. + * + */ + history?: { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed on images in all registries in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed on images in all registries in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + }; + } + /** + * The registry object. Credentials will not be included in this object. + * + */ + export interface Registry { + /** + * The registry ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the registry can be found. + * + * example: + * /api/registries/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * The name to display for the registry. + * + * example: + * My Registry + */ + name: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. + * + * example: + * registry.example.com + */ + host?: string; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * Registry metrics. + * + */ + metrics?: { + /** + * Metrics capturing information about the content of the registry. + * + */ + content?: { + /** + * The number of repositories with content in the registry. + * + */ + repositories?: number; + /** + * The number of images in the registry. + * + */ + images?: number; + }; + /** + * Metrics capturing information about the scan status of images in the registry. + * + */ + scans?: { + /** + * The number of images in the registry that have not yet been scanned. + * + */ + pending?: number; + /** + * The number of images in the registry that are currently being scanned. + * + */ + inProgress?: number; + /** + * The number of images in the registry that have been scanned and have had no findings. + * + */ + ok?: number; + /** + * The number of images in the registry that have been scanned and have had findings. + * + */ + warnings?: number; + /** + * The number of images in the registry that have been scanned and have encountered errors during the scan. + * + */ + errors?: number; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + /** + * Aggregate metrics over a period of time. + * + */ + history?: { + /** + * Metrics over the past 24 hours. + * + */ + "1d"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + /** + * Metrics over the past 7 days. + * + */ + "1w"?: { + /** + * The number of scans performed on images in the registry in the time period. Will be `-1` if there was an error calculating the value. + * + */ + scans?: number; + }; + }; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + /** + * Reports the status of the connection from Deep Security Smart Check to the registry. + * * `pending`: Deep Security Smart Check has not yet attempted to connect to the registry + * * `ok`: The last connection attempt to the registry was successful. + * * `failed`: The last connection attempt to the registry failed. + * + * example: + * pending + */ + status: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + statusDetail?: string; + /** + * The time that the registry connection was created. + * + * example: + * 2017-04-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the registry connection was last modified. + * + * example: + * 2017-04-01T00:00:00Z + */ + updated: string; // datetime + } + export interface RegistryRequest { + /** + * The name to display for the registry. If not specified, the registry `host` value will be used as the initial name. + * + * example: + * My Registry + */ + name?: string; + /** + * A longer-form note to attach to the registry. + * + * example: + * This registry is an example, and this description is similarly exemplary. + * + */ + description?: string; + /** + * The host where the registry can be found. Required except when using Amazon Elastic Container Registry. + * + * example: + * registry.example.com + */ + host?: string; + /** + * Credentials to use when accessing the registry. + * + */ + credentials?: { + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * username + */ + username?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * ************ + */ + password?: string; // password + /** + * The AWS-specific information for authenticating to the registry. + * + */ + aws?: { + /** + * The AWS region identifier for the region where the registry is located. + * + * example: + * us-east-1 + */ + region: string; + /** + * The optional AWS IAM access key identifier to use when requesting the registry authorization token. If `roleID` is also set, then `accessKeyID` is the AWS IAM access key ID used to authorize the AWS STS `AssumeRole` request to assume the role. If `accessKeyID` is not set, then the default credential chain is used. + * + * example: + * AKIAIOSFODNN7EXAMPLE + */ + accessKeyID?: string; + /** + * The optional AWS IAM secret access key to use when requesting the registry authorization token. If `roleID` is also set, then `secretAccessKey` is the AWS IAM secret access key used to authorize the AWS STS `AssumeRole` request to assume the role. + * + * example: + * wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + */ + secretAccessKey?: string; + /** + * The optional AWS IAM role to assume when requesting the registry authorization token. If `accessKeyID` is also set, then `accessKeyID` and `secretAccessKey` are used to authorize the STS `AssumeRole` API request when assuming this role. If AccessKeyID is not set, then the default credential chain is used when assuming the role. + * + * example: + * arn:aws:iam::account-id:role/role-name + */ + role?: string; + /** + * The optional "external ID" to use when calling the AWS STS `AssumeRole` API to assume the role specified in `roleID`. The external ID may be required by the trust policy on the role being assumed. + * + * example: + * myExternalID + */ + externalID?: string; + /** + * The optional "role session name" to use when calling the AWS STS AssumeRole API to assume the role specified in `roleID`. If `roleSessionName` is not provided, then `DeepSecuritySmartCheck` will be used. + * + * example: + * DeepSecuritySmartCheck + */ + roleSessionName?: string; // ^[\w+=,.@-]*$ + /** + * The optional registry ID to use to get the registry authorization token. This can be used to access the registry in another AWS account. If not provided, the default registry will be used. + * + * example: + * account-id + */ + registry?: string; + }; + }; + /** + * If `true`, Deep Security Smart Check will not verify TLS connections to the registry. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the registry are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the service will use the provided root CAs as the trusted root CAs for registry requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the service will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The filters that define the repositories and tags that will be synchronized from the registry. The maximum size of the filters for a registry is 32768 bytes. + * + * example: + * [object Object] + */ + filter?: { + /** + * A pattern to use when determining which images to synchronize (include) from the registry. + * + */ + include: string[]; + /** + * A pattern to use when determining which images to synchronize (exclude) from the registry. + * + */ + exclude: string[]; + }; + /** + * If `true`, this registry will be scheduled for daily re-scan. + * + */ + schedule?: boolean; + } + export interface RegistryScanRequest { + /** + * (optional) A descriptive name for the scan. + * + * example: + * (optional) a descriptive string + */ + name?: string; + /** + * The source of the image to scan. + * + */ + source?: { + /** + * The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + }; + /** + * (optional) A list of web hooks to call when events happen for the scan. + * + */ + webhooks?: { + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name?: string; + /** + * The URL that Deep Security Smart Check should `POST` the event payload to. + * + * example: + * https://target.example.com/ + */ + hookURL: string; + /** + * (optional) You can include your own headers in the web hook request. Use these to provide additional context or authentication information to your web hook receiver. + * + */ + headers?: { + /** + * The header name. + * example: + * Authorization + */ + name: string; + /** + * The header value. + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional) If you provide a `secret` value, then events sent over HTTP will include an `X-Scan-Event-Signature` header that is the SHA-256 HMAC of the event body using your secret as the key. + * + * *This value is write-only: the API will not return the secret or show that it has been set.* + * + * example: + * tHiSiSaBaDsEcReT + */ + secret?: string; // password + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * (optional, default: `false`). If `true`, the web hook will be invoked whenever a matching event occurs. + * + * example: + * true + */ + active?: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events?: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + }[]; + } + export interface ResultsMetrics { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of checklist findings by severity. + * + */ + checklists?: { + /** + * The total number of checklist findings by severity. + * + */ + total?: { + /** + * The number of "Defcon1" checklist findings. + * + */ + defcon1?: number; + /** + * The number of critical checklist findings. + * + */ + critical?: number; + /** + * The number of high-severity checklist findings. + * + */ + high?: number; + /** + * The number of medium-severity checklist findings. + * + */ + medium?: number; + /** + * The number of low-severity checklist findings. + * + */ + low?: number; + /** + * The number of negligible checklist findings. + * + */ + negligible?: number; + /** + * The number of checklist findings with unknown severity. + * + */ + unknown?: number; + }; + /** + * The number of unresolved checklist findings by severity. + */ + unresolved?: { + /** + * The number of "Defcon1" checklist findings. + * + */ + defcon1?: number; + /** + * The number of critical checklist findings. + * + */ + critical?: number; + /** + * The number of high-severity checklist findings. + * + */ + high?: number; + /** + * The number of medium-severity checklist findings. + * + */ + medium?: number; + /** + * The number of low-severity checklist findings. + * + */ + low?: number; + /** + * The number of negligible checklist findings. + * + */ + negligible?: number; + /** + * The number of checklist findings with unknown severity. + * + */ + unknown?: number; + }; + }; + } + export interface Role { + /** + * The role's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the role can be found. + * + * example: + * /api/roles/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + /** + * The time that the role was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the role was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface RoleRequest { + /** + * A name for the role. + * + * example: + * Administrator + */ + name: string; + /** + * A description for the role. + * + * example: + * An administrator has full access to all operations. + */ + description?: string; + /** + * A list of policies for the role. The total size of the policy list must be less than 32768 bytes. + * + */ + policies: { + /** + * The policy format version. + * + * example: + * 2018-05-01 + */ + version?: "2018-05-01"; + /** + * The list of statements in the policy. + * + */ + statements?: { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + }[]; + }[]; + } + export interface SAMLIdentityProvider { + /** + * The SAML identity provider's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the SAML identity provider can be found. + * + * example: + * /api/identity-providers/saml/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * A name for the SAML identity provider. + * + * example: + * MyIdentityProvider + */ + name?: string; + /** + * (optional, default: `null`) A description for the SAML identity provider. + * + * example: + * My identity provider. Contact me@example.com for support. + */ + description?: string; + /** + * (optional, default: `null`) The URL for the identity provider metadata. If only the hostname is provided, the system will fill in the `https://[hostname]/FederationMetadata/2007-06/FederationMetadata.xml` template. Only one of `metadataURL` and `metadataXML` should be present. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * https://idp.example.com/FederationMetadata/2007-06/FederationMetadata.xml + */ + metadataURL?: string; + /** + * (optional, default: `false`) If `true`, Deep Security Smart Check will not verify TLS connections to the identity provider URL when retrieving the identity provider metadata. Use this only in controlled environments where you know that connections between Deep Security Smart Check and the identity provider are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided root CAs as the trusted root CAs when retrieving the identity provider metadata. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, Deep Security Smart Check will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * The time that the identity provider's certificate will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + validUntil?: string; // datetime + /** + * Overall status of the identity provider. If the status is `failed`, the `detail` attribute will have more information. + * + * example: + * ok + */ + status?: "pending" | "ok" | "failed"; + /** + * Reports additional detail when the status is `failed`. + * + * example: + * + */ + detail?: "connection-failed" | "invalid-metadata"; + /** + * The time that the identity provider was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the identity provider was last modified. If the `metadataURL` is present, Deep Security Smart Check will periodically retrieve the identity provider metadata. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + } + export interface SAMLIdentityProviderRequest { + /** + * The SAML identity provider's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the SAML identity provider can be found. + * + * example: + * /api/identity-providers/saml/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + /** + * A name for the SAML identity provider. + * + * example: + * MyIdentityProvider + */ + name?: string; + /** + * (optional, default: `null`) A description for the SAML identity provider. + * + * example: + * My identity provider. Contact me@example.com for support. + */ + description?: string; + /** + * (optional, default: `null`) The URL for the identity provider metadata. If only the hostname is provided, the system will fill in the `https://[hostname]/FederationMetadata/2007-06/FederationMetadata.xml` template. Only one of `metadataURL` and `metadataXML` should be present. + * + * example: + * https://idp.example.com/FederationMetadata/2007-06/FederationMetadata.xml + */ + metadataURL?: string; + /** + * (optional, default: `false`) If `true`, Deep Security Smart Check will not verify TLS connections to the identity provider URL when retrieving the identity provider metadata. Use this only in controlled environments where you know that connections between Deep Security Smart Check and the identity provider are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided root CAs as the trusted root CAs when retrieving the identity provider metadata. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, Deep Security Smart Check will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * (optional, default: `null`) If present, Deep Security Smart Check will use the provided metadata XML for the identity provider. Only one of `metadataURL` and `metadataXML` should be present. + * + * example: + * PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxFbnRpdHlEZXNjcmlwdG9yLi4uCg== + */ + metadataXML?: string; + } + export interface Scan { + /** + * The unique ID assigned to this scan. + * + */ + id: string; + /** + * The URL to the scan resource. + * + * example: + * /api/scans/60e53669-c8ef-4d0f-a8ff-3dbbb098d8ff + */ + href: string; + /** + * If you provided a name for the scan, it will be returned here. + * + */ + name: string; + source?: { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + }; + status: + | "pending" + | "in-progress" + | "completed-with-findings" + | "completed-no-findings" + | "failed"; + details?: { + /** + * (optional) More details about the scan status. + * + * example: + * More details about the scan status + */ + detail?: string; + /** + * The time that the scan was requested. + * + * example: + * 2018-05-01T00:00:00Z + */ + requested: string; // date-time + /** + * The time that the scan started. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + started?: string; // date-time + /** + * The time that the scan was last updated. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the scan completed. This value will not be present if the scan has not yet completed. + * + * example: + * 2018-05-01T00:00:00Z + */ + completed?: string; // date-time + /** + * The image digest for the scanned image. This value will only be present for Docker scans. + * + * example: + * sha256:43ea500473edb96e079fe23aba62d60e09c11d4c4714ca284d50b80e064c05e3 + */ + digest?: string; + /** + * The target operating system for the scanned image. This value will only be present for Docker scans. + * + * example: + * linux + */ + os?: string; + /** + * The target architecture for the scanned image. This value will only be present for Docker scans. + * + * example: + * amd64 + */ + architecture?: string; + /** + * The labels associated with the scanned image. This value will only be present for Docker scans. + * example: + * [object Object] + */ + labels?: { + [name: string]: string; + }; + results: { + /** + * A layer identifier. For scans of type `docker`, this will be the layer's `digest` value. This attribute will not be present for scans of type `http`. + * + * example: + * sha256:77beb64c6eca68574566d5b04b9f64c71d9b7757a446d562b7d0ae4b13b7c467 + */ + id?: string; + /** + * For scans of Docker images, this attribute will show the time at which the layer was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + createdAt?: string; // date-time + /** + * For scans of Docker images, this attribute will show the Docker daemon command that ran to create this layer. This is not an exact match to the `Dockerfile` line, but will help to provide better context of the results. + * + * example: + * /bin/sh -c #(nop) ADD file:5d127078b2f213dbbf08ca35dafd027011606887a655f641024b14d93ee0de2f in /run-httpd.sh + */ + createdBy?: string; + /** + * If present, a URL pointing to the list of malware that was found. See List layer malware findings. + * + */ + malware?: string; + /** + * If present, a URL pointing to the list of vulnerabilities that were found. See List layer vulnerability findings. + * + */ + vulnerabilities?: string; + /** + * If present, a URL pointing to the list of content scan results that were found. See List layer content findings. + * + */ + contents?: string; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + }[]; + }; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of checklist findings by severity. + * + */ + checklists?: { + /** + * The total number of checklist findings by severity. + * + */ + total?: { + /** + * The number of "Defcon1" checklist findings. + * + */ + defcon1?: number; + /** + * The number of critical checklist findings. + * + */ + critical?: number; + /** + * The number of high-severity checklist findings. + * + */ + high?: number; + /** + * The number of medium-severity checklist findings. + * + */ + medium?: number; + /** + * The number of low-severity checklist findings. + * + */ + low?: number; + /** + * The number of negligible checklist findings. + * + */ + negligible?: number; + /** + * The number of checklist findings with unknown severity. + * + */ + unknown?: number; + }; + /** + * The number of unresolved checklist findings by severity. + */ + unresolved?: { + /** + * The number of "Defcon1" checklist findings. + * + */ + defcon1?: number; + /** + * The number of critical checklist findings. + * + */ + critical?: number; + /** + * The number of high-severity checklist findings. + * + */ + high?: number; + /** + * The number of medium-severity checklist findings. + * + */ + medium?: number; + /** + * The number of low-severity checklist findings. + * + */ + low?: number; + /** + * The number of negligible checklist findings. + * + */ + negligible?: number; + /** + * The number of checklist findings with unknown severity. + * + */ + unknown?: number; + }; + }; + }; + } + export interface ScanRequest { + /** + * (optional) A descriptive name for the scan. + * + * example: + * (optional) a descriptive string + */ + name?: string; + /** + * The source of the image to scan. + * + */ + source: { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + credentials?: { + /** + * (optional) Use this if your source requires requests to be authorized using a bearer token. Requests will include an `Authorization: Bearer {token}` header. + * + * example: + * 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + token?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * username + */ + username?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * ************ + */ + password?: string; // password + /** + * The AWS-specific information for authenticating to the registry. + * + */ + aws?: { + /** + * The AWS region identifier for the region where the registry is located. + * + * example: + * us-east-1 + */ + region: string; + /** + * The optional AWS IAM access key identifier to use when requesting the registry authorization token. If `roleID` is also set, then `accessKeyID` is the AWS IAM access key ID used to authorize the AWS STS `AssumeRole` request to assume the role. If `accessKeyID` is not set, then the default credential chain is used. + * + * example: + * AKIAIOSFODNN7EXAMPLE + */ + accessKeyID?: string; + /** + * The optional AWS IAM secret access key to use when requesting the registry authorization token. If `roleID` is also set, then `secretAccessKey` is the AWS IAM secret access key used to authorize the AWS STS `AssumeRole` request to assume the role. + * + * example: + * wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + */ + secretAccessKey?: string; + /** + * The optional AWS IAM role to assume when requesting the registry authorization token. If `accessKeyID` is also set, then `accessKeyID` and `secretAccessKey` are used to authorize the STS `AssumeRole` API request when assuming this role. If AccessKeyID is not set, then the default credential chain is used when assuming the role. + * + * example: + * arn:aws:iam::account-id:role/role-name + */ + role?: string; + /** + * The optional "external ID" to use when calling the AWS STS `AssumeRole` API to assume the role specified in `roleID`. The external ID may be required by the trust policy on the role being assumed. + * + * example: + * myExternalID + */ + externalID?: string; + /** + * The optional "role session name" to use when calling the AWS STS AssumeRole API to assume the role specified in `roleID`. If `roleSessionName` is not provided, then `DeepSecuritySmartCheck` will be used. + * + * example: + * DeepSecuritySmartCheck + */ + roleSessionName?: string; // ^[\w+=,.@-]*$ + /** + * The optional registry ID to use to get the registry authorization token. This can be used to access the registry in another AWS account. If not provided, the default registry will be used. + * + * example: + * account-id + */ + registry?: string; + }; + }; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS source requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, source requests will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + }; + /** + * (optional) A list of web hooks to call when events happen for the scan. + * + */ + webhooks?: { + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name?: string; + /** + * The URL that Deep Security Smart Check should `POST` the event payload to. + * + * example: + * https://target.example.com/ + */ + hookURL: string; + /** + * (optional) You can include your own headers in the web hook request. Use these to provide additional context or authentication information to your web hook receiver. + * + */ + headers?: { + /** + * The header name. + * example: + * Authorization + */ + name: string; + /** + * The header value. + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional) If you provide a `secret` value, then events sent over HTTP will include an `X-Scan-Event-Signature` header that is the SHA-256 HMAC of the event body using your secret as the key. + * + * *This value is write-only: the API will not return the secret or show that it has been set.* + * + * example: + * tHiSiSaBaDsEcReT + */ + secret?: string; // password + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * (optional, default: `false`). If `true`, the web hook will be invoked whenever a matching event occurs. + * + * example: + * true + */ + active?: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events?: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + }[]; + } + export interface ScanStatusDetails { + /** + * (optional) More details about the scan status. + * + * example: + * More details about the scan status + */ + detail?: string; + /** + * The time that the scan was requested. + * + * example: + * 2018-05-01T00:00:00Z + */ + requested: string; // date-time + /** + * The time that the scan started. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + started?: string; // date-time + /** + * The time that the scan was last updated. This value will not be present if the scan has not yet started. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the scan completed. This value will not be present if the scan has not yet completed. + * + * example: + * 2018-05-01T00:00:00Z + */ + completed?: string; // date-time + /** + * The image digest for the scanned image. This value will only be present for Docker scans. + * + * example: + * sha256:43ea500473edb96e079fe23aba62d60e09c11d4c4714ca284d50b80e064c05e3 + */ + digest?: string; + /** + * The target operating system for the scanned image. This value will only be present for Docker scans. + * + * example: + * linux + */ + os?: string; + /** + * The target architecture for the scanned image. This value will only be present for Docker scans. + * + * example: + * amd64 + */ + architecture?: string; + /** + * The labels associated with the scanned image. This value will only be present for Docker scans. + * example: + * [object Object] + */ + labels?: { + [name: string]: string; + }; + results: { + /** + * A layer identifier. For scans of type `docker`, this will be the layer's `digest` value. This attribute will not be present for scans of type `http`. + * + * example: + * sha256:77beb64c6eca68574566d5b04b9f64c71d9b7757a446d562b7d0ae4b13b7c467 + */ + id?: string; + /** + * For scans of Docker images, this attribute will show the time at which the layer was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + createdAt?: string; // date-time + /** + * For scans of Docker images, this attribute will show the Docker daemon command that ran to create this layer. This is not an exact match to the `Dockerfile` line, but will help to provide better context of the results. + * + * example: + * /bin/sh -c #(nop) ADD file:5d127078b2f213dbbf08ca35dafd027011606887a655f641024b14d93ee0de2f in /run-httpd.sh + */ + createdBy?: string; + /** + * If present, a URL pointing to the list of malware that was found. See List layer malware findings. + * + */ + malware?: string; + /** + * If present, a URL pointing to the list of vulnerabilities that were found. See List layer vulnerability findings. + * + */ + vulnerabilities?: string; + /** + * If present, a URL pointing to the list of content scan results that were found. See List layer content findings. + * + */ + contents?: string; + findings?: { + /** + * Metadata about the scanners that produced the results. + * + */ + scanners?: { + /** + * Metadata for the malware scanner. + * + */ + malware?: { + /** + * Availability of the malware scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the malware pattern database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + versions?: { + /** + * The ICRC pattern version. + * + */ + icrc?: string; + /** + * The TrendX pattern version. + * + */ + trendX?: string; + /** + * The malware blacklist pattern version. + * + */ + blacklist?: string; + }; + }; + /** + * Metadata for the vulnerability scanner. + * + */ + vulnerabilities?: { + /** + * Availability of the vulnerability scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerabilities database was last updated. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + /** + * Metadata for the vulnerability pattern scanner. + * + */ + vulnerabilityPatterns?: { + /** + * Availability of the vulnerability pattern scanner. + * + */ + status?: "ok" | "unavailable"; + /** + * The time that the vulnerability patterns were last published. + * + * example: + * 2018-05-01T00:00:00Z + */ + date?: string; // date-time + /** + * The time that the vulnerability patterns were last synchronized from the vulnerability feed. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + }; + }; + /** + * The number of malware items that were found. + * high: + * + */ + malware?: number; + /** + * The number of content findings found by severity. + * + */ + contents?: { + /** + * The total number of content findings categorized by severity. + * + */ + total?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved content findings that were found by severity. Unresolved content findings are content findings that were found in the image and were not resolved by an override. + * + */ + unresolved?: { + /** + * The number of "Defcon1" content findings that were found. + * + */ + defcon1?: number; + /** + * The number of critical content findings that were found. + * + */ + critical?: number; + /** + * The number of high-severity content findings that were found. + * + */ + high?: number; + /** + * The number of medium-severity content findings that were found. + * + */ + medium?: number; + /** + * The number of low-severity content findings that were found. + * + */ + low?: number; + /** + * The number of negligible content findings that were found. + * + */ + negligible?: number; + /** + * The number of content findings with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + /** + * The number of vulnerabilities found by severity. + * + */ + vulnerabilities?: { + /** + * The total number of vulnerabilities that were found by severity. + * + */ + total?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + /** + * The number of unresolved vulnerabilities that were found by severity. Unresolved vulnerabilities are vulnerabilities that were found in a layer and were not fixed by an update in a subsequent layer. + * + */ + unresolved?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + }; + }; + }[]; + } + export interface Session { + /** + * The session's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id?: string; + /** + * The URL at which the session can be found. + * + * example: + * /api/sessions/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href?: string; + user?: { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + }; + /** + * The session token. Use the session token the `Authorization` header of subsequent requests: ```Authorization: Bearer SAMPLEeyJhbGciOiJSUz...``` + * + * example: + * eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.AzuEel-o9NFJyTvfHx49jMZ-iwU-4NqMQduhUFvWKXXL2ZmMD1Id2ePFU-0ut-esku2avobI7uVDtfEbO6C-Zrn2S4cwsRHnUBCqgzcGwAFr4lHSGi8eAkMSn7b_ceNQu4aGAtDAnCNv3An3U9JUeq29Lze5Md5TTMUSZkFUZR15bJmSKgnd3GvAsIFyIbORmhs2Fe5E9q8jnuSFaeTvvRnlW48Po6bKC09MEhelrES5nnA2tLBu_hMB8VVaDjG7veOtLXrgkH7_6SdBDFZ8Yma_rgA0AwrtYtfQyNunVKctjDq0BE1OPNCJ45n1Cyr7i2TosnYwQUm-v1tX2LZn6g + */ + token?: string; + /** + * The time that the session was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created?: string; // datetime + /** + * The time that the session was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // datetime + /** + * The time that the session will expire. + * + * example: + * 2018-05-01T00:00:00Z + */ + expires?: string; // datetime + /** + * The session name provided for this session. SAML identity providers can set this by including a `RoleSessionName` claim in the SAML response. + * + * example: + * alice + */ + roleSessionName?: string; + } + export interface SessionRequest { + /** + * The user to create a session for. + * + */ + user?: { + /** + * The user's ID. + * + * example: + * alice + */ + userID: string; + /** + * The user's password. + * + * example: + * ThIsIsNoTaGoOdPaSsWoRd! + */ + password: string; // password + }; + /** + * The SAML response to create a session for. + * + */ + saml?: { + /** + * The Base64-encoded SAML response. + * + * example: + * PFJlc3BvbnNlPi4uLgo= + */ + response: string; + /** + * If multiple role claims are present in the SAML response, set `selectedRole` to the role value that you want to assume for this session. Required if multiple role claims are present in the SAML response. + * + * example: + * administrator + */ + selectedRole?: string; + }; + } + export interface Source { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + } + /** + * The source of the image to scan. + * + */ + export interface SourceRequest { + type: "docker"; + /** + * (for scan type `docker` only) The registry hostname or IP address. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * (for scan type `docker` only) The repository name. + * + * example: + * organization/project + */ + repository?: string; + /** + * (for scan type `docker` only) The tag of the image to scan. + * + * example: + * latest + */ + tag?: string; + /** + * (for scan type `docker` only) The digest value of the image to scan. + * + * example: + * sha256:02892826401a9d18f0ea01f8a2f35d328ef039db4e1edcc45c630314a0457d5b + */ + digest?: string; + credentials?: { + /** + * (optional) Use this if your source requires requests to be authorized using a bearer token. Requests will include an `Authorization: Bearer {token}` header. + * + * example: + * 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + token?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * username + */ + username?: string; + /** + * (optional) Use this if your source requires requests to be authorized using basic username + password authentication. Requests will include an `Authorization: Basic {encoded username + password}` header. + * + * example: + * ************ + */ + password?: string; // password + /** + * The AWS-specific information for authenticating to the registry. + * + */ + aws?: { + /** + * The AWS region identifier for the region where the registry is located. + * + * example: + * us-east-1 + */ + region: string; + /** + * The optional AWS IAM access key identifier to use when requesting the registry authorization token. If `roleID` is also set, then `accessKeyID` is the AWS IAM access key ID used to authorize the AWS STS `AssumeRole` request to assume the role. If `accessKeyID` is not set, then the default credential chain is used. + * + * example: + * AKIAIOSFODNN7EXAMPLE + */ + accessKeyID?: string; + /** + * The optional AWS IAM secret access key to use when requesting the registry authorization token. If `roleID` is also set, then `secretAccessKey` is the AWS IAM secret access key used to authorize the AWS STS `AssumeRole` request to assume the role. + * + * example: + * wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + */ + secretAccessKey?: string; + /** + * The optional AWS IAM role to assume when requesting the registry authorization token. If `accessKeyID` is also set, then `accessKeyID` and `secretAccessKey` are used to authorize the STS `AssumeRole` API request when assuming this role. If AccessKeyID is not set, then the default credential chain is used when assuming the role. + * + * example: + * arn:aws:iam::account-id:role/role-name + */ + role?: string; + /** + * The optional "external ID" to use when calling the AWS STS `AssumeRole` API to assume the role specified in `roleID`. The external ID may be required by the trust policy on the role being assumed. + * + * example: + * myExternalID + */ + externalID?: string; + /** + * The optional "role session name" to use when calling the AWS STS AssumeRole API to assume the role specified in `roleID`. If `roleSessionName` is not provided, then `DeepSecuritySmartCheck` will be used. + * + * example: + * DeepSecuritySmartCheck + */ + roleSessionName?: string; // ^[\w+=,.@-]*$ + /** + * The optional registry ID to use to get the registry authorization token. This can be used to access the registry in another AWS account. If not provided, the default registry will be used. + * + * example: + * account-id + */ + registry?: string; + }; + }; + /** + * (optional, default: `false`) If `true`, the scan will not verify TLS connections to the source URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the source are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS source requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, source requests will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + } + export interface Statement { + /** + * The policy effect if the statement matches. + * + * example: + * allow + */ + effect?: "allow" | "deny"; + /** + * A list of actions. Actions take the form `resourceType:operation` and can have a wildcard in either the `resourceType` or `operation` part. You can also use `*` to match all actions. The required action is listed with each API operation. + * + */ + actions?: string[]; + } + export interface User { + /** + * The user's unique system identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + id: string; + /** + * The URL at which the user can be found. + * + * example: + * /api/users/6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + href: string; + /** + * A unique name for the user. + * + * example: + * alice + */ + userID: string; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role identifier. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role: string; + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * The time that the user was created. + * + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // datetime + /** + * The time that the user was last modified. + * + * example: + * 2018-05-01T00:00:00Z + */ + updated: string; // datetime + } + export interface UserRequest { + /** + * A unique name for the user. + * + * example: + * alice + */ + userID?: string; + /** + * A password for the user. + * + * example: + * ThIsIsNoTaGoOdPaSsWoRd! + */ + password?: string; // password + /** + * If `true`, the user will not be able to perform any actions until they change their password. + * + * example: + * false + */ + passwordChangeRequired?: boolean; + /** + * A display name for the user. + * + * example: + * Alice Panoptes + */ + name?: string; + /** + * A description for the user. + * + * example: + * Guardian of the heifer Io. + */ + description?: string; + /** + * The user's role ID. + * + * example: + * 6552eebd-5172-411e-ac71-8c323e6ca0fe + */ + role?: string; + } + export interface Vulnerability { + /** + * A description of the known vulnerability in this package. + * + */ + description: string; + /** + * The version of the package where the vulnerability has been resolved. + * + */ + fixedBy?: string; + /** + * If present, this object will describe the fix and what layer the fix is present in. + * + */ + fixed?: { + /** + * The name of the package. + * + */ + name?: string; + /** + * The namespace that the package `name` is unique within. + * + */ + namespaceName?: string; + /** + * The package version that was detected. + * + */ + version?: string; + /** + * The version format. + * + */ + versionFormat?: string; + /** + * The layer identifier where the fixed package version was detected. + * + */ + layer?: string; + }; + override?: { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/vulnerabilities/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + }; + /** + * A link to more information about the vulnerability. + * + */ + link?: string; + /** + * The name of the vulnerability. + * + */ + name: string; + /** + * The namespace that the package `name` is unique within. + * + */ + namespaceName?: string; + /** + * The severity assigned to the vulnerability: + * * `defcon1`: is a `critical` problem which has been manually highlighted by the team. It requires immediate attention. + * * `critical`: a world-burning problem, exploitable for nearly all people in a default installation of Linux. Includes remote root privilege escalations, or massive data loss. + * * `high`: a real problem, exploitable for many people in a default installation. Includes serious remote denial of services, local root privilege escalations, or data loss. + * * `medium`: a real security problem, and is exploitable for many people. Includes network daemon denial of service attacks, cross-site scripting, and gaining user privileges. Updates should be made soon for this priority of issue. + * * `low`: a security problem, but is hard to exploit due to environment, requires a user-assisted attack, a small install base, or does very little damage. These tend to be included in security updates only when higher-priority issues require an upgrade, or if many low-priority issues have built up. + * * `negligible`: is technically a security problem, but is only theoretical in nature, requires a very special situation, has almost no install base, or does no real damage. These tend not to get backported from upstreams, and will likely not be included in security updates unless there is an easy fix and some other issue causes an update. + * + * example: + * high + */ + severity: + | "defcon1" + | "critical" + | "high" + | "medium" + | "low" + | "negligible" + | "unknown"; + } + export interface VulnerabilityFindingOverride { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/vulnerabilities/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface VulnerabilityFindingOverrideRequest { + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + } + export interface VulnerabilityScanResult { + /** + * The name of an installed package with known vulnerabilities. + * + */ + name: string; + /** + * The namespace that the package `name` is unique within. + * + */ + namespaceName?: string; + /** + * The package version that was detected. + * + */ + version?: string; + /** + * The version format. + * + */ + versionFormat?: string; + /** + * A list of the known vulnerabilities in this package. + * + */ + vulnerabilities: { + /** + * A description of the known vulnerability in this package. + * + */ + description: string; + /** + * The version of the package where the vulnerability has been resolved. + * + */ + fixedBy?: string; + /** + * If present, this object will describe the fix and what layer the fix is present in. + * + */ + fixed?: { + /** + * The name of the package. + * + */ + name?: string; + /** + * The namespace that the package `name` is unique within. + * + */ + namespaceName?: string; + /** + * The package version that was detected. + * + */ + version?: string; + /** + * The version format. + * + */ + versionFormat?: string; + /** + * The layer identifier where the fixed package version was detected. + * + */ + layer?: string; + }; + override?: { + /** + * The unique ID assigned to this override. + * + * example: + * 7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + id?: string; + /** + * The URL to the override. + * + * example: + * /api/overrides/vulnerabilities/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href?: string; + /** + * The name of the vulnerability being overridden. + * + * example: + * CVE-2019-00000 + */ + name?: string; + /** + * The package where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all packages. + * + * example: + * sample-package + */ + package?: string; + /** + * The package version where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all package versions. + * + * example: + * 0.0.1 + */ + version?: string; + /** + * The image registry where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all registries. + * + * example: + * registry.example.com + */ + registry?: string; + /** + * The image repository where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all repositories. Use `organization/*` to override findings for this vulnerability in all repositories under `organization`. + * + * example: + * organization/project + */ + repository?: string; + /** + * The image tag where the vulnerability is overridden. Use `*` to override findings for this vulnerability in all image tags. + * + * example: + * latest + */ + tag?: string; + /** + * The time that the override was created. + * + * example: + * 2019-03-01T00:00:00Z + */ + created?: string; // date-time + /** + * The time that the override was last updated. + * + * example: + * 2019-03-01T00:00:00Z + */ + updated?: string; // date-time + /** + * The time that the override expires. If not present, the override will not expire. + * + * example: + * 2019-04-01T00:00:00Z + */ + expires?: string; // date-time + /** + * A free-form comment field for your notes. + * + * example: + * Allowing CVE-2019-00000 for 30 days. Contact alice@example.com for details. + */ + comment?: string; + }; + /** + * A link to more information about the vulnerability. + * + */ + link?: string; + /** + * The name of the vulnerability. + * + */ + name: string; + /** + * The namespace that the package `name` is unique within. + * + */ + namespaceName?: string; + /** + * The severity assigned to the vulnerability: + * * `defcon1`: is a `critical` problem which has been manually highlighted by the team. It requires immediate attention. + * * `critical`: a world-burning problem, exploitable for nearly all people in a default installation of Linux. Includes remote root privilege escalations, or massive data loss. + * * `high`: a real problem, exploitable for many people in a default installation. Includes serious remote denial of services, local root privilege escalations, or data loss. + * * `medium`: a real security problem, and is exploitable for many people. Includes network daemon denial of service attacks, cross-site scripting, and gaining user privileges. Updates should be made soon for this priority of issue. + * * `low`: a security problem, but is hard to exploit due to environment, requires a user-assisted attack, a small install base, or does very little damage. These tend to be included in security updates only when higher-priority issues require an upgrade, or if many low-priority issues have built up. + * * `negligible`: is technically a security problem, but is only theoretical in nature, requires a very special situation, has almost no install base, or does no real damage. These tend not to get backported from upstreams, and will likely not be included in security updates unless there is an easy fix and some other issue causes an update. + * + * example: + * high + */ + severity: + | "defcon1" + | "critical" + | "high" + | "medium" + | "low" + | "negligible" + | "unknown"; + }[]; + findings?: { + /** + * The number of "Defcon1" vulnerabilities that were found. + * + */ + defcon1?: number; + /** + * The number of critical vulnerabilities that were found. + * + */ + critical?: number; + /** + * The number of high-severity vulnerabilities that were found. + * + */ + high?: number; + /** + * The number of medium-severity vulnerabilities that were found. + * + */ + medium?: number; + /** + * The number of low-severity vulnerabilities that were found. + * + */ + low?: number; + /** + * The number of negligible vulnerabilities that were found. + * + */ + negligible?: number; + /** + * The number of vulnerabilities with unknown severity that were found. + * + */ + unknown?: number; + }; + } + export interface Webhook { + /** + * The URL at which the web hook can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8 + */ + href: string; + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name: string; + /** + * example: + * https://target.example.com/ + */ + hookURL: string; + headers: { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * example: + * true + */ + active: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + /** + * example: + * 2018-05-01T00:00:00Z + */ + created: string; // date-time + /** + * example: + * 2018-05-01T00:00:00Z + */ + updated?: string; // date-time + } + export interface WebhookHeader { + /** + * example: + * 6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + id: string; + /** + * The URL at which the web hook header can be found. + * + * example: + * /api/webhooks/7a2f1d8c-7780-41d2-821b-7230005d4be8/headers/6af2e0e1-bb7c-45b7-9a3f-152a80d154eb + */ + href: string; + /** + * example: + * Authorization + */ + name: string; + /** + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + } + export interface WebhookHeaderRequest { + /** + * The header name. + * example: + * Authorization + */ + name: string; + /** + * The header value. + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + } + export interface WebhookRequest { + /** + * (optional) A descriptive name for the web hook. + * + * example: + * (optional) a descriptive string + */ + name?: string; + /** + * The URL that Deep Security Smart Check should `POST` the event payload to. + * + * example: + * https://target.example.com/ + */ + hookURL: string; + /** + * (optional) You can include your own headers in the web hook request. Use these to provide additional context or authentication information to your web hook receiver. + * + */ + headers?: { + /** + * The header name. + * example: + * Authorization + */ + name: string; + /** + * The header value. + * example: + * Bearer 9515e65f46cb737cd8c191db2fd80bbd05686e5992b241e8ad7727510b7142e6 + */ + value: string; + }[]; + /** + * (optional) If you provide a `secret` value, then events sent over HTTP will include an `X-Scan-Event-Signature` header that is the SHA-256 HMAC of the event body using your secret as the key. + * + * *This value is write-only: the API will not return the secret or show that it has been set.* + * + * example: + * tHiSiSaBaDsEcReT + */ + secret?: string; // password + /** + * (optional, default: `false`) If `true`, the web hook will not verify TLS connections to the web hook URL. Use this only in controlled environments where you know that connections between the Deep Security Smart Check scanner and the hook URL are secured by other means. + * + * example: + * false + */ + insecureSkipVerify?: boolean; + /** + * (optional, default: `null`) If present, the web hook will use the provided root CAs as the trusted root CAs for HTTPS web hook requests. The value should be a base-64 encoded list of PEM-encoded certificates. If not present, the web hook will use a set of built-in trusted root CAs. + * If `insecureSkipVerify` is set to `true`, then the root CAs are not checked. + * + * example: + * LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLiBhbmQgc28gb24gLi4uCg== + */ + rootCAs?: string; + /** + * (optional, default: `false`). If `true`, the web hook will be invoked whenever a matching event occurs. + * + * example: + * true + */ + active?: boolean; + /** + * (optional, default: `["*"]`) If present, this is a list of event types that will be checked before calling the web hook. If the event type matches one of the elements of the list, the web hook will be called. If the list is empty, *all* events will match. + * + */ + events?: ("scan-requested" | "scan-started" | "scan-completed" | "*")[]; + } +} diff --git a/tsconfig.json b/tsconfig.json index 1f92081..0c8dfa4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,19 +1,20 @@ { "compilerOptions": { "sourceMap": true, - "target": "es2017", + "target": "es2018", "lib": ["esnext"], - "module": "commonjs", + "module": "esnext", "moduleResolution": "node", "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, "strictNullChecks": true, - "allowJs": true, + "resolveJsonModule": true, + "declaration": false, // adds "use strict" to the top of files "alwaysStrict": true, "outDir": "./build" }, "exclude": ["node_modules"], - "include": ["index.ts", "src/**/*.ts"] + "include": ["src/**/*"] }