diff --git a/monkey/monkey_island/cc/ui/package-lock.json b/monkey/monkey_island/cc/ui/package-lock.json index 21234ecf3..8e98d3d68 100644 --- a/monkey/monkey_island/cc/ui/package-lock.json +++ b/monkey/monkey_island/cc/ui/package-lock.json @@ -2797,6 +2797,7 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -2809,6 +2810,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -2817,6 +2819,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2826,6 +2829,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -2833,17 +2837,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -3795,6 +3802,11 @@ "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.36.tgz", "integrity": "sha512-7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ==" }, + "@types/history": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.9.tgz", + "integrity": "sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ==" + }, "@types/http-cache-semantics": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", @@ -3809,12 +3821,14 @@ "@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -3823,6 +3837,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -3831,6 +3846,7 @@ "version": "26.0.22", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.22.tgz", "integrity": "sha512-eeWwWjlqxvBxc4oQdkueW5OF/gtfSceKk4OnOAGlUSwS/liBRtZppbJuz1YkgbrbfGOoeBHun9fOvXnjNwrSOw==", + "dev": true, "requires": { "jest-diff": "^26.0.0", "pretty-format": "^26.0.0" @@ -3922,7 +3938,8 @@ "@types/node": { "version": "14.14.37", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==" + "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "dev": true }, "@types/normalize-package-data": { "version": "2.4.0", @@ -3961,10 +3978,30 @@ "version": "16.9.12", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.12.tgz", "integrity": "sha512-i7NPZZpPte3jtVOoW+eLB7G/jsX5OM6GqQnH+lC0nq0rqwlK0x8WcMEvYDgFWqWhWMlTltTimzdMax6wYfZssA==", + "dev": true, "requires": { "@types/react": "^16" } }, + "@types/react-router": { + "version": "5.1.16", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.16.tgz", + "integrity": "sha512-8d7nR/fNSqlTFGHti0R3F9WwIertOaaA1UEB8/jr5l5mDMOs4CidEgvvYMw4ivqrBK+vtVLxyTj2P+Pr/dtgzg==", + "requires": { + "@types/history": "*", + "@types/react": "*" + } + }, + "@types/react-router-dom": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.8.tgz", + "integrity": "sha512-03xHyncBzG0PmDmf8pf3rehtjY0NpUj7TIN46FrT5n1ZWHPZvXz32gUyNboJ+xsL8cpg8bQVLcllptcQHvocrw==", + "requires": { + "@types/history": "*", + "@types/react": "*", + "@types/react-router": "*" + } + }, "@types/react-table": { "version": "6.8.7", "resolved": "https://registry.npmjs.org/@types/react-table/-/react-table-6.8.7.tgz", @@ -4034,6 +4071,7 @@ "version": "15.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, "requires": { "@types/yargs-parser": "*" } @@ -4041,7 +4079,8 @@ "@types/yargs-parser": { "version": "20.2.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true }, "@webassemblyjs/ast": { "version": "1.9.0", @@ -7525,7 +7564,8 @@ "diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true }, "diffie-hellman": { "version": "5.0.3", @@ -10644,6 +10684,7 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^26.6.2", @@ -10655,6 +10696,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -10663,6 +10705,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10672,6 +10715,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -10679,17 +10723,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -10699,7 +10746,8 @@ "jest-get-type": { "version": "26.3.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true }, "js-base64": { "version": "2.5.2", @@ -12263,6 +12311,7 @@ "version": "6.14.13", "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.13.tgz", "integrity": "sha512-SRl4jJi0EBHY2xKuu98FLRMo3VhYQSA6otyLnjSEiHoSG/9shXCFNJy9tivpUJvtkN9s6VDdItHa5Rn+fNBzag==", + "dev": true, "requires": { "JSONStream": "^1.3.5", "abbrev": "~1.1.1", @@ -12392,6 +12441,7 @@ "JSONStream": { "version": "1.3.5", "bundled": true, + "dev": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -12399,11 +12449,13 @@ }, "abbrev": { "version": "1.1.1", - "bundled": true + "bundled": true, + "dev": true }, "agent-base": { "version": "4.3.0", "bundled": true, + "dev": true, "requires": { "es6-promisify": "^5.0.0" } @@ -12411,6 +12463,7 @@ "agentkeepalive": { "version": "3.5.2", "bundled": true, + "dev": true, "requires": { "humanize-ms": "^1.2.1" } @@ -12418,40 +12471,48 @@ "ansi-align": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "string-width": "^2.0.0" } }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "ansi-styles": { "version": "3.2.1", "bundled": true, + "dev": true, "requires": { "color-convert": "^1.9.0" } }, "ansicolors": { "version": "0.3.2", - "bundled": true + "bundled": true, + "dev": true }, "ansistyles": { "version": "0.1.3", - "bundled": true + "bundled": true, + "dev": true }, "aproba": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "archy": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "are-we-there-yet": { "version": "1.1.4", "bundled": true, + "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -12460,6 +12521,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12473,6 +12535,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -12481,38 +12544,46 @@ }, "asap": { "version": "2.0.6", - "bundled": true + "bundled": true, + "dev": true }, "asn1": { "version": "0.2.4", "bundled": true, + "dev": true, "requires": { "safer-buffer": "~2.1.0" } }, "assert-plus": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "asynckit": { "version": "0.4.0", - "bundled": true + "bundled": true, + "dev": true }, "aws-sign2": { "version": "0.7.0", - "bundled": true + "bundled": true, + "dev": true }, "aws4": { "version": "1.8.0", - "bundled": true + "bundled": true, + "dev": true }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true, "requires": { "tweetnacl": "^0.14.3" @@ -12521,6 +12592,7 @@ "bin-links": { "version": "1.1.8", "bundled": true, + "dev": true, "requires": { "bluebird": "^3.5.3", "cmd-shim": "^3.0.0", @@ -12532,11 +12604,13 @@ }, "bluebird": { "version": "3.5.5", - "bundled": true + "bundled": true, + "dev": true }, "boxen": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "ansi-align": "^2.0.0", "camelcase": "^4.0.0", @@ -12550,6 +12624,7 @@ "brace-expansion": { "version": "1.1.11", "bundled": true, + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12557,23 +12632,28 @@ }, "buffer-from": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "builtins": { "version": "1.0.3", - "bundled": true + "bundled": true, + "dev": true }, "byline": { "version": "5.0.0", - "bundled": true + "bundled": true, + "dev": true }, "byte-size": { "version": "5.0.1", - "bundled": true + "bundled": true, + "dev": true }, "cacache": { "version": "12.0.3", "bundled": true, + "dev": true, "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -12594,23 +12674,28 @@ }, "call-limit": { "version": "1.1.1", - "bundled": true + "bundled": true, + "dev": true }, "camelcase": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true }, "capture-stack-trace": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "caseless": { "version": "0.12.0", - "bundled": true + "bundled": true, + "dev": true }, "chalk": { "version": "2.4.1", "bundled": true, + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -12619,26 +12704,31 @@ }, "chownr": { "version": "1.1.4", - "bundled": true + "bundled": true, + "dev": true }, "ci-info": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "cidr-regex": { "version": "2.0.10", "bundled": true, + "dev": true, "requires": { "ip-regex": "^2.1.0" } }, "cli-boxes": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "cli-columns": { "version": "3.1.2", "bundled": true, + "dev": true, "requires": { "string-width": "^2.0.0", "strip-ansi": "^3.0.1" @@ -12647,6 +12737,7 @@ "cli-table3": { "version": "0.5.1", "bundled": true, + "dev": true, "requires": { "colors": "^1.1.2", "object-assign": "^4.1.0", @@ -12656,6 +12747,7 @@ "cliui": { "version": "5.0.0", "bundled": true, + "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -12664,15 +12756,18 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -12682,6 +12777,7 @@ "strip-ansi": { "version": "5.2.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -12690,11 +12786,13 @@ }, "clone": { "version": "1.0.4", - "bundled": true + "bundled": true, + "dev": true }, "cmd-shim": { "version": "3.0.3", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2", "mkdirp": "~0.5.0" @@ -12702,27 +12800,32 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "color-convert": { "version": "1.9.1", "bundled": true, + "dev": true, "requires": { "color-name": "^1.1.1" } }, "color-name": { "version": "1.1.3", - "bundled": true + "bundled": true, + "dev": true }, "colors": { "version": "1.3.3", "bundled": true, + "dev": true, "optional": true }, "columnify": { "version": "1.5.4", "bundled": true, + "dev": true, "requires": { "strip-ansi": "^3.0.0", "wcwidth": "^1.0.0" @@ -12731,17 +12834,20 @@ "combined-stream": { "version": "1.0.6", "bundled": true, + "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "dev": true }, "concat-stream": { "version": "1.6.2", "bundled": true, + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -12752,6 +12858,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12765,6 +12872,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -12774,6 +12882,7 @@ "config-chain": { "version": "1.1.12", "bundled": true, + "dev": true, "requires": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -12782,6 +12891,7 @@ "configstore": { "version": "3.1.5", "bundled": true, + "dev": true, "requires": { "dot-prop": "^4.2.1", "graceful-fs": "^4.1.2", @@ -12793,11 +12903,13 @@ }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "copy-concurrently": { "version": "1.0.5", "bundled": true, + "dev": true, "requires": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -12809,21 +12921,25 @@ "dependencies": { "aproba": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "iferr": { "version": "0.1.5", - "bundled": true + "bundled": true, + "dev": true } } }, "core-util-is": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "create-error-class": { "version": "3.0.2", "bundled": true, + "dev": true, "requires": { "capture-stack-trace": "^1.0.0" } @@ -12831,6 +12947,7 @@ "cross-spawn": { "version": "5.1.0", "bundled": true, + "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -12840,6 +12957,7 @@ "lru-cache": { "version": "4.1.5", "bundled": true, + "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -12847,21 +12965,25 @@ }, "yallist": { "version": "2.1.2", - "bundled": true + "bundled": true, + "dev": true } } }, "crypto-random-string": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "cyclist": { "version": "0.2.2", - "bundled": true + "bundled": true, + "dev": true }, "dashdash": { "version": "1.14.1", "bundled": true, + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -12869,35 +12991,42 @@ "debug": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "ms": "2.0.0" }, "dependencies": { "ms": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, "debuglog": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "decamelize": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "decode-uri-component": { "version": "0.2.0", - "bundled": true + "bundled": true, + "dev": true }, "deep-extend": { "version": "0.6.0", - "bundled": true + "bundled": true, + "dev": true }, "defaults": { "version": "1.0.3", "bundled": true, + "dev": true, "requires": { "clone": "^1.0.2" } @@ -12905,29 +13034,35 @@ "define-properties": { "version": "1.1.3", "bundled": true, + "dev": true, "requires": { "object-keys": "^1.0.12" } }, "delayed-stream": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "delegates": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "detect-indent": { "version": "5.0.0", - "bundled": true + "bundled": true, + "dev": true }, "detect-newline": { "version": "2.1.0", - "bundled": true + "bundled": true, + "dev": true }, "dezalgo": { "version": "1.0.3", "bundled": true, + "dev": true, "requires": { "asap": "^2.0.0", "wrappy": "1" @@ -12936,21 +13071,25 @@ "dot-prop": { "version": "4.2.1", "bundled": true, + "dev": true, "requires": { "is-obj": "^1.0.0" } }, "dotenv": { "version": "5.0.1", - "bundled": true + "bundled": true, + "dev": true }, "duplexer3": { "version": "0.1.4", - "bundled": true + "bundled": true, + "dev": true }, "duplexify": { "version": "3.6.0", "bundled": true, + "dev": true, "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -12961,6 +13100,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12974,6 +13114,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -12983,6 +13124,7 @@ "ecc-jsbn": { "version": "0.1.2", "bundled": true, + "dev": true, "optional": true, "requires": { "jsbn": "~0.1.0", @@ -12991,15 +13133,18 @@ }, "editor": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "emoji-regex": { "version": "7.0.3", - "bundled": true + "bundled": true, + "dev": true }, "encoding": { "version": "0.1.12", "bundled": true, + "dev": true, "requires": { "iconv-lite": "~0.4.13" } @@ -13007,21 +13152,25 @@ "end-of-stream": { "version": "1.4.1", "bundled": true, + "dev": true, "requires": { "once": "^1.4.0" } }, "env-paths": { "version": "2.2.0", - "bundled": true + "bundled": true, + "dev": true }, "err-code": { "version": "1.1.2", - "bundled": true + "bundled": true, + "dev": true }, "errno": { "version": "0.1.7", "bundled": true, + "dev": true, "requires": { "prr": "~1.0.1" } @@ -13029,6 +13178,7 @@ "es-abstract": { "version": "1.12.0", "bundled": true, + "dev": true, "requires": { "es-to-primitive": "^1.1.1", "function-bind": "^1.1.1", @@ -13040,6 +13190,7 @@ "es-to-primitive": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -13048,22 +13199,26 @@ }, "es6-promise": { "version": "4.2.8", - "bundled": true + "bundled": true, + "dev": true }, "es6-promisify": { "version": "5.0.0", "bundled": true, + "dev": true, "requires": { "es6-promise": "^4.0.3" } }, "escape-string-regexp": { "version": "1.0.5", - "bundled": true + "bundled": true, + "dev": true }, "execa": { "version": "0.7.0", "bundled": true, + "dev": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -13076,33 +13231,40 @@ "dependencies": { "get-stream": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, "extend": { "version": "3.0.2", - "bundled": true + "bundled": true, + "dev": true }, "extsprintf": { "version": "1.3.0", - "bundled": true + "bundled": true, + "dev": true }, "fast-json-stable-stringify": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "figgy-pudding": { "version": "3.5.1", - "bundled": true + "bundled": true, + "dev": true }, "find-npm-prefix": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "flush-write-stream": { "version": "1.0.3", "bundled": true, + "dev": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.4" @@ -13111,6 +13273,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13124,6 +13287,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -13132,11 +13296,13 @@ }, "forever-agent": { "version": "0.6.1", - "bundled": true + "bundled": true, + "dev": true }, "form-data": { "version": "2.3.2", "bundled": true, + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "1.0.6", @@ -13146,6 +13312,7 @@ "from2": { "version": "2.3.0", "bundled": true, + "dev": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -13154,6 +13321,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13167,6 +13335,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -13176,6 +13345,7 @@ "fs-minipass": { "version": "1.2.7", "bundled": true, + "dev": true, "requires": { "minipass": "^2.6.0" }, @@ -13183,6 +13353,7 @@ "minipass": { "version": "2.9.0", "bundled": true, + "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -13193,6 +13364,7 @@ "fs-vacuum": { "version": "1.2.10", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2", "path-is-inside": "^1.0.1", @@ -13202,6 +13374,7 @@ "fs-write-stream-atomic": { "version": "1.0.10", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", @@ -13211,11 +13384,13 @@ "dependencies": { "iferr": { "version": "0.1.5", - "bundled": true + "bundled": true, + "dev": true }, "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13229,6 +13404,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -13237,15 +13413,18 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "function-bind": { "version": "1.1.1", - "bundled": true + "bundled": true, + "dev": true }, "gauge": { "version": "2.7.4", "bundled": true, + "dev": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -13259,11 +13438,13 @@ "dependencies": { "aproba": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -13274,11 +13455,13 @@ }, "genfun": { "version": "5.0.0", - "bundled": true + "bundled": true, + "dev": true }, "gentle-fs": { "version": "2.3.1", "bundled": true, + "dev": true, "requires": { "aproba": "^1.1.2", "chownr": "^1.1.2", @@ -13295,21 +13478,25 @@ "dependencies": { "aproba": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "iferr": { "version": "0.1.5", - "bundled": true + "bundled": true, + "dev": true } } }, "get-caller-file": { "version": "2.0.5", - "bundled": true + "bundled": true, + "dev": true }, "get-stream": { "version": "4.1.0", "bundled": true, + "dev": true, "requires": { "pump": "^3.0.0" } @@ -13317,6 +13504,7 @@ "getpass": { "version": "0.1.7", "bundled": true, + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -13324,6 +13512,7 @@ "glob": { "version": "7.1.6", "bundled": true, + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -13336,6 +13525,7 @@ "global-dirs": { "version": "0.1.1", "bundled": true, + "dev": true, "requires": { "ini": "^1.3.4" } @@ -13343,6 +13533,7 @@ "got": { "version": "6.7.1", "bundled": true, + "dev": true, "requires": { "create-error-class": "^3.0.0", "duplexer3": "^0.1.4", @@ -13359,21 +13550,25 @@ "dependencies": { "get-stream": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, "graceful-fs": { "version": "4.2.4", - "bundled": true + "bundled": true, + "dev": true }, "har-schema": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "har-validator": { "version": "5.1.5", "bundled": true, + "dev": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -13382,6 +13577,7 @@ "ajv": { "version": "6.12.6", "bundled": true, + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13391,44 +13587,53 @@ }, "fast-deep-equal": { "version": "3.1.3", - "bundled": true + "bundled": true, + "dev": true }, "json-schema-traverse": { "version": "0.4.1", - "bundled": true + "bundled": true, + "dev": true } } }, "has": { "version": "1.0.3", "bundled": true, + "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-flag": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "has-symbols": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "has-unicode": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "hosted-git-info": { "version": "2.8.9", - "bundled": true + "bundled": true, + "dev": true }, "http-cache-semantics": { "version": "3.8.1", - "bundled": true + "bundled": true, + "dev": true }, "http-proxy-agent": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "agent-base": "4", "debug": "3.1.0" @@ -13437,6 +13642,7 @@ "http-signature": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -13446,6 +13652,7 @@ "https-proxy-agent": { "version": "2.2.4", "bundled": true, + "dev": true, "requires": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -13454,6 +13661,7 @@ "humanize-ms": { "version": "1.2.1", "bundled": true, + "dev": true, "requires": { "ms": "^2.0.0" } @@ -13461,36 +13669,43 @@ "iconv-lite": { "version": "0.4.23", "bundled": true, + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "iferr": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "ignore-walk": { "version": "3.0.3", "bundled": true, + "dev": true, "requires": { "minimatch": "^3.0.4" } }, "import-lazy": { "version": "2.1.0", - "bundled": true + "bundled": true, + "dev": true }, "imurmurhash": { "version": "0.1.4", - "bundled": true + "bundled": true, + "dev": true }, "infer-owner": { "version": "1.0.4", - "bundled": true + "bundled": true, + "dev": true }, "inflight": { "version": "1.0.6", "bundled": true, + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -13498,15 +13713,18 @@ }, "inherits": { "version": "2.0.4", - "bundled": true + "bundled": true, + "dev": true }, "ini": { "version": "1.3.8", - "bundled": true + "bundled": true, + "dev": true }, "init-package-json": { "version": "1.10.3", "bundled": true, + "dev": true, "requires": { "glob": "^7.1.1", "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", @@ -13520,43 +13738,51 @@ }, "ip": { "version": "1.1.5", - "bundled": true + "bundled": true, + "dev": true }, "ip-regex": { "version": "2.1.0", - "bundled": true + "bundled": true, + "dev": true }, "is-callable": { "version": "1.1.4", - "bundled": true + "bundled": true, + "dev": true }, "is-ci": { "version": "1.2.1", "bundled": true, + "dev": true, "requires": { "ci-info": "^1.5.0" }, "dependencies": { "ci-info": { "version": "1.6.0", - "bundled": true + "bundled": true, + "dev": true } } }, "is-cidr": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "cidr-regex": "^2.0.10" } }, "is-date-object": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -13564,6 +13790,7 @@ "is-installed-globally": { "version": "0.1.0", "bundled": true, + "dev": true, "requires": { "global-dirs": "^0.1.0", "is-path-inside": "^1.0.0" @@ -13571,85 +13798,103 @@ }, "is-npm": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-obj": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "is-path-inside": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "path-is-inside": "^1.0.1" } }, "is-redirect": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-regex": { "version": "1.0.4", "bundled": true, + "dev": true, "requires": { "has": "^1.0.1" } }, "is-retry-allowed": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "is-stream": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "is-symbol": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "has-symbols": "^1.0.0" } }, "is-typedarray": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "isarray": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "isexe": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "isstream": { "version": "0.1.2", - "bundled": true + "bundled": true, + "dev": true }, "jsbn": { "version": "0.1.1", "bundled": true, + "dev": true, "optional": true }, "json-parse-better-errors": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "json-schema": { "version": "0.2.3", - "bundled": true + "bundled": true, + "dev": true }, "json-stringify-safe": { "version": "5.0.1", - "bundled": true + "bundled": true, + "dev": true }, "jsonparse": { "version": "1.3.1", - "bundled": true + "bundled": true, + "dev": true }, "jsprim": { "version": "1.4.1", "bundled": true, + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -13660,17 +13905,20 @@ "latest-version": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "package-json": "^4.0.0" } }, "lazy-property": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "libcipm": { "version": "4.0.8", "bundled": true, + "dev": true, "requires": { "bin-links": "^1.1.2", "bluebird": "^3.5.1", @@ -13692,6 +13940,7 @@ "libnpm": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "bin-links": "^1.1.2", "bluebird": "^3.5.3", @@ -13718,6 +13967,7 @@ "libnpmaccess": { "version": "3.0.2", "bundled": true, + "dev": true, "requires": { "aproba": "^2.0.0", "get-stream": "^4.0.0", @@ -13728,6 +13978,7 @@ "libnpmconfig": { "version": "1.2.1", "bundled": true, + "dev": true, "requires": { "figgy-pudding": "^3.5.1", "find-up": "^3.0.0", @@ -13737,6 +13988,7 @@ "find-up": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -13744,6 +13996,7 @@ "locate-path": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -13752,6 +14005,7 @@ "p-limit": { "version": "2.2.0", "bundled": true, + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -13759,19 +14013,22 @@ "p-locate": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.2.0", - "bundled": true + "bundled": true, + "dev": true } } }, "libnpmhook": { "version": "5.0.3", "bundled": true, + "dev": true, "requires": { "aproba": "^2.0.0", "figgy-pudding": "^3.4.1", @@ -13782,6 +14039,7 @@ "libnpmorg": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "aproba": "^2.0.0", "figgy-pudding": "^3.4.1", @@ -13792,6 +14050,7 @@ "libnpmpublish": { "version": "1.1.2", "bundled": true, + "dev": true, "requires": { "aproba": "^2.0.0", "figgy-pudding": "^3.5.1", @@ -13807,6 +14066,7 @@ "libnpmsearch": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "figgy-pudding": "^3.5.1", "get-stream": "^4.0.0", @@ -13816,6 +14076,7 @@ "libnpmteam": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "aproba": "^2.0.0", "figgy-pudding": "^3.4.1", @@ -13826,6 +14087,7 @@ "libnpx": { "version": "10.2.4", "bundled": true, + "dev": true, "requires": { "dotenv": "^5.0.1", "npm-package-arg": "^6.0.0", @@ -13840,6 +14102,7 @@ "lock-verify": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "npm-package-arg": "^6.1.0", "semver": "^5.4.1" @@ -13848,17 +14111,20 @@ "lockfile": { "version": "1.0.4", "bundled": true, + "dev": true, "requires": { "signal-exit": "^3.0.2" } }, "lodash._baseindexof": { "version": "3.1.0", - "bundled": true + "bundled": true, + "dev": true }, "lodash._baseuniq": { "version": "4.6.0", "bundled": true, + "dev": true, "requires": { "lodash._createset": "~4.0.0", "lodash._root": "~3.0.0" @@ -13866,58 +14132,71 @@ }, "lodash._bindcallback": { "version": "3.0.1", - "bundled": true + "bundled": true, + "dev": true }, "lodash._cacheindexof": { "version": "3.0.2", - "bundled": true + "bundled": true, + "dev": true }, "lodash._createcache": { "version": "3.1.2", "bundled": true, + "dev": true, "requires": { "lodash._getnative": "^3.0.0" } }, "lodash._createset": { "version": "4.0.3", - "bundled": true + "bundled": true, + "dev": true }, "lodash._getnative": { "version": "3.9.1", - "bundled": true + "bundled": true, + "dev": true }, "lodash._root": { "version": "3.0.1", - "bundled": true + "bundled": true, + "dev": true }, "lodash.clonedeep": { "version": "4.5.0", - "bundled": true + "bundled": true, + "dev": true }, "lodash.restparam": { "version": "3.6.1", - "bundled": true + "bundled": true, + "dev": true }, "lodash.union": { "version": "4.6.0", - "bundled": true + "bundled": true, + "dev": true }, "lodash.uniq": { "version": "4.5.0", - "bundled": true + "bundled": true, + "dev": true }, "lodash.without": { "version": "4.4.0", - "bundled": true + "bundled": true, + "dev": true }, "lowercase-keys": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "lru-cache": { "version": "5.1.1", "bundled": true, + "dev": true, "requires": { "yallist": "^3.0.2" } @@ -13925,6 +14204,7 @@ "make-dir": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "pify": "^3.0.0" } @@ -13932,6 +14212,7 @@ "make-fetch-happen": { "version": "5.0.2", "bundled": true, + "dev": true, "requires": { "agentkeepalive": "^3.4.1", "cacache": "^12.0.0", @@ -13948,15 +14229,18 @@ }, "meant": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "mime-db": { "version": "1.35.0", - "bundled": true + "bundled": true, + "dev": true }, "mime-types": { "version": "2.1.19", "bundled": true, + "dev": true, "requires": { "mime-db": "~1.35.0" } @@ -13964,17 +14248,20 @@ "minimatch": { "version": "3.0.4", "bundled": true, + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.5", - "bundled": true + "bundled": true, + "dev": true }, "minizlib": { "version": "1.3.3", "bundled": true, + "dev": true, "requires": { "minipass": "^2.9.0" }, @@ -13982,6 +14269,7 @@ "minipass": { "version": "2.9.0", "bundled": true, + "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -13992,6 +14280,7 @@ "mississippi": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -14008,19 +14297,22 @@ "mkdirp": { "version": "0.5.5", "bundled": true, + "dev": true, "requires": { "minimist": "^1.2.5" }, "dependencies": { "minimist": { "version": "1.2.5", - "bundled": true + "bundled": true, + "dev": true } } }, "move-concurrently": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", @@ -14032,21 +14324,25 @@ "dependencies": { "aproba": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true } } }, "ms": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "mute-stream": { "version": "0.0.7", - "bundled": true + "bundled": true, + "dev": true }, "node-fetch-npm": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "encoding": "^0.1.11", "json-parse-better-errors": "^1.0.0", @@ -14056,6 +14352,7 @@ "node-gyp": { "version": "5.1.0", "bundled": true, + "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -14073,6 +14370,7 @@ "nopt": { "version": "4.0.3", "bundled": true, + "dev": true, "requires": { "abbrev": "1", "osenv": "^0.1.4" @@ -14081,6 +14379,7 @@ "normalize-package-data": { "version": "2.5.0", "bundled": true, + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -14091,6 +14390,7 @@ "resolve": { "version": "1.10.0", "bundled": true, + "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -14100,6 +14400,7 @@ "npm-audit-report": { "version": "1.3.3", "bundled": true, + "dev": true, "requires": { "cli-table3": "^0.5.0", "console-control-strings": "^1.1.0" @@ -14108,17 +14409,20 @@ "npm-bundled": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" } }, "npm-cache-filename": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "npm-install-checks": { "version": "3.0.2", "bundled": true, + "dev": true, "requires": { "semver": "^2.3.0 || 3.x || 4 || 5" } @@ -14126,6 +14430,7 @@ "npm-lifecycle": { "version": "3.1.5", "bundled": true, + "dev": true, "requires": { "byline": "^5.0.0", "graceful-fs": "^4.1.15", @@ -14139,15 +14444,18 @@ }, "npm-logical-tree": { "version": "1.2.1", - "bundled": true + "bundled": true, + "dev": true }, "npm-normalize-package-bin": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "npm-package-arg": { "version": "6.1.1", "bundled": true, + "dev": true, "requires": { "hosted-git-info": "^2.7.1", "osenv": "^0.1.5", @@ -14158,6 +14466,7 @@ "npm-packlist": { "version": "1.4.8", "bundled": true, + "dev": true, "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1", @@ -14167,6 +14476,7 @@ "npm-pick-manifest": { "version": "3.0.2", "bundled": true, + "dev": true, "requires": { "figgy-pudding": "^3.5.1", "npm-package-arg": "^6.0.0", @@ -14176,6 +14486,7 @@ "npm-profile": { "version": "4.0.4", "bundled": true, + "dev": true, "requires": { "aproba": "^1.1.2 || 2", "figgy-pudding": "^3.4.1", @@ -14185,6 +14496,7 @@ "npm-registry-fetch": { "version": "4.0.7", "bundled": true, + "dev": true, "requires": { "JSONStream": "^1.3.4", "bluebird": "^3.5.1", @@ -14197,24 +14509,28 @@ "dependencies": { "safe-buffer": { "version": "5.2.1", - "bundled": true + "bundled": true, + "dev": true } } }, "npm-run-path": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "path-key": "^2.0.0" } }, "npm-user-validate": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "npmlog": { "version": "4.1.2", "bundled": true, + "dev": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -14224,23 +14540,28 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "oauth-sign": { "version": "0.9.0", - "bundled": true + "bundled": true, + "dev": true }, "object-assign": { "version": "4.1.1", - "bundled": true + "bundled": true, + "dev": true }, "object-keys": { "version": "1.0.12", - "bundled": true + "bundled": true, + "dev": true }, "object.getownpropertydescriptors": { "version": "2.0.3", "bundled": true, + "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.5.1" @@ -14249,25 +14570,30 @@ "once": { "version": "1.4.0", "bundled": true, + "dev": true, "requires": { "wrappy": "1" } }, "opener": { "version": "1.5.2", - "bundled": true + "bundled": true, + "dev": true }, "os-homedir": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "osenv": { "version": "0.1.5", "bundled": true, + "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -14275,11 +14601,13 @@ }, "p-finally": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "package-json": { "version": "4.0.1", "bundled": true, + "dev": true, "requires": { "got": "^6.7.1", "registry-auth-token": "^3.0.1", @@ -14290,6 +14618,7 @@ "pacote": { "version": "9.5.12", "bundled": true, + "dev": true, "requires": { "bluebird": "^3.5.3", "cacache": "^12.0.2", @@ -14326,6 +14655,7 @@ "minipass": { "version": "2.9.0", "bundled": true, + "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -14336,6 +14666,7 @@ "parallel-transform": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "cyclist": "~0.2.2", "inherits": "^2.0.3", @@ -14345,6 +14676,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14358,6 +14690,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -14366,47 +14699,58 @@ }, "path-exists": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "path-is-inside": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "path-key": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "path-parse": { "version": "1.0.6", - "bundled": true + "bundled": true, + "dev": true }, "performance-now": { "version": "2.1.0", - "bundled": true + "bundled": true, + "dev": true }, "pify": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "prepend-http": { "version": "1.0.4", - "bundled": true + "bundled": true, + "dev": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "promise-inflight": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "promise-retry": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "err-code": "^1.0.0", "retry": "^0.10.0" @@ -14414,43 +14758,51 @@ "dependencies": { "retry": { "version": "0.10.1", - "bundled": true + "bundled": true, + "dev": true } } }, "promzard": { "version": "0.3.0", "bundled": true, + "dev": true, "requires": { "read": "1" } }, "proto-list": { "version": "1.2.4", - "bundled": true + "bundled": true, + "dev": true }, "protoduck": { "version": "5.0.1", "bundled": true, + "dev": true, "requires": { "genfun": "^5.0.0" } }, "prr": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "pseudomap": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "psl": { "version": "1.1.29", - "bundled": true + "bundled": true, + "dev": true }, "pump": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -14459,6 +14811,7 @@ "pumpify": { "version": "1.5.1", "bundled": true, + "dev": true, "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -14468,6 +14821,7 @@ "pump": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -14477,19 +14831,23 @@ }, "punycode": { "version": "1.4.1", - "bundled": true + "bundled": true, + "dev": true }, "qrcode-terminal": { "version": "0.12.0", - "bundled": true + "bundled": true, + "dev": true }, "qs": { "version": "6.5.2", - "bundled": true + "bundled": true, + "dev": true }, "query-string": { "version": "6.8.2", "bundled": true, + "dev": true, "requires": { "decode-uri-component": "^0.2.0", "split-on-first": "^1.0.0", @@ -14498,11 +14856,13 @@ }, "qw": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "rc": { "version": "1.2.8", "bundled": true, + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -14513,6 +14873,7 @@ "read": { "version": "1.0.7", "bundled": true, + "dev": true, "requires": { "mute-stream": "~0.0.4" } @@ -14520,6 +14881,7 @@ "read-cmd-shim": { "version": "1.0.5", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2" } @@ -14527,6 +14889,7 @@ "read-installed": { "version": "4.0.3", "bundled": true, + "dev": true, "requires": { "debuglog": "^1.0.1", "graceful-fs": "^4.1.2", @@ -14540,6 +14903,7 @@ "read-package-json": { "version": "2.1.1", "bundled": true, + "dev": true, "requires": { "glob": "^7.1.1", "graceful-fs": "^4.1.2", @@ -14551,6 +14915,7 @@ "read-package-tree": { "version": "5.3.1", "bundled": true, + "dev": true, "requires": { "read-package-json": "^2.0.0", "readdir-scoped-modules": "^1.0.0", @@ -14560,6 +14925,7 @@ "readable-stream": { "version": "3.6.0", "bundled": true, + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14569,6 +14935,7 @@ "readdir-scoped-modules": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", @@ -14579,6 +14946,7 @@ "registry-auth-token": { "version": "3.4.0", "bundled": true, + "dev": true, "requires": { "rc": "^1.1.6", "safe-buffer": "^5.0.1" @@ -14587,6 +14955,7 @@ "registry-url": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "rc": "^1.0.1" } @@ -14594,6 +14963,7 @@ "request": { "version": "2.88.0", "bundled": true, + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -14619,23 +14989,28 @@ }, "require-directory": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "require-main-filename": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "resolve-from": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true }, "retry": { "version": "0.12.0", - "bundled": true + "bundled": true, + "dev": true }, "rimraf": { "version": "2.7.1", "bundled": true, + "dev": true, "requires": { "glob": "^7.1.3" } @@ -14643,42 +15018,50 @@ "run-queue": { "version": "1.0.3", "bundled": true, + "dev": true, "requires": { "aproba": "^1.1.1" }, "dependencies": { "aproba": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true } } }, "safe-buffer": { "version": "5.1.2", - "bundled": true + "bundled": true, + "dev": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true + "bundled": true, + "dev": true }, "semver": { "version": "5.7.1", - "bundled": true + "bundled": true, + "dev": true }, "semver-diff": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "semver": "^5.0.3" } }, "set-blocking": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "sha": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2" } @@ -14686,29 +15069,35 @@ "shebang-command": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "signal-exit": { "version": "3.0.2", - "bundled": true + "bundled": true, + "dev": true }, "slide": { "version": "1.1.6", - "bundled": true + "bundled": true, + "dev": true }, "smart-buffer": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true }, "socks": { "version": "2.3.3", "bundled": true, + "dev": true, "requires": { "ip": "1.1.5", "smart-buffer": "^4.1.0" @@ -14717,6 +15106,7 @@ "socks-proxy-agent": { "version": "4.0.2", "bundled": true, + "dev": true, "requires": { "agent-base": "~4.2.1", "socks": "~2.3.2" @@ -14725,6 +15115,7 @@ "agent-base": { "version": "4.2.1", "bundled": true, + "dev": true, "requires": { "es6-promisify": "^5.0.0" } @@ -14733,11 +15124,13 @@ }, "sorted-object": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "sorted-union-stream": { "version": "2.1.3", "bundled": true, + "dev": true, "requires": { "from2": "^1.3.0", "stream-iterate": "^1.1.0" @@ -14746,6 +15139,7 @@ "from2": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "inherits": "~2.0.1", "readable-stream": "~1.1.10" @@ -14753,11 +15147,13 @@ }, "isarray": { "version": "0.0.1", - "bundled": true + "bundled": true, + "dev": true }, "readable-stream": { "version": "1.1.14", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -14767,13 +15163,15 @@ }, "string_decoder": { "version": "0.10.31", - "bundled": true + "bundled": true, + "dev": true } } }, "spdx-correct": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -14781,11 +15179,13 @@ }, "spdx-exceptions": { "version": "2.1.0", - "bundled": true + "bundled": true, + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -14793,15 +15193,18 @@ }, "spdx-license-ids": { "version": "3.0.5", - "bundled": true + "bundled": true, + "dev": true }, "split-on-first": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "sshpk": { "version": "1.14.2", "bundled": true, + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -14817,6 +15220,7 @@ "ssri": { "version": "6.0.2", "bundled": true, + "dev": true, "requires": { "figgy-pudding": "^3.5.1" } @@ -14824,6 +15228,7 @@ "stream-each": { "version": "1.2.2", "bundled": true, + "dev": true, "requires": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -14832,6 +15237,7 @@ "stream-iterate": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "readable-stream": "^2.1.5", "stream-shift": "^1.0.0" @@ -14840,6 +15246,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14853,6 +15260,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -14861,15 +15269,18 @@ }, "stream-shift": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "strict-uri-encode": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "2.1.1", "bundled": true, + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -14877,15 +15288,18 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "strip-ansi": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -14895,38 +15309,45 @@ "string_decoder": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.2.0" }, "dependencies": { "safe-buffer": { "version": "5.2.0", - "bundled": true + "bundled": true, + "dev": true } } }, "stringify-package": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "strip-ansi": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "strip-eof": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "strip-json-comments": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "supports-color": { "version": "5.4.0", "bundled": true, + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -14934,6 +15355,7 @@ "tar": { "version": "4.4.13", "bundled": true, + "dev": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", @@ -14947,6 +15369,7 @@ "minipass": { "version": "2.9.0", "bundled": true, + "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -14957,21 +15380,25 @@ "term-size": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "execa": "^0.7.0" } }, "text-table": { "version": "0.2.0", - "bundled": true + "bundled": true, + "dev": true }, "through": { "version": "2.3.8", - "bundled": true + "bundled": true, + "dev": true }, "through2": { "version": "2.0.3", "bundled": true, + "dev": true, "requires": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" @@ -14980,6 +15407,7 @@ "readable-stream": { "version": "2.3.6", "bundled": true, + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14993,6 +15421,7 @@ "string_decoder": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -15001,15 +15430,18 @@ }, "timed-out": { "version": "4.0.1", - "bundled": true + "bundled": true, + "dev": true }, "tiny-relative-date": { "version": "1.3.0", - "bundled": true + "bundled": true, + "dev": true }, "tough-cookie": { "version": "2.4.3", "bundled": true, + "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -15018,6 +15450,7 @@ "tunnel-agent": { "version": "0.6.0", "bundled": true, + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -15025,23 +15458,28 @@ "tweetnacl": { "version": "0.14.5", "bundled": true, + "dev": true, "optional": true }, "typedarray": { "version": "0.0.6", - "bundled": true + "bundled": true, + "dev": true }, "uid-number": { "version": "0.0.6", - "bundled": true + "bundled": true, + "dev": true }, "umask": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "unique-filename": { "version": "1.1.1", "bundled": true, + "dev": true, "requires": { "unique-slug": "^2.0.0" } @@ -15049,6 +15487,7 @@ "unique-slug": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "imurmurhash": "^0.1.4" } @@ -15056,21 +15495,25 @@ "unique-string": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "crypto-random-string": "^1.0.0" } }, "unpipe": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "unzip-response": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "update-notifier": { "version": "2.5.0", "bundled": true, + "dev": true, "requires": { "boxen": "^1.2.1", "chalk": "^2.0.1", @@ -15087,45 +15530,53 @@ "uri-js": { "version": "4.4.0", "bundled": true, + "dev": true, "requires": { "punycode": "^2.1.0" }, "dependencies": { "punycode": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true } } }, "url-parse-lax": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "prepend-http": "^1.0.1" } }, "util-deprecate": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "util-extend": { "version": "1.0.3", - "bundled": true + "bundled": true, + "dev": true }, "util-promisify": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "object.getownpropertydescriptors": "^2.0.3" } }, "uuid": { "version": "3.3.3", - "bundled": true + "bundled": true, + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "bundled": true, + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -15134,6 +15585,7 @@ "validate-npm-package-name": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "builtins": "^1.0.3" } @@ -15141,6 +15593,7 @@ "verror": { "version": "1.10.0", "bundled": true, + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -15150,6 +15603,7 @@ "wcwidth": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "defaults": "^1.0.3" } @@ -15157,17 +15611,20 @@ "which": { "version": "1.3.1", "bundled": true, + "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "wide-align": { "version": "1.1.2", "bundled": true, + "dev": true, "requires": { "string-width": "^1.0.2" }, @@ -15175,6 +15632,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -15186,6 +15644,7 @@ "widest-line": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "string-width": "^2.1.1" } @@ -15193,6 +15652,7 @@ "worker-farm": { "version": "1.7.0", "bundled": true, + "dev": true, "requires": { "errno": "~0.1.7" } @@ -15200,6 +15660,7 @@ "wrap-ansi": { "version": "5.1.0", "bundled": true, + "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -15208,15 +15669,18 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -15226,6 +15690,7 @@ "strip-ansi": { "version": "5.2.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -15234,11 +15699,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "write-file-atomic": { "version": "2.4.3", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -15247,23 +15714,28 @@ }, "xdg-basedir": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "xtend": { "version": "4.0.1", - "bundled": true + "bundled": true, + "dev": true }, "y18n": { "version": "4.0.1", - "bundled": true + "bundled": true, + "dev": true }, "yallist": { "version": "3.0.3", - "bundled": true + "bundled": true, + "dev": true }, "yargs": { "version": "14.2.3", "bundled": true, + "dev": true, "requires": { "cliui": "^5.0.0", "decamelize": "^1.2.0", @@ -15280,22 +15752,26 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true }, "find-up": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "locate-path": "^3.0.0" } }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "locate-path": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -15304,6 +15780,7 @@ "p-limit": { "version": "2.3.0", "bundled": true, + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -15311,17 +15788,20 @@ "p-locate": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.2.0", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -15331,6 +15811,7 @@ "strip-ansi": { "version": "5.2.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -15340,6 +15821,7 @@ "yargs-parser": { "version": "15.0.1", "bundled": true, + "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -15347,7 +15829,8 @@ "dependencies": { "camelcase": { "version": "5.3.1", - "bundled": true + "bundled": true, + "dev": true } } } @@ -16673,6 +17156,7 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, "requires": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -16683,12 +17167,14 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -16697,6 +17183,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -16704,12 +17191,14 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true } } }, diff --git a/monkey/monkey_island/cc/ui/package.json b/monkey/monkey_island/cc/ui/package.json index 1e164ba47..1a591e508 100644 --- a/monkey/monkey_island/cc/ui/package.json +++ b/monkey/monkey_island/cc/ui/package.json @@ -73,6 +73,7 @@ "@fortawesome/free-solid-svg-icons": "^5.15.1", "@fortawesome/react-fontawesome": "^0.1.12", "@kunukn/react-collapse": "^1.2.7", + "@types/react-router-dom": "^5.1.8", "bootstrap": "^4.5.3", "classnames": "^2.2.6", "core-js": "^3.7.0", diff --git a/monkey/monkey_island/cc/ui/src/components/IslandHttpClient.tsx b/monkey/monkey_island/cc/ui/src/components/IslandHttpClient.tsx new file mode 100644 index 000000000..1c9571011 --- /dev/null +++ b/monkey/monkey_island/cc/ui/src/components/IslandHttpClient.tsx @@ -0,0 +1,35 @@ +import AuthComponent from "./AuthComponent"; +import React from "react"; + +export class Response{ + body: any + status: number + + constructor(body: any, status: number) { + this.body = body + this.status = status + } +} + +class IslandHttpClient extends AuthComponent { + post(endpoint: string, contents: any): Promise{ + let status = null; + return this.authFetch(endpoint, + { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify(contents) + }) + .then(res => {status = res.status; return res.json()}) + .then(res => new Response(res, status)); + } + + get(endpoint: string): Promise{ + let status = null; + return this.authFetch(endpoint) + .then(res => {status = res.status; return res.json()}) + .then(res => new Response(res, status)); + } +} + +export default new IslandHttpClient(); diff --git a/monkey/monkey_island/cc/ui/src/components/Main.js b/monkey/monkey_island/cc/ui/src/components/Main.js deleted file mode 100644 index 7a7851af8..000000000 --- a/monkey/monkey_island/cc/ui/src/components/Main.js +++ /dev/null @@ -1,225 +0,0 @@ -import React from 'react'; -import {BrowserRouter as Router, Redirect, Route, Switch} from 'react-router-dom'; -import {Container} from 'react-bootstrap'; - -import GettingStartedPage from 'components/pages/GettingStartedPage'; -import ConfigurePage from 'components/pages/ConfigurePage'; -import RunMonkeyPage from 'components/pages/RunMonkeyPage/RunMonkeyPage'; -import MapPage from 'components/pages/MapPage'; -import TelemetryPage from 'components/pages/TelemetryPage'; -import StartOverPage from 'components/pages/StartOverPage'; -import ReportPage from 'components/pages/ReportPage'; -import LicensePage from 'components/pages/LicensePage'; -import AuthComponent from 'components/AuthComponent'; -import LoginPageComponent from 'components/pages/LoginPage'; -import RegisterPageComponent from 'components/pages/RegisterPage'; -import Notifier from 'react-desktop-notification'; -import NotFoundPage from 'components/pages/NotFoundPage'; - - -import 'normalize.css/normalize.css'; -import 'react-data-components/css/table-twbs.css'; -import 'styles/App.css'; -import 'react-toggle/style.css'; -import 'react-table/react-table.css'; -import notificationIcon from '../images/notification-logo-512x512.png'; -import {StandardLayoutComponent} from './layouts/StandardLayoutComponent'; -import LoadingScreen from './ui-components/LoadingScreen'; - -const reportZeroTrustRoute = '/report/zeroTrust'; -const islandModeRoute = '/api/island-mode' - -class AppComponent extends AuthComponent { - updateStatus = () => { - if (this.state.isLoggedIn === false) { - return - } - this.auth.loggedIn() - .then(res => { - if (this.state.isLoggedIn !== res) { - this.setState({ - isLoggedIn: res - }); - } - - if (!res) { - this.auth.needsRegistration() - .then(result => { - this.setState({ - needsRegistration: result - }); - }) - } - - if (res) { - this.authFetch('/api') - .then(res => res.json()) - .then(res => { - // This check is used to prevent unnecessary re-rendering - let isChanged = false; - for (let step in this.state.completedSteps) { - if (this.state.completedSteps[step] !== res['completed_steps'][step]) { - isChanged = true; - break; - } - } - if (isChanged) { - this.setState({completedSteps: res['completed_steps']}); - this.showInfectionDoneNotification(); - } - }); - } - }); - }; - - renderRoute = (route_path, page_component, is_exact_path = false) => { - let render_func = () => { - switch (this.state.isLoggedIn) { - case true: - return page_component; - case false: - switch (this.state.needsRegistration) { - case true: - return - case false: - return ; - default: - return ; - } - default: - return ; - } - }; - - if (is_exact_path) { - return ; - } else { - return ; - } - }; - - redirectTo = (userPath, targetPath) => { - let pathQuery = new RegExp(userPath + '[/]?$', 'g'); - if (window.location.pathname.match(pathQuery)) { - return - } - }; - - constructor(props) { - super(props); - this.state = { - completedSteps: { - run_server: true, - run_monkey: false, - infection_done: false, - report_done: false, - isLoggedIn: undefined, - needsRegistration: undefined, - islandMode: undefined - }, - noAuthLoginAttempted: undefined - }; - } - - updateIslandMode() { - this.authFetch(islandModeRoute) - .then(res => res.json()) - .then(res => { - this.setState({islandMode: res.mode}) - } - ); - } - - componentDidMount() { - this.updateStatus(); - this.interval = setInterval(this.updateStatus, 10000); - this.updateIslandMode() - } - - componentWillUnmount() { - clearInterval(this.interval); - } - - render() { - return ( - - - - ()}/> - ()}/> - {this.renderRoute('/', - , - true)} - {this.renderRoute('/configure', - )} - {this.renderRoute('/run-monkey', - )} - {this.renderRoute('/infection/map', - )} - {this.renderRoute('/infection/telemetry', - )} - {this.renderRoute('/start-over', - )} - {this.redirectTo('/report', '/report/security')} - {this.renderRoute('/report/security', - )} - {this.renderRoute('/report/attack', - )} - {this.renderRoute('/report/zeroTrust', - )} - {this.renderRoute('/report/ransomware', - )} - {this.renderRoute('/license', - )} - - - - - ); - } - - showInfectionDoneNotification() { - if (this.shouldShowNotification()) { - const hostname = window.location.hostname; - const port = window.location.port; - const protocol = window.location.protocol; - const url = `${protocol}//${hostname}:${port}${reportZeroTrustRoute}`; - - Notifier.start( - 'Monkey Island', - 'Infection is done! Click here to go to the report page.', - url, - notificationIcon); - } - } - - shouldShowNotification() { - // No need to show the notification to redirect to the report if we're already in the report page - return (this.state.completedSteps.infection_done && !window.location.pathname.startsWith('/report')); - } -} - -AppComponent.defaultProps = {}; - -export default AppComponent; diff --git a/monkey/monkey_island/cc/ui/src/components/Main.tsx b/monkey/monkey_island/cc/ui/src/components/Main.tsx new file mode 100644 index 000000000..fb2733301 --- /dev/null +++ b/monkey/monkey_island/cc/ui/src/components/Main.tsx @@ -0,0 +1,266 @@ +import React from 'react'; +import {BrowserRouter as Router, Redirect, Route, Switch} from 'react-router-dom'; +import {Container} from 'react-bootstrap'; + +import ConfigurePage from './pages/ConfigurePage.js'; +import RunMonkeyPage from './pages/RunMonkeyPage/RunMonkeyPage'; +import MapPage from './pages/MapPage'; +import TelemetryPage from './pages/TelemetryPage'; +import StartOverPage from './pages/StartOverPage'; +import ReportPage from './pages/ReportPage'; +import LicensePage from './pages/LicensePage'; +import AuthComponent from './AuthComponent'; +import LoginPageComponent from './pages/LoginPage'; +import RegisterPageComponent from './pages/RegisterPage'; +import LandingPage from "./pages/LandingPage"; +import Notifier from 'react-desktop-notification'; +import NotFoundPage from './pages/NotFoundPage'; +import GettingStartedPage from './pages/GettingStartedPage'; + + +import 'normalize.css/normalize.css'; +import 'react-data-components/css/table-twbs.css'; +import 'styles/App.css'; +import 'react-toggle/style.css'; +import 'react-table/react-table.css'; +import LoadingScreen from './ui-components/LoadingScreen'; +import SidebarLayoutComponent from "./layouts/SidebarLayoutComponent"; +import {CompletedSteps} from "./side-menu/CompletedSteps"; +import Timeout = NodeJS.Timeout; +import IslandHttpClient from "./IslandHttpClient"; +import _ from "lodash"; + + +let notificationIcon = require('../images/notification-logo-512x512.png'); + +const Routes = { + LandingPage: '/landing-page', + GettingStartedPage: '/', + Report: '/report', + AttackReport: '/report/attack', + ZeroTrustReport: '/report/zeroTrust', + SecurityReport: '/report/security', + RansomwareReport: '/report/ransomware', + LoginPage: '/login', + RegisterPage: '/register', + ConfigurePage: '/configure', + RunMonkeyPage: '/run-monkey', + MapPage: '/infection/map', + TelemetryPage: '/infection/telemetry', + StartOverPage: '/start-over', + LicensePage: '/license' +} + +export function isReportRoute(route){ + return route.startsWith(Routes.Report); +} + +class AppComponent extends AuthComponent { + private interval: Timeout; + + constructor(props) { + super(props); + let completedSteps = new CompletedSteps(false); + this.state = { + loading: true, + completedSteps: completedSteps, + islandMode: undefined, + noAuthLoginAttempted: undefined + }; + this.interval = undefined; + } + + updateStatus = () => { + if (this.state.isLoggedIn === false) { + return + } + this.auth.loggedIn() + .then(res => { + if (this.state.isLoggedIn !== res) { + this.setState({ + isLoggedIn: res + }); + } + + if (!res) { + this.auth.needsRegistration() + .then(result => { + this.setState({ + needsRegistration: result + }); + }) + } + + if (res) { + this.setMode() + .then(() => { + if (this.state.islandMode === null) { + return + } + this.authFetch('/api') + .then(res => res.json()) + .then(res => { + let completedSteps = CompletedSteps.buildFromResponse(res.completed_steps); + // This check is used to prevent unnecessary re-rendering + if (_.isEqual(this.state.completedSteps, completedSteps)) { + return; + } + this.setState({completedSteps: completedSteps}); + this.showInfectionDoneNotification(); + }); + } + ) + + } + }); + }; + + setMode = () => { + return IslandHttpClient.get('/api/island-mode') + .then(res => { + this.setState({islandMode: res.body.mode}); + }); + } + + renderRoute = (route_path, page_component, is_exact_path = false) => { + let render_func = () => { + switch (this.state.isLoggedIn) { + case true: + if (this.needsRedirectionToLandingPage(route_path)) { + return + } else if (this.needsRedirectionToGettingStarted(route_path)) { + return + } + return page_component; + case false: + switch (this.state.needsRegistration) { + case true: + return + case false: + return ; + default: + return ; + } + default: + return ; + } + }; + + if (is_exact_path) { + return ; + } else { + return ; + } + }; + + needsRedirectionToLandingPage = (route_path) => { + return (this.state.islandMode === null && route_path !== Routes.LandingPage) + } + + needsRedirectionToGettingStarted = (route_path) => { + return route_path === Routes.LandingPage && + this.state.islandMode !== null && this.state.islandMode !== undefined + } + + redirectTo = (userPath, targetPath) => { + let pathQuery = new RegExp(userPath + '[/]?$', 'g'); + if (window.location.pathname.match(pathQuery)) { + return + } + }; + + componentDidMount() { + this.updateStatus(); + this.interval = setInterval(this.updateStatus, 10000); + } + + componentWillUnmount() { + clearInterval(this.interval); + } + + render() { + return ( + + + + ()}/> + ()}/> + {this.renderRoute(Routes.LandingPage, + )} + {this.renderRoute(Routes.GettingStartedPage, + , + true)} + {this.renderRoute(Routes.ConfigurePage, + )} + {this.renderRoute(Routes.RunMonkeyPage, + )} + {this.renderRoute(Routes.MapPage, + )} + {this.renderRoute(Routes.TelemetryPage, + )} + {this.renderRoute(Routes.StartOverPage, + )} + {this.redirectTo(Routes.Report, Routes.SecurityReport)} + {this.renderRoute(Routes.SecurityReport, + )} + {this.renderRoute(Routes.AttackReport, + )} + {this.renderRoute(Routes.ZeroTrustReport, + )} + {this.renderRoute(Routes.RansomwareReport, + )} + {this.renderRoute(Routes.LicensePage, + )} + + + + + ); + } + + showInfectionDoneNotification() { + if (this.shouldShowNotification()) { + const hostname = window.location.hostname; + const port = window.location.port; + const protocol = window.location.protocol; + const url = `${protocol}//${hostname}:${port}${Routes.ZeroTrustReport}`; + + Notifier.start( + 'Monkey Island', + 'Infection is done! Click here to go to the report page.', + url, + notificationIcon); + } + } + + shouldShowNotification() { + // No need to show the notification to redirect to the report if we're already in the report page + return (this.state.completedSteps.infection_done && !window.location.pathname.startsWith(Routes.Report)); + } +} + +export default AppComponent; diff --git a/monkey/monkey_island/cc/ui/src/components/SideNavComponent.js b/monkey/monkey_island/cc/ui/src/components/SideNavComponent.js deleted file mode 100644 index c260da2bf..000000000 --- a/monkey/monkey_island/cc/ui/src/components/SideNavComponent.js +++ /dev/null @@ -1,92 +0,0 @@ -import React from 'react'; -import {NavLink} from 'react-router-dom'; -import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; -import {faCheck} from '@fortawesome/free-solid-svg-icons/faCheck'; -import {faUndo} from '@fortawesome/free-solid-svg-icons/faUndo'; -import {faExternalLinkAlt} from '@fortawesome/free-solid-svg-icons'; -import guardicoreLogoImage from '../images/guardicore-logo.png'; -import logoImage from '../images/monkey-icon.svg'; -import infectionMonkeyImage from '../images/infection-monkey.svg'; -import VersionComponent from './side-menu/VersionComponent'; -import '../styles/components/SideNav.scss'; - - -class SideNavComponent extends React.Component { - - render() { - return ( - <> - -
- logo - Infection Monkey -
-
- -
    -
  • - - 1. - Run Monkey - {this.props.completedSteps.run_monkey ? - - : ''} - -
  • -
  • - - 2. - Infection Map - {this.props.completedSteps.infection_done ? - - : ''} - -
  • -
  • - { - return (location.pathname === '/report/attack' - || location.pathname === '/report/zeroTrust' - || location.pathname === '/report/security') - }}> - 3. - Security Reports - {this.props.completedSteps.report_done ? - - : ''} - -
  • -
  • - - - Start Over - -
  • -
- -
-
    -
  • Configuration
  • -
  • Logs
  • -
- -
-
- Powered by - - GuardiCore - -
-
- - Documentation - -
- License -
- - ) - } -} - -export default SideNavComponent; diff --git a/monkey/monkey_island/cc/ui/src/components/SideNavComponent.tsx b/monkey/monkey_island/cc/ui/src/components/SideNavComponent.tsx new file mode 100644 index 000000000..bd0bde5a1 --- /dev/null +++ b/monkey/monkey_island/cc/ui/src/components/SideNavComponent.tsx @@ -0,0 +1,113 @@ +import React from 'react'; +import {NavLink} from 'react-router-dom'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {faCheck} from '@fortawesome/free-solid-svg-icons/faCheck'; +import {faUndo} from '@fortawesome/free-solid-svg-icons/faUndo'; +import {faExternalLinkAlt} from '@fortawesome/free-solid-svg-icons'; +import VersionComponent from './side-menu/VersionComponent'; +import '../styles/components/SideNav.scss'; +import {CompletedSteps} from "./side-menu/CompletedSteps"; +import {isReportRoute} from "./Main"; + + +const guardicoreLogoImage = require('../images/guardicore-logo.png'); +const logoImage = require('../images/monkey-icon.svg'); +const infectionMonkeyImage = require('../images/infection-monkey.svg'); + + +type Props = { + disabled?: boolean, + completedSteps: CompletedSteps +} + + +const SideNavComponent = ({disabled=false, completedSteps}: Props) => { + + return ( + <> + +
+ logo + Infection Monkey +
+
+ +
    +
  • + + 1. + Run Monkey + {completedSteps.runMonkey ? + + : ''} + +
  • +
  • + + 2. + Infection Map + {completedSteps.infectionDone ? + + : ''} + +
  • +
  • + { + return (isReportRoute(location.pathname)) + }}> + 3. + Security Reports + {completedSteps.reportDone ? + + : ''} + +
  • +
  • + + + Start Over + +
  • +
+ +
+
    +
  • + Configuration +
  • +
  • + Logs +
  • +
+ +
+
+ Powered by + + GuardiCore + +
+
+ + Documentation + +
+ License +
+ + ); + + function getNavLinkClass() { + if(disabled){ + return `nav-link disabled` + } else { + return '' + } + } +} + +export default SideNavComponent; diff --git a/monkey/monkey_island/cc/ui/src/components/layouts/SidebarLayoutComponent.tsx b/monkey/monkey_island/cc/ui/src/components/layouts/SidebarLayoutComponent.tsx new file mode 100644 index 000000000..45e82e60c --- /dev/null +++ b/monkey/monkey_island/cc/ui/src/components/layouts/SidebarLayoutComponent.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import {Route} from 'react-router-dom'; +import SideNavComponent from '../SideNavComponent.tsx'; +import {Col, Row} from 'react-bootstrap'; + +const SidebarLayoutComponent = ({component: Component, + sideNavDisabled = false, + completedSteps = null, + ...other + }) => ( + { + return ( + + + + + + ) + }}/> +) + +export default SidebarLayoutComponent; diff --git a/monkey/monkey_island/cc/ui/src/components/layouts/StandardLayoutComponent.js b/monkey/monkey_island/cc/ui/src/components/layouts/StandardLayoutComponent.js deleted file mode 100644 index 1819f67bb..000000000 --- a/monkey/monkey_island/cc/ui/src/components/layouts/StandardLayoutComponent.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import {Route} from 'react-router-dom' -import SideNavComponent from '../SideNavComponent' -import {Col, Row} from 'react-bootstrap'; - -export const StandardLayoutComponent = ({component: Component, ...rest}) => ( - ( - - - - - - - )}/> -) diff --git a/monkey/monkey_island/cc/ui/src/components/pages/LandingPage.tsx b/monkey/monkey_island/cc/ui/src/components/pages/LandingPage.tsx new file mode 100644 index 000000000..e25717b7f --- /dev/null +++ b/monkey/monkey_island/cc/ui/src/components/pages/LandingPage.tsx @@ -0,0 +1,75 @@ +import React from 'react'; +import {Col, Row} from 'react-bootstrap'; +import {Link} from 'react-router-dom'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {faFileCode, faLightbulb} from '@fortawesome/free-solid-svg-icons'; +import '../../styles/pages/LandingPage.scss'; +import IslandHttpClient from "../IslandHttpClient"; + + +const LandingPageComponent = (props) => { + + return ( + +

Welcome to the Monkey Island Server

+
+ +
+
+ + ); + + function ScenarioButtons() { + return ( +
+

Choose a scenario:

+
+ +
+ { + setScenario('ransomware') + }}> +

Ransomware

+

Simulate ransomware infection in the network.

+ +
+
+ { + setScenario('advanced') + }}> +

Custom

+

Fine tune the simulation to your needs.

+ +
+
+ +
+
+ ); + } + + function setScenario(scenario: string) { + IslandHttpClient.post('/api/island-mode', {'mode': scenario}); + props.onStatusChange(); + } +} + +function MonkeyInfo() { + return ( + <> +

What is Infection Monkey?

+ Infection Monkey is an open-source security tool for testing a data center's resiliency to + perimeter + breaches and internal server infections. The Monkey uses various methods to propagate across a data center + and reports to this Monkey Island Command and Control server. + + ); +} + +export default LandingPageComponent; diff --git a/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js b/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js index c536146bf..84b84d6f7 100644 --- a/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js +++ b/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js @@ -38,11 +38,11 @@ class StartOverPageComponent extends AuthComponent { - +

Start Over

@@ -88,7 +88,10 @@ class StartOverPageComponent extends AuthComponent { cleaned: true }); } - }).then(this.updateMonkeysRunning()); + }).then(() => { + this.updateMonkeysRunning(); + this.props.onStatusChange(); + }); }; closeModal = () => { diff --git a/monkey/monkey_island/cc/ui/src/components/side-menu/CompletedSteps.tsx b/monkey/monkey_island/cc/ui/src/components/side-menu/CompletedSteps.tsx new file mode 100644 index 000000000..bff4565f3 --- /dev/null +++ b/monkey/monkey_island/cc/ui/src/components/side-menu/CompletedSteps.tsx @@ -0,0 +1,32 @@ +export class CompletedSteps { + runServer: boolean + runMonkey: boolean + infectionDone: boolean + reportDone: boolean + isLoggedIn: boolean + needsRegistration: boolean + + public constructor(runServer?: boolean, + runMonkey?: boolean, + infectinDone?: boolean, + reportDone?: boolean) { + this.runServer = runServer || false; + this.runMonkey = runMonkey || false; + this.infectionDone = infectinDone || false; + this.reportDone = reportDone || false; + } + + static buildFromResponse(response: CompletedStepsRequest) { + return new CompletedSteps(response.run_server, + response.run_monkey, + response.infection_done, + response.report_done); + } +} + +type CompletedStepsRequest = { + run_server: boolean, + run_monkey: boolean, + infection_done: boolean, + report_done: boolean +} diff --git a/monkey/monkey_island/cc/ui/src/styles/pages/LandingPage.scss b/monkey/monkey_island/cc/ui/src/styles/pages/LandingPage.scss new file mode 100644 index 000000000..8cdf6ffe7 --- /dev/null +++ b/monkey/monkey_island/cc/ui/src/styles/pages/LandingPage.scss @@ -0,0 +1,12 @@ +.landing-page h1.page-title { + margin-bottom: 20px; +} + +.landing-page h2.scenario-choice-title { + margin-bottom: 20px; + margin-left: 12px; +} + +.landing-page .monkey-description-title { + margin-top: 30px; +} diff --git a/monkey/monkey_island/cc/ui/tsconfig.json b/monkey/monkey_island/cc/ui/tsconfig.json index 80b20886e..ada32ea6b 100644 --- a/monkey/monkey_island/cc/ui/tsconfig.json +++ b/monkey/monkey_island/cc/ui/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "allowJs": true, "sourceMap": true, "module": "commonjs", "target": "es6",